一、SpringMVC
SpringMVC是一个基于MVC模式的web/表现层框架,是spring的的一部分。
二、SpringMVC的工作流程
1.前端控制器(DispacherServlet):负责转发请求,接受用户的请求,申请处理后,将响应返回给客户
2.处理器映射器(HandlerMapping):前端控制器把请求转发给处理器映射器。处理器映射器根据请求中的URL,找到对应的Handler(相当于struts2的Action),返回给前端控制器。
3.处理器适配器(HandlerAdapter):前端控制器知道要执行哪个Handler,但是它只是把信息转发给处理器适配器,处理器适配器调用程序写好的Handler,Handler执行完,返回一个ModelAndView对象给适配器,处理器适配器再把这个对象返回给前端控制器
4.视图解析器(View resolver):前端控制器会把逻辑视图发送给视图解析器请求解析,视图解析器处理后返图物理视图(view)给前端控制器
5.前端控制器把视图响应返回给用户.
三.前端控制器
由SpringMVC的工作流程可以看出,前端控制器起到一个核心的作用,所有的请求响应都要经过前端控制器,那么前端控制器的配置是如何的?在web-xml中配置前端控制器
<!-- 配置前端控制器 :统一接收请求,然后分配-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--加载springmvc核心配置文件 -->
<!-- 如果不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-servlet.xml -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-mvc.xml</param-value>
</init-param>
<!-- 启动就加载 -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 第一种 *.action 访问以.action结尾的DispatcherServlet进行解析-->限制性太强,范围太小
第二种/,不会拦截jsp,但是会拦截除了jsp之外所有静态资源,
第三种/*,拦截所有静态资源包括jsp,会出现访问jsp视图时被Spring的DispatcherServlet拦截,导致找不到请求资源引入的404错误
-->
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
以上配置中servlet-mapping中url的路径配置仅仅不会拦截jsp,其他的静态资源文件还是会被拦截,如何解决?
在applicationContext-mvc.xml中配置
<!-- 开启注解扫描 -->
<context:component-scan base-package="cn.itsource"></context:component-scan>
<!-- 放行静态资源html等 -->
<mvc:default-servlet-handler/>
<!-- 使注解生效 -->
<mvc:annotation-driven></mvc:annotation-driven>