转自:http://elf8848.iteye.com/blog/875830很棒的一篇博客,想了解SpringMvc的入门选手可以去看看。
一,核心类与接口:
DispatcherServlet - 前端控制器
HandlerMapping接口 - 处理请求的映射
HandleMapping接口的实现类:
SimpleUrlHandlerMapping通过配置文件将一个URL映射到Controller
DefaultAnnotationHandleMapping通过注解,将一个URL映射到Controller类上
HandlerAdapter接口 - 处理请求的映射
AnnotationMethodHandlerAdapter类,通过注解,把一个URL映射到Controller类的方法上
Controller接口 - 控制器
由于使用了@controller注解,添加了@Controller注解的类就可以担任控制器(Action)的职责
HandlerInterceptor 接口 - 拦截器
ViewResolver接口的实现类
UrlBasedViewResolver类通过配置文件,把一个视图名交给到一个View来处理
InternalResourceViewResolver类,比上面的类,加入了JSTL的支持。
View接口
JstlView类
LocalResolver接口
HandlerExceptionResolver接口 - 异常处理
SimpleMappingExceptionResolver实现类
ModelAndView类
二,核心流程
三,DispacherServlet说明
使用SpringMvc配置Dispatch而Servlet是第一步。
DispatcherServlet是一个Servlet,所以可以配置多个DispatcherServlet
DispatcherServlet是前置控制器,配置在web.xml中。拦截匹配的请求,Servlet拦截匹配规则要自己定义,把拦截下来的请求,依靠某某规则分发到目标Controller我们写的(Action)来处理。
分发到Controller的某某规则根据你使用了哪个HandlerMapping接口的实现类的不同而不同。
- <web-app>
- <servlet>
- <servlet-name>example</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <load-on-startup>1</load-on-startup> //是启动顺序,让这个Servlet随Servlettp容器一起启动
- </servlet>
- <servlet-mapping>
- <servlet-name>example</servlet-name> //servlet的名字,可以有多个DispatcherServlet,是通过名字来区分的,每个DispatcherServlet都有自己的WebAppliContext上下文对象。同时保存在ServletContext中和Request对象中。
- <url-pattern>*.form</url-pattern> //拦截所有以.form结尾的请求。
- </servlet-mapping>
- </web-app>
在DispatcherServlet的初始化过程中,框架会在web应用的WEB-INF文件夹下寻找名为【servlet-name】-servlet.xml的配置文件,生成文件中定义的bean。
- <servlet>
- <servlet-name>springMVC</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath*:/springMVC.xml</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>springMVC</servlet-name>
- <url-pattern>/</url-pattern>
- </servlet-mapping>
指明了配置文件的文件名,不使用默认配置文件名,而是用springMvc.xml配置文件。
其中<param-value>**.xml</param-value>这里可以使用多种写法
1,不写,使用默认值:/WEB-INF/<servlet-name>-servlet.xml 比如说你的servlet-name是example那么找的那个文件就是example-servlet.xml
2,<param-value>/WEB-INF/classes/springMvc.xml<param-value>
3,<param-vlue>classpath*.springMvc-mvc.xml</param-value>
4,多个值用都好分隔。