你的位置:首页 > Java教程

[Java教程]翻译:Spring


写在前面的话:
 最近被项目的代码折腾的死去活来的,其实框架也没有那么难理解,只是自己的Web基础太差,被Request和Response这一对神雕侠侣坑到泪流满面!今天捣腾了一下SpringWebMVC,本来想用JSTL的自定义标签开发或者Strust2的框架,但发现框架堆的太多太乱不利于开发效率,所以决定还是先采用SpringWebMVC的设计模式来试一试。然后,在网上搜了很多资料之后,我发现,大家基本上都是转发+贴代码,可以学习的东西实在是少之又少,在调试了一天别人的代码之后,我决定直接去看Spring-Framework的官方文档:spring-framework-reference。由于这份文档目前还没有找到中文版的,所以我把一些重要的内容按章节翻译下来,一方面留给自己当作参考资料,另一方面也是希望能帮助到想要学习Springframework的人。

PS:英语水平不是很高,部分内容翻译不流畅,希望见谅,如有错误,麻烦留言指正,不胜感激。

15.2:DispatcherServlet

和许多其他Web MVC框架一样,Spring Web MVC是由request驱动,以servlet为中心设计的,而这个中心servlet能够将request分发到不同的控制器(controllers),然后提供其他的能够用来开发Webapplication的功能模块。然而,Spring的DispatcherServlet能够做的更多,它能够完全和Spring IoC容器结合,并且能够允许开发人员使用Spring容器中所有的要素;

  Request处理Spring WebMVC工作流的时候,DispatcherServlet所发挥的作用在下面的图中一览无余:

                                                                                     

一些精通模式的读者会马上意识到,DispatcherServlet就是“前端控制器”(这是一种Spring Web MVC与其他先进的Web框架所共有的模式)设计模式的一种表达。

DispatcherServlet本质上就是一个Servlet(继承了HttpServlet基类),在你的Web应用中使用它的时候,要在Web.

                                                                     

   在一些处理例子中,所有的以.form结束的requests将会被交给上述所声明DispatcherServlet处理。这仅仅是搭建Spring Web MVC的第一步。你现在需要配置那些在Spring Web MVC框架中所使用到的各种beans(也包括DispatcherServlet自己)。

   在3.13部分,详细讲述了关于添加可用的ApplicationContext的内容,在Web MVC 框架中,每一个DispatcherServlet都有自己的WebApplication-Context,从已经被定义的根应用上下文中继承所有的beans,这些被继承的beans能够在特定的Servlet范围内被覆盖,开发者也可以给一个给定的Servlet实例定义新的特定范围的beans。

   在初始化DispatcherServlet的基础上,Spring Web MVC框架开始在你的Web应用WEB-INF的路径下寻找一个叫做[servlet-name]-servlet.

   思考下面的DispatcherServlet声明配置:

                                                                     

   在拥有上述的Servlet配置文件之后,你需要在你的应用里创建一个/WEB-INF/golfing-servlet.

   

   这个WebApplicationContext是从一个拥有一些Web application的额外必备要素的基本应用上下文ApplicationContext拓展来的。这个Web应用上下文和普通的ApplicationContext在解决方案的可用性上有些不同。并且能够知道这个Web 应用上下文归属于哪一个Servle。这些WebApplicationContext封装在ServletContext中的,通过使用RequestContextUtils类中的静态方法,你就能够在你需要使用它的时候立马找到这个WebApplicationContext。

   Spring中的DispatcherServlet用特殊的beans处理request,并且用合适的视图表现。这些beans是Spring框架中的一部分。你能够在WebApplicationContext中配置它们,就如同你配置其他的bean一样。然而,对于大多数beans来说,敏感的默认行为能够为你提供,因此并不需要你去配置它们。

   关于这些beans的描述如下表:

    

(简单介绍一下:

   Handler mappings:操作执行一系列的预处理、后续处理,当得到匹配的参数之后,就执行控制器;

   View resolvers:将视图名称解析给视图;

   Locale resolver:是一种为了提供国际化视图而对客户端使用的环境场所解析;

   Theme resolver:能够解析你的Web 应用使用的主题,举个例子:提供个性化的布局;

   Multipart file resolver:包括了能够处理HTML表单上的下载文档;

   Handler exception resolvers:映射视图的异常或者实现其他更多更复杂的异常处理代码;

 

在你建立DispatcherServlet之后,一个请求进入了一个特定的DispatcherServlet,这个DispatcherServlet开始如下面的的过程一样处理这个请求:

1、WebApplicationContext搜索并且将这个request封装成一个属性,这样控制器和这个过程中的其他元素就能够使用了。这样的封装默认是由Key—DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE执行的。

2、Locale resolve通过封装请求是为了让解析场所所使用的元素变为可用。这是过程中的可选项。

3、(很简单自己看,翻累了)The theme resolver is bound to the request tolet elements such as views determine which theme to use. If you donot use themes, you can ignore it.

4、寻找一个合适的Handler,如果这个Handler被找到了,和这个Handler所关联的处理链开始执行,并准备返回一个model或者View。

5、如果返回的是Model,视图就表现出来。如果返回的不是model(也许是因为预处理器或者后续处理拦截了这个请求,也许是因为安全原因),没有视图表现出来,因为request已经被完成了。