深入解读Spring Framework Web MVC(第二弹:DispatcherServlet详解)
来源:互联网 发布:未来视线眼镜软件 编辑:程序博客网 时间:2024/05/01 00:30
DispatcherServlet简介
Spring web MVC框架基于请求驱动,用一个核心Servlet转发请求到对应的Controller。然而Spring的DispatcherServlet并不仅仅拥有这些,因为Spring MVC框架集成了Spring IOC容器,因此,Spring MVC可以使用Spring 提供的其他功能。
DispatcherServlet的声明
DispatcherServlet继承了HttpServlet,是一个真实的Servlet,因此可以在web.xml文件中声明。另外还需要使用url匹配元件指定DispatcherServlet处理的请求。例如:
<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> <servlet-mapping> <servlet-name>example</servlet-name> <url-pattern>/example/*</url-pattern> </servlet-mapping></web-app>
这个配置是指,所有以 /example 开始的请求都会被名为example的 DispatcherServlet所处理。不过我们也可以以编程方式配置上述DispatcherServlet,如:
public class MyWebApplicationInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext container) { ServletRegistration.Dynamic registration = container.addServlet("example", new DispatcherServlet()); registration.setLoadOnStartup(1); registration.addMapping("/example/*"); }}
不过这种方法很少用。
在Spring web MVC框架,每一个DispatcherServlet都拥有自己的WebApplicationContext,这个 、WebApplicationContext继承了根WebApplicationContext定义的所有bean。
DispatcherServlet在初始化时,Spring MVC会查找web应用WEB-INF目录下的[servlet-name]-servlet.xml并创建在此文件定义的bean。
比如上述的DispatcherServlet在web.xml里的配置如下:
<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> <servlet-mapping> <servlet-name>example</servlet-name> <url-pattern>/example/*</url-pattern> </servlet-mapping></web-app>
这就要求应用程序在WEB-INF目录下有一个example-servlet.xml文件,在这个文件里,会包含Spring MVC的所有组件(beans)。
如果我们不想要这个默认的example-servlet.xml文件,我们可以通过定义servlet初始化参数来改变[servlet-name]-servlet.xml文件的路径,如下:
<web-app> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <servlet> <servlet-name>example</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>example</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener></web-app>
WebApplicationContext的专用bean
DispatcherServlet使用了其专用的bean来处理请求和渲染视图。不过这些bean并不需要我们去配置,默认已经配置好了,我们先简单看一下有哪些:
DispatcherServlet处理顺序
DispatcherServlet处理一个传进来的请求时,会按照以下顺序来处理这个请求:
- 寻找WebApplicationContext,并将WebApplicationContext作为一个属性绑定到请求里。默认会以DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE
键绑定到请求里。
- 将本地化解析器绑定到请求里,以便在处理这个请求时,可以解析到客户端的地区。如果不需要本地化解析器,可以忽略这个步骤。
- 将主题解析其绑定到请求里,让elements,如视图,决定去使用哪一种主题。如果不需要使用主题,可以忽略这个步骤。
- 如果指定一个multipart file解析器,会检查这个请求是否包含multiparts请求。当发现了multiparts,这个请求会被封装为MultipartHttpServletRequest对象,提供给后续elements处理。
- 寻找合适的handler。如果找到这个handler,执行与这个 handler 关联的执行链,目的是准备一个model或渲染。
- 如果返回一个model,渲染相对应的视图。如果没有model返回(可能是因为preprocessorpostprocessor拦截了这个请求,也可能是权限问题),便不渲染任何视图,因为这个请求可能已执行完成。
DispatcherServlet初始化参数
在web.xml里,DispatcherServlet支持的初始化参数如下:
- 深入解读Spring Framework Web MVC(第二弹:DispatcherServlet详解)
- 深入解读Spring Framework Web MVC(第一弹:Spring Web MVC概述)
- 深入解读Spring Framework Web MVC(第三弹:使用@Controller定义控制器)
- 深入解读Spring Framework Web MVC(第四弹:使用@RequestMapping映射请求)
- 深入解读Spring Framework Web MVC(第五弹:@RequestMapping中的头字段值)
- 深入解读Spring Framework Web MVC(第六弹:定义@RequestMapping处理方法)
- 深入解读Spring Framework Web MVC(第七弹:@ModelAttribute的使用)
- 深入解读Spring Framework Web MVC(第八弹:@SessionAttributes的使用)
- Spring MVC:DispatcherServlet详解
- Spring MVC DispatcherServlet详解
- Spring MVC DispatcherServlet详解
- 深入解读Spring Framework事务管理(第二弹:编程式事务管理的使用方式)
- 深入解读Spring Framework IoC容器(第二弹:依赖注入的方式)
- spring mvc DispatcherServlet详解之一---处理请求深入解析
- Spring MVC详解(三)DispatcherServlet作用
- Spring MVC详解(三)DispatcherServlet作用
- Spring MVC DispatcherServlet 源码解读View的创建(Velocity)
- 深入解读Spring Framework IoC容器(第三弹:依赖注入配置详解)
- 优酷来疯直播安卓控件,支持flv,支持rtmp
- Web Storage
- Web请求过程总结
- RGBDSLAM 问题解决:create’ is not a member of ‘cv::FeatureDetector {aka cv::Feature2D}’ detecto
- securecrt 连接本地虚拟机
- 深入解读Spring Framework Web MVC(第二弹:DispatcherServlet详解)
- PAT甲级练习1023. Have Fun with Numbers (20)
- 上传自己的库到github并作为依赖
- OGRE中的人脸动画
- 《Qt》part 6 QSS Qt样式表——界面美化1
- 如何将react/react native中的ES5写法转化成ES6?
- Ubuntu 更新源
- MySQL 无法启动的几种原因总结
- 如何实现浮动元素水平居中