Spring 4.x官方参考文档中文版——第21章 Web MVC框架(2)

21.2The DispatcherServlet

       Springweb MVC框架与其他web MVC框架相似,是以请求导向的,围绕着一个核心Servlet,可以把请求分派到各控制器,同时提供使开发web应用更便利的额外功能。然而,SpringDispatcherServlet不止如此。SpringDispatcherServlet可以与SpringIoC(控制反转)容器完全地结合,这样,你就能使用Spring的所有特性。

       Spring WebMVC的请求处理流程——DispatcherServlet如下图所示。Pattern-savvy reader(模式识别读取器)能够识别出DispatcherServlet是一个"Front Controller"(前端控制器)设计模式的具体表达。(这种模式在Spring Web MVC中与其他领先的web框架一致)。

 

DispatcherServlet是一个真正的Servlet(继承自HttpServlet的基础类),也同样在你应用中的web.xml里这样声明了。你需要在web.xml中使用URL映射,去映射你想要让DispatcherServlet处理的请求。这是Java EE 中最基础的Servlet配置。下面的例子展示了上述的内容:


 

       在前面的例子中,所有以/example开头的请求映射路径会被名为exampleDispatcherServlet实例处理,在Servlet 3.0以上的环境下,你也可以以编程的方式去配置Servlet容器。下面是基于代码的实现(与web.xml中的实现目的一致):


 

       WebApplicationInitializerSpring MVC提供的一个接口,用来保证在任何Servlet 3的容器中你所编写的基于代码的配置文件能够被检测到并能自动初始化。此接口基础的抽象实现类——AbstractDispatcherServletInitializer,能够通过指定的servlet映射轻松的注册DispatcherServlet。如果需要了解更多细节,请参阅“21.15基于代码的Servlet容器初始化”。

       以上只是搭建Spring Web MVC的第一步。现在你需要配置需要在Spring Web MVC框架中使用的各种bean

       就如在“6.15ApplicationContext的附加功能”一节中提到的,在Spring中的ApplicationContext的实例的生效范围能被限定。在Web MVC 框架中,每一个DispatcherServlet有它自己的WebApplicationContext,这些WebApplicationContext继承了所有已经在其上的根WebApplicationContext中已定义的所有bean。这些继承来的bean能被特定的Servlet范围内被覆写。同时,你能在给定的一个Servlet实例中定义一个特定范围的bean


 

       以上是DispatcherServlet的初始化,Spring MVC会在你应用中的WEB-INF中寻找名称类似"servlet-servlet.xml"这样的文件,并且根据里面的定义创建相应的bean。在global scope(全局范围)内定义的任何bean可以被其创建的同名bean覆写。

       请看以下DispatcherServlet配置文件(在web.xml中):


       根据上面的Servlet配置,你的应用中需要有/WEB-INF/golfing-servlet.xml这路径下的对应文件。这个文件会包含在特定Spring Web MVC组件(bean)中。你能在Servlet配置文件中的参数去初始化这个配置文档的路径。(详见下方)

       也可能你在有些情况下,在单个dispatcherServlet中只有一个根context


如下所示,可以把servletcontextConfigLocation init parameter设置为空:


 

       WebApplicationContextApplicationContext的扩展,对于web应用,其拥有一些额外且必要的特性。它能够解析主题(参考“21.9使用主题”),并且它能够知道它与哪个Servlet一起协作(通过在ServletContext中使用链接这种方式)。在ServletContext中的WebApplicationContext是被绑定的。当你想要使用它时,你能通过使用RequestContextUtils这个类中的静态方法,在WebApplicationContext中把它找出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值