2、DispatcherServlet in Spring MVC
发布日期:2021-06-29 12:51:52 浏览次数:3 分类:技术文章

本文共 3478 字,大约阅读时间需要 11 分钟。

1、DispatcherServlet说明

Spring的web MVC框架,就像许多其他webMVC框架,request-driven,围绕一个中心分派请求的Servlet控制器设计,并提供其他功能,促进了web应用程序的开发。然而,Spring MVC中的的DispatcherServlet不仅仅是只包含那些.它完全集成Spring IoC容器,因此允许你使用Spring所包含的特性。

2、Spring MVC处理流程

Spring Web MVC DispatcherServlet的请求处理流程见下图。懂模式的读者会认识到DispatcherServlet是一个“前端控制器”的表达等式的设计模式(这个模式是Spring Web MVC和其他许多领先的Web框架共有的)。

Spring MVC处理流程图

3、声明式DispatcherServlet

DispatcherServlet实际是一个Servlet(从继承基类HttpServlet),并可以声明在web.xml的web application。你需要映射你想DispatcherServlet处理request,通过同一个的web.xml文件的URL映射。这是标准Java EE Servlet配置;下面的例子显示了一个DispatcherServlet声明和映射:

example
org.springframework.web.servlet.DispatcherServlet
1
example
/example/*

4、编程式DispatcherServlet

在前面的示例中,所有请求以/example开始命名的例子将由DispatcherServlet实例控制。在Servlet 3.0 +环境中,你也可以选择通过编程方式配置Servlet容器。下面通过编程式实现与上面web.xml效果一样的例子:

public class MyWebApplicationInitializer implements WebApplicationInitializer {
@Override public void onStartup(ServletContext container) { ServletRegistration.Dynamic registration = container.addServlet("dispatcher", new DispatcherServlet()); registration.setLoadOnStartup(1); registration.addMapping("/example/*"); }}

WebApplicationInitializer是Spring MVC提供的是一个接口,用来确保您的基于代码配置能够被自动检测并用来自动初始化Servlet 3容器。实现WebApplicationInitializer的抽象类AbstractDispatcherServletInitializer使得更容易注册DispatcherServlet,只需指定它的servlet映射。更多细节请参见基于代码的Servlet容器初始化。

以上仅仅是第一步设置Spring Web MVC。你现在需要配置Spring Web MVC框架所使用的各种bean(超过DispatcherServlet本身)。

在Web MVC框架,每个DispatcherServlet有自己的WebApplicationContext,并且继承定义已经配置在root WebApplicationContext的所有bean。这些继承的beans可以servlet-specific范围中被覆盖,你可以在给定Servlet实例定义新的scope-specific beans。下图就是典型的Spring Web MVC中的上下文层次结构:
这里写图片描述

在初始化DispatcherServlet,Spring MVC会在web应用程序的WEB - INF目录查找一个名为[servlet-name]-servlet.xml的文件。并创建定义的bean,覆盖定义在全局作用域具有相同名称的beans。

考虑以下DispatcherServlet Servlet配置(在web.xml文件):

golfing
org.springframework.web.servlet.DispatcherServlet
1
golfing
/golfing/*

与上面的Servlet配置对比,你会需要一个文件名为/WEB-INF/ golfing-servlet.xml应用程序中,该文件将包含所有Spring Web MVC特殊组件(bean)。你可以改变这个配置文件的确切位置通过Servlet初始化参数(详情见下文)。如果你的命名方式不是按照[servlet-name]-servlet.xml来的,你同样可以使用contextConfigLocation来指定你的配置文件。

dispatcher
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
/WEB-INF/dispatcher-servlet.xml
1
dispatcher
/

5、配置其它Spring Beans

一个web application中还包含MVC三层对应的bean可以通过配置contextConfigLocation来引用Root WebApplicationContext.其中结构如下图所示:

这里写图片描述

这可以通过设置一个空的contextConfigLocation来配置servlet init参数,如下所示:

dispatcher
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
/WEB-INF/o2o-servlet.xml
1
dispatcher
/

WebApplicationContextApplicationContext的扩展,其中有一些web应用程序所必需的额外功能。与一个普通的ApplicationContext的不同之处在于,它能够解析themes(主题),并且它知道与哪个Servlet关联起来(通过与ServletContext关联)。 WebApplicationContextServletContext绑定,如果你需要访问WebApplicationContext可以通过使用RequestContextUtils类中的静态方法你可以查找它。

因为水平有限,翻译不足之处还望见谅。

原文地址:

转载地址:https://carlzone.blog.csdn.net/article/details/51834350 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:如何下载Spring
下一篇:程序员编程的 7 + 1 条小贴士

发表评论

最新留言

很好
[***.229.124.182]2024年04月13日 10时29分07秒