使用spring web.xml里的配置 - 请求处理器DispatcherServlet
2014-08-04 15:01
555 查看
1.spring DispatcherServlet简述
使用spring时,当浏览器有请求时。所有请求spring都会让DispatcherServlet拦截然后根据配置转发给对用的处理器(controller)去处理。【DispatcherServlet实际上就是一个servlet。】所有如果使用spring我们首先需要在web.xml里配置servlet DispatcherServlet 。DispatcherServlet处理的请求必须在同一个
web.xml文件里使用url-mapping定义映射。
[html] view
plaincopy
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:source/servlet/test-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/*.do</url-pattern>
</servlet-mapping>
这样所有以.do结尾的请求都会被servlet test处理。
在
DispatcherServlet的初始化过程中,Spring会在web应用的
WEB-INF文件夹下寻找名为
[servlet-name]-servlet.xml的配置文件,生成文件中定义的bean。这些bean会覆盖在全局范围(global
cope)中定义的同名的bean。
如果servletName-servlet.xml不在默认路径下必须显示指定。【<param-value>classpath:source/servlet/test-servlet.xml</param-value>】
2.spring DispatcherServlet详述
原文:http://doc.javanb.com/spring-framework-reference-zh-2-0-5/ch13s02.html
13.2. DispatcherServlet - Spring Framework reference 2.0.5 参考手册中文版
13.2. DispatcherServlet
和其它web框架一样,Spring的web框架是一个请求驱动的web框架,其设计围绕一个中心的servlet进行,它能将请求分发给控制器,并提供其它功能帮助web应用开发。然而,Spring的
DispatcherServlet所做的不仅仅是这些,它和Spring的IoC容器完全集成在一起,从而允许你使用Spring的其它功能。
下图展示了
DispatcherServlet对请求的处理流程。熟悉设计模式的读者可能会发现
DispatcherServlet应用了“Front Controller”这个模式(很多其他的主流web框架也都用到了这个模式)。
Spring Web MVC处理请求的工作流程
DispatcherServlet实际上是一个
Servlet(它从
HttpServlet继承而来)。和其它Servlet一样,
DispatcherServlet定义在web应用的
web.xml文件里。DispatcherServlet处理的请求必须在同一个
web.xml文件里使用url-mapping定义映射。下面的例子演示了如何配置
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>*.form</url-pattern> </servlet-mapping> </web-app>
在上面的例子里,所有以
.form结尾的请求都会由名为
example的
DispatcherServlet处理。这只是配置Spring Web MVC的第一步。接下来需要配置
DispatcherServlet本身和Spring
Web MVC 框架用到的其他的bean。
正如在第 3.8 节
“
ApplicationContext”中所描述的,Spring中的
ApplicationContext可以被限制在不同的作用域(scope)中。在web MVC框架中,每个
DispatcherServlet有它自己的
WebApplicationContext,这个context继承了根
WebApplicationContext的所有bean定义。这些继承的bean也可以在每个serlvet自己的所属的域中被覆盖(override),覆盖后的bean可以被设置成只有这个servlet实例自己才可以使用的属性。
Spring Web MVC中的Context体系
在
DispatcherServlet的初始化过程中,Spring会在web应用的
WEB-INF文件夹下寻找名为
[servlet-name]-servlet.xml的配置文件,生成文件中定义的bean。这些bean会覆盖在全局范围(global
cope)中定义的同名的bean。
下面这个例子展示了在
web.xml中
DispatcherServlet的配置:
<web-app> ... <servlet> <servlet-name><span class="bold"><strong>golfing</strong></span></servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name><span class="bold"><strong>golfing</strong></span></servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>
要进行如上的servlet配置,你还需要配置
/WEB-INF/golfing-servlet.xml这样一个文件。golfing-servlet.xml这个文件应该声明你在Spring Web MVC
框架中需要的bean。 这个文件的路径也可以通过web.xml中servlet的初始化参数来更改。(详情见下面的例子。)
WebApplicationContext仅仅是一个拥有web应用必要功能的普通
ApplicationContext。它与一个标准的
ApplicationContext的不同之处在于,它能够解析theme(参考第 13.7 节
“使用主题”),并且它知道自己与哪个servlet相关联(通过
ServletContext)。
WebApplicationContext被绑定在
ServletContext上,当你需要的时候,可以使用
RequestContextUtils提供的静态方法找到
WebApplicationContext。
Spring的
DispatcherServlet有一组特殊的bean,用来处理请求和渲染相应的视图。这些bean包含在Spring的框架里,可以在
WebApplicationContext中配置,配置方式与配置其它bean相同。这些bean中的每一个都在下文作详细描述。此刻读者只需知道它们的存在,便继续对DispatcherServlet进行讨论。对大多数bean,Spring都提供了合理的缺省值,所以在开始阶段,你不必担心如何对其进行配置。
表 13.1.
WebApplicationContext中特殊的bean
名称 | 描述 |
---|---|
控制器(Controller) | 控制器 实现的是MVC中C那个组成部分。 |
处理器映射(Handler mapping) | 处理器映射包含预处理器(pre-processor),后处理器(post-processor)和控制器的列表,它们在符合某种条件时才被执行(例如符合控制器指定的URL)。 |
视图解析器(View resolvers) | 视图解析器 可以将视图名解析为对应的视图。 |
本地化解析器(Locale resolver) | 本地化解析器能够解析用户正在使用的本地化设置,以提供国际化视图。 |
主题解析器(Theme resolver) | 主题解析器能够解析你的web应用所使用的主题,以提供个性化的布局。 |
上传文件解析器(multipart file resolver) | 上传文件解析器提供HTML表单文件上传功能。 |
处理器异常解析器(Handler exception resolver(s)) | 处理器异常解析器可以将异常对应到视图,或者实现更加复杂的异常处理代码。 |
DispatcherServlet配置好以后,
DispatcherServlet接收到与其对应的请求之时,处理就开始了。下面的列表描述了
DispatcherServlet处理请求的全过程:
找到
WebApplicationContext并将其绑定到请求的一个属性上,以便控制器和处理链上的其它处理器能使用
WebApplicationContext。默认的属性名为DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE。
将本地化解析器(localResolver)绑定到请求上,这样使得处理链上的处理器在处理请求(准备数据、显示视图等等)时能进行本地化处理。若不使用本地化解析器,也不会有任何副作用,因此如果不需要本地化解析,忽略它就可以了。
将主题解析器绑定到请求上,这样视图可以决定使用哪个主题。如果你不需要主题,可以忽略它。
如果上传文件解析器被指定,Spring会检查每个接收到的请求是否存在上传文件,如果是,这个请求将被封装成
MultipartHttpServletRequest以便被处理链中的其它处理器使用。(关于文件上传的更多内容请参考第 13.8.2 节
“使用
MultipartResolver”。)
找到合适的处理器,执行和这个处理器相关的执行链(预处理器,后处理器,控制器),以便为视图准备模型数据。
如果模型数据被返回,就使用配置在
WebApplicationContext中的视图解析器显示视图,否则视图不会被显示。有多种原因可以导致返回的数据模型为空,比如预处理器或后处理器可能截取了请求,这可能是出于安全原因,也可能是请求已经被处理过,没有必要再处理一次。
在请求处理过程中抛出的异常,可以被任何定义在
WebApplicationContext中的异常解析器所获取。使用这些异常解析器,你可以在异常抛出时根据需要定义特定行为。
Spring的
DispatcherServlet也支持返回Servlet API定义的last-modification-date。决定某个请求最后修改的日期很简单:
DispatcherServlet会首先寻找一个合适的handler
mapping,检查从中取得指定的处理器是否实现了
LastModified接口,如果是,将调用
long getLastModified(request)方法,并将结果返回给客户端。
你可以通过两种方式定制Spring的
DispatcherServlet:在
web.xml文件中增加添加context参数,或servlet初始化参数。下面是目前支持的参数。
表 13.2.
DispatcherServlet初始化参数
参数 | 描述 |
---|---|
contextClass | 实现WebApplicationContext接口的类,当前的servlet用它来创建上下文。如果这个参数没有指定,默认使用 XmlWebApplicationContext。 |
contextConfigLocation | 传给上下文实例(由contextClass指定)的字符串,用来指定上下文的位置。这个字符串可以被分成多个字符串(使用逗号作为分隔符)来支持多个上下文(在多上下文的情况下,如果同一个bean被定义两次,后面一个优先)。 |
namespace | WebApplicationContext命名空间。默认值是 [server-name]-servlet。 |
相关文章推荐
- 使用spring web.xml里的配置 - 请求处理器DispatcherServlet
- 使用spring web.xml里的配置 - 请求处理器DispatcherServlet
- 备忘:在web.xml中使用org.springframework.js.resource.ResourceServlet的配置对静态资源的访问
- 使用web.xml配置Web应用之初始化和预加载servlet和JSP页面
- web.xml使用spring配置字符编码过滤器
- springmvc web.xml spring-servlet.xml 配置
- 关于使用spring需要在web.xml配置的内容的解析
- [Web]Servlet中使用Quartz【二】基于配置文件和jobs.xml触发任务执行
- webapp的/ WEB - INF /Spring- servlet.xml中配置
- web.xml文件中配置(servlet, spring, filter, listenr)的加载顺序(一)
- JavaEE 下面使用Spring 时 web.xml 中ContextLoaderListener的作用及配置,多个配置文件时contextConfigLocation的作用
- JAVA_WEB项目之使用Spring的xml配置方式在项目中管理Lucene检索框架
- web.xml文件中配置(servlet, spring, filter, listenr)的加载顺序
- 使用UI-Tag的注意点: 请确定/WEB-INF/web.xml文件中的ServletDispatcher 设定为自动加载
- 内置对象config的使用,使用web.xml配置一个servlet对象,并为它取一个名字。
- tomcat7.0使用servlet处理jsp表单(form)的web.xml配置
- 项目中使用Spring时配置web.xml的listener侦听接口不能初始化的问题
- web.xml 文件中一般包括 servlet, spring, filter, listenr的配置。那么他们是按照一个什么顺序加载呢?
- Web项目中使用XML配置加载Spring及Spring MVC的组件
- 使用 spring web 3.0 配置web.xml