【springmvc其实就是一个mvc框架,但是感觉他比Struts2做的要好一点。而且他对现在的异种风格rest的风格提供了比较好的支持。】
1、 首先我们的请求到了dispatcher(控制器),
【如在web.xml中的<servlet-name>hello</servlet-name>//由于这个名称为hello,所以就需要在web-inf中创建一个xml文件来专门写springmvc的配置,这里的名字必须为servlet的这里的名称。<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>//只要我一访问页面都会被servlet给捕获掉。捕获之后进入springmvc的处理,这是第一步。】,
2、 然后这个控制器会去找一个handlermapping
这个是在配置文件中配的,它可以通过handler mapping来找到我们当前的URL的请求该交给哪一个具体的controller来处理。
<bean name="/welcome.html" class="zttc.itat.controller.WelcomeController"></bean>
【创建WelcomeController类】
public classWelcomeController extends AbstractController {
@Override
protected ModelAndView handleRequestInternal(HttpServletRequestrequest,
HttpServletResponseresponse) throwsException {
System.out.println("welcome");
return new ModelAndView("welcome");//给它一个视图进行对应
}
}
【这个就相当于在Struts中创建了一个action。而handleRequestInternal方法就相当于是execute方法。这里就等译创建了一个控制器。它里面有个执行方法。那怎么能够对应到这个控制器呢?是通过BeanNameUrlHandlerMapping,这里写的是<bean name="/welcome.html"class="zttc.itat.controller.WelcomeController"></bean>他就会自动找到上面那个WelcomeController类】
3、找到之后就交给相应的controller,
4、然后controller就跟我们的service完成交互,跟我们的javabean完成交互,处理得到某一个值,
5、得到这个值之后就返回一个视图,返回的视图他通过viewresolver这个东西来找到他究竟对应
6、哪一个返回的视图,是用哪种形式返回的。然后再找一个视图返回给它。】
再补充:
先简单的说下这个工程的流程,访问http://localhost:8080/index首先由DispatcherServlet【web.mxl-- org.springframework.web.servlet.DispatcherServlet】进行转发,通过BeanNameUrlHandlerMapping(含有 /index->HomeAction的配置),找到了HomeAction【hello-servlet.xml----<bean name="/welcome.html" class="zttc.itat.controller.WelcomeController"></bean>】,然后再拿HomeAction和每个adapter进行适配,由于HomeAction实现了Controller接口【WelcomeController类】,所以最终会有SimpleControllerHandlerAdapter来完成对HomeAction的handleRequest方法的调度【protected ModelAndView handleRequestInternal(HttpServletRequestrequest,HttpServletResponse response) throws Exception {}】。然后就顺利的执行了我们想要的方法,后面的内容不在本节中说明。
Web.xml
<?xml version="1.0"encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<servlet>
【1】 <servlet-name>hello</servlet-name>//由于这个名称为hello,所以就需要在web-inf中创建一个xml文件来专门写springmvc的配置,这里的名字必须为servlet的这里的名称。
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>//让它启动的是就让DispatcherServlet启动
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>//只要我一访问页面都会被servlet给捕获掉。捕获之后进入springmvc的处理,这是第一步。
<filter>
<filter-name>CharacterFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Hello-servlet.xml
<?xml version="1.0"encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.1.xsd">
<context:component-scan base-package="zttc.itat.controller"/>
<mvc:annotation-driven/>
<!-- 将静态文件指定到某个特殊的文件夹中统一处理 -->
<mvc:resources location="/resources/" mapping="/resources/**"/>
<bean name="/welcome.html" class="zttc.itat.controller.WelcomeController"></bean>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<propertyname="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
【创建WelcomeController类】
public classWelcomeControllerextendsAbstractController {
@Override
protected ModelAndViewhandleRequestInternal(HttpServletRequest request,
HttpServletResponseresponse) throwsException {
System.out.println("welcome");
return new ModelAndView("welcome");//给它一个视图进行对应
}
}