- 浏览: 12904 次
- 性别:
- 来自: 上海
文章分类
最新评论
Spring的Web MVC框架是围绕DispatcherServlet这个类设计的,DispatcherServlet是FrameworkServlet的子类,不仅完全与Spring的IoC容器紧密集成,而且允许开发人员充分利用Spring的每一种功能特性。
在一个理想的MVC环境中,通信是单向的。但在实际应用中,当在一个 Web 应用程序中实现 MVC 时,Model、View 和 Controller 通常不会在单一的类中出现,而是被实现为紧密相关的对象群体。每一组对象执行一个特定的MVC 任务。Controller 可能由若干个类组成,它们被组合到一起,用于分析 HTTP或者WAP的 请求/响应并确定应用程序所需的动作。Model 几乎可以确定由多个类组成。而 View 在 Web 应用程序中通常是某种模板系统(例如JSP),而且也很可能由几个对象组成。在这种情况下,把应用程序流程控制集中在一个entry point是非常有意义是设计选择。集中化可以帮助客户了解一个复杂系统是如何运行的,而且它还提供了一个单独的入口,在那里可以插入全局代码,例如在Spring框架中通过插入某些advice,以AOP的方式实现日志管理、安全认证等具有共性的功能。
DispatcherServlet本质上便是采用了前端控制器(Front Controller,有关内容可参考http://www.microsoft.com/china/MSDN/library/architecture/patterns/esp/DesFrontController.mspx?mfr=true)这一设计模式对客户请求的处理进行了封装,对客户端而言,只需面对单一的处理入口,其处理流程如下图所示:
DispatcherServlet作为Front Controllers需要将控制委托给Controller,而Controller 模式才是 MVC Controller 的真正核心所在。Controller 的首要职责就是决定应用程序应该如何响应请求。
DispatcherServlet继承了HttpServlet类,并需要在web.xml文件中声明。经由DispatcherServlet处理的客户端请求也必须在同一个web.xml中定义URL映射,这是标准的Java EE Servlet配置方式,DispatcherServlet的声明与映射定义示例如下:
<web-app>
<servlet>
<servlet-name>exampleServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/exampleServlet-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>exampleServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
在上述配置中,名为exampleServlet的DispatcherServlet将处理所以以.do结尾的HTTP请求,而对Controller和View模板的指派,将在exampleServlet-servlet.xml文件中进行配置。这其中体现了Spring一直倡导的IoC思想。
在Spring中,每个DispatcherServlet都有自己的WebApplicationContext,并继承了所有在根部WebApplicationContext中所定义的bean,DispatcherServlet可以覆盖这些继承下来的bean,也可以定义特定servlet实例自己专用的bean,下图很好地说明了Spring Web MVC框架中的context层次结构:
以上面的DispatcherServlet配置文件为例,当exampleServlet被初始化之后,Spring将在指定的WEB-INF目录寻找exampleServlet-servlet.xml文件,并创建由exampleServlet-servlet.xml定义的所有与MVC相关的bean。这个配置文件的存放路径当然是可以根据实际需要修改的。
WebApplicationContext在ApplicationContext的基础上增加了对themes解析的支持,同时通过与ServletContext的链接可以获知具体与哪个servlet相关联。在设计DispatcherServlet时,需亚明确地将WebApplicationContext与ServletContext绑定在一起,通过RequestContextUtils类的静态方法,可以在需要时查询WebApplicationContext。
为了处理客户端请求以及确定适当的表现视图,DispatcherServlet需要通过一些特殊的bean来完成。这些bean包含在Spring框架中,并与其他bean一样在WebApplicationContext中进行配置, 就多数bean而言,Spring已经提供了足够有效的配置信息通常不必再担心如何去配置它们。这些特殊的bean包括:
1.Controller,无疑这是最重要的一个bean,因为它就是MVC中的“C”。
2.Handler mappings,例如在处理由form提交的HTTP请求时常用的SimpleUrlHandlerMapping。这些bean需要在controller与URL模板之间实现映射,为特定的URL指派特定的controller进行后续处理,典型的SimpleUrlHandlerMapping映射配置如下:
<bean id="exampleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/1.do">exampleController1</prop>
<prop key="/2.do">exampleController2</prop>
<prop key="/3.do">exampleController3</prop>
</props>
</property>
</bean>
所有的Spring MVC的Handler mapping都实现了org.springframework.web.servlet.HandlerMapping接口:
BeanNameUrlHandlerMapping---通过控制器的类名映射到URL.
SimpleUrlHandlerMapping---通过配置文件定义的属性将控制器映射到URL
CommonsPathMapHandlerMapping---通过控制器源代码中放置的metadata将控制器映射到URL,示例如下:
<bean id="urlMapping" class="org.springframework.web.servlet.handler.metadata.CommonsPathMapHandlerMapping"/>
/**
*@@org.springframework.web.servlet.handler.commonsattributes.PathMap("/1.do")
*/
public class exampleController1 extends AbstractCommandController
{
//…
}
3.View resolvers,Spring提供了许多View接口的实现,真正做到了与视图层的具体实现无关,视图解析器将视图的名字与实际的视图对应起来。在使用时,需要在配置文件中进行定义,例如:
<bean id="exampleViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass">
<value>org.springframework.web.servlet.view.InternalResourceView</value>
</property>
<property name="prefix">
<value>/WEB-INF/jsp/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
4.Locale resolver,这些解析器为需要国际化的视图提供支持
5.Theme resolver,用于解析应用程序可能使用到的主题,以便提供个性化的布局、界面。
6.Multipart file resolver,这个bean专用于处理由HTML页面上传文件请求。
7.Handler exception resolver,顾名思义,这些bean用于将异常信息与视图映射起来,或者实现其他更复杂的异常处理代码。
当一个DispatcherServlet配置完毕,处于工作状态时,它对一个客户端请求的处理过程需要经过如下流程,这在程序设计时需要认真考虑:
1. 搜索到WebApplicationContext,并将其绑定为客户请求的一个属性,以便controller或其他对象可以在处理过程中使用。缺省地,这将由DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE属性绑定。.
2. 将Locale resolver与此客户请求绑定,以便其他对象在处理请求时能够解析相应的国际化特性。当然,即便不使用Locale resolver也关系不大,毕竟很多时候是不需要国际化的。
3. 将Theme resolver与此客户请求绑定,以便视图类确定就是哪个主题。Theme resolver也是一个可选的解析器,若不需要,完全可以不用。
4. 若指定了一个Multipart resolver,则此客户请求将被封装在MultipartHttpServletRequest类。
5. 搜索一个合适的handler。若找到,则执行相应的代码序列(预处理,后处理,和控制器),从而准备获取一个可能发往视图的model。.
6. 若返回了一个model,则需要调用一个视图。若没有model返回(比如处于安全考虑),则不需调用视图,而此时,客户请求也已得到响应。
最后需要说明的是,开发人员可以在web.xml定义若干DispatcherServlet的初始化参数,例如contextConfigLocation。contextConfigLocation用于指定Spring配置文件的位置,在上面的例子我们已经看到这样的定义:
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/exampleServlet-servlet.xml</param-value>
</init-param>
如果有多个配置文件,则可以用逗号分隔开来,例如:
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/example1Servlet-servlet.xml,/WEB-INF/example2Servlet-servlet.xml</param-value>
</init-param>
“servlet名”+“-servlet.xml”是SPring默认的配置文件命名方式,并存放在WEB-INF目录。如果在初始化时不指定contextConfigLocation,那么Spring默认为WEB-INF的dispatcherServlet-servlet.xml。
发表评论
-
Java GC
2011-03-10 17:38 1170JVM学习笔记之JVM内存管 ... -
java字符串操作
2011-02-26 13:20 648String、StringBuffer和StringBul ... -
java 垃圾回收器的理解
2011-02-24 23:12 639Java语言具备GC(垃圾 ... -
Java 垃圾回收器的概念
2011-02-24 23:07 767内存管理和垃圾回收 ... -
Java Tree
2011-01-19 15:57 1042最近一段时间,公司项 ... -
java io的性能调整
2010-09-12 22:27 722本文大多技术围绕调整磁盘文件 I/O,但是有些内容也同样适合网 ... -
java io的总结之二
2010-09-12 22:16 501java中的io中的(input/output)stream无 ... -
java io的总结之一
2010-09-12 22:11 575知识点一: 四大等级结构 java语言的i/o库提供了 ...
相关推荐
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。Spring MVC4是当前zuixin的版本,在众多特性上有了进一步的提升。, 在精通Spring...
首先, 我需要在你心里建立起 Spring MVC 的基本概念. 基于 Spring 的 Web 应用程序接收到 http://localhost:8080/hello.do(事实上请求路径是 /hello.do) 的请求后, Spring 将这个请求交给一个名为 helloController ...
《Spring MVC+MyBatis开发从入门到项目实战》分为4篇。第1篇是Java开发环境的搭建,包括JDK的下载与安装、环境变量的配置、MyEclipse的下载与基本配置。第2篇是MyBatis技术入门,包括剖析JDBC的弊端、MyBatis的背景...
精通Spring MVC 4 中文
Spring MVC是Spring框架中用于Web应用快速开发的一个模块,其中的MVC是Model-View-Controller的缩写。作为当今业界最主流的Web开发框架,Spring MVC已经成为当前最热门的开发技能,同时也广泛用于桌面开发领域。 ...
本文详细介绍spring MVC的原理和开发心得体会。
Spring MVC 是Spring框架最重要的的模块之一。它以强大的Spring IoC容器为基础,并充分利用容器的特性来简化它的配置。 commons-logging-1.2.jar jackson-annotations-2.6.6.jar jackson-core-2.6.6.jar jackson-...
Spring MVC是Spring框架中用于Web应用快速开发的一个模块,其中的MVC是Model-View-Controller的缩写。作为当今业界最主流的Web开发框架,Spring MVC已经成为当前最热门的开发技能,同时也广泛用于桌面开发领域。 ...
SSM(spring+spring MVC+mybatis)开发学生信息后台管理系统,实现学生增删改查功能设计一个简单的学生信息管理系统,要求使用SSM框架技术整合实现,用户登录后能够通过Web页面添加、删除、修改和查询学生信息 ...
Spring MVC所需jar包,包含java开发中 Spring MVC架构中最常用的jar包
spring MVC环境搭建 所需jar包 ├── commons-logging-1.1.1.jar ├── jstl.jar ├── spring-aop-4.3.0.RELEASE.jar ├── spring-aspects-4.3.0.RELEASE.jar ├── spring-beans-4.3.0.RELEASE.jar ├...
Servlet JSP和Spring MVC初学指南
spring MVC数据绑定 含例子 转载自疯芒毕露的专栏 刚开始用spring mvc 做web开发时 经常会不知道如何合适绑定页面数据 用惯struts2的朋友更认为spring mvc 绑定数据不如struts2方便 本人最开始也是这么认为 经过一段...
spring mvc最小代码。spring mvc最小代码。spring mvc最小代码。spring mvc最小代码。
Spring MVC MyBatis开发从入门到项目实战
Spring MVC: A Tutorial (Second Edition) by Paul Deck AZW3/MOBI/EPUB/PDF 多种版本 This is a tutorial on Spring MVC, a module in the Spring Framework for rapidly developing web applications. The MVC in...
01. 采用后台及前台的 Spring + Spring mvc + Hibernate + Bootstrap 02. 后台全注解式的开发(除了必要的spring和hibernate的xml配置以外) 03. 后台通过自定义注解结合一个访问拦截器实现整个系统的权限控制 04...
Spring MVC + Mybatis+Spring实现的个人博客系统基于SSM实现的个人博客系统.zip