- 浏览: 1016231 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (826)
- 硬件 (8)
- 软件 (24)
- 软件工程 (34)
- JAVA (229)
- C/C++/C# (77)
- JavaScript (8)
- PHP (1)
- Ruby (3)
- MySQL (14)
- 数据库 (19)
- 心情记事 (12)
- 团队管理 (19)
- Hadoop (1)
- spring (22)
- mybatis(ibatis) (7)
- tomcat (16)
- velocity (0)
- 系统架构 (6)
- JMX (8)
- proxool (1)
- 开发工具 (16)
- python (10)
- JVM (27)
- servlet (5)
- JMS (26)
- ant (2)
- 设计模式 (5)
- 智力题 (2)
- 面试题收集 (1)
- 孙子兵法 (16)
- 测试 (1)
- 数据结构 (7)
- 算法 (22)
- Android (11)
- 汽车驾驶 (1)
- lucene (1)
- memcache (12)
- 技术架构 (7)
- OTP-Erlang (7)
- memcached (17)
- redis (20)
- 浏览器插件 (3)
- sqlite (3)
- Heritrix (9)
- Java线程 (1)
- scala (0)
- Mina (6)
- 汇编 (2)
- Netty (15)
- libevent (0)
- CentOS (12)
- mongod (5)
- mac os (0)
最新评论
-
kingasdfg:
你这里面存在一个错误添加多个任务 应该是这样的 /** * ...
Quartz的任务的临时启动和暂停和恢复【转】 -
kyzeng:
纠正一个错误,long型对应的符号是J,不是L。
Jni中C++和Java的参数传递 -
zhaohaolin:
抱歉,兄弟,只是留下作记录,方便学习,如果觉得资料不好,可以到 ...
netty的个人使用心得【转】 -
cccoooccooco:
谢谢!自己一直以为虚机得使用网线才可以与主机连接呢。。
主机网卡无网线连接与虚拟机通信 -
yuqilin001:
要转别人的东西,请转清楚点嘛,少了这么多类,误人子弟
netty的个人使用心得【转】
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>
发表评论
-
spring2.0-2.5-3.0变化[转]
2011-09-10 00:50 11522.5的新特性 Spri ... -
Spring的JMX支持
2011-08-10 20:31 1184Spring的JMX支持所提供的特性使你容易而又透明地将你的S ... -
Spring.Net入门篇(一) [转]
2011-07-20 01:15 2373简介 从OO到AOP,一路走来就是眼花缭 ... -
开源框架spring详解-----AOP的深刻理解
2011-07-01 18:31 1051AOP是一种不同于OOP(面向对象编程)的编程模式,它 ... -
AOP学习——配置Spring AOP【2】,使用annotation
2011-07-01 13:41 1010使用 annotation 配置 AOP ... -
AOP学习——配置Spring AOP【1】,使用xml文件
2011-07-01 13:34 928使用 Spring AOP ,除了 spring ... -
Spring2.5注释语法(上)——Spring2.5注释驱动的IoC
2011-07-01 10:30 684Spring2.5 注释语法( 上) ... -
Spring2.5注释驱动与基于注释的MVC
2011-07-01 10:28 764写在前面: 好长 ... -
BoneCP,Proxool,DBCP,C3P0 参数介绍的简介与内容
2011-06-15 12:31 1200DBCP,C3P0,Proxool,BoneCP详细参数介绍 ... -
使用Spring HTTP invoker进行远程调用
2011-06-08 19:03 1080http://www.kompakar.com.cn/disc ... -
spring http invoker 高级篇
2011-06-08 19:03 1247默认情况下,客户端的HttpInvokerProxy使用J2S ... -
Spring管理Filter和Servlet
2011-06-08 19:02 993Spring 管理 filter 和 ser ... -
Spring HTTP invoker简介
2011-06-08 19:01 989Spring HTTP invoker 简介 S ... -
spring2.5注解式MVC配置
2011-06-08 00:49 1356转载自http://www.ibm.com/developer ... -
解惑 spring 嵌套事务
2011-05-13 00:28 847在所有使用 spring 的应用中, 声明式事务管理可能是使用 ... -
Spring + iBatis 的多库横向切分简易解决思路
2011-05-13 00:26 11241.引言 笔者最 ... -
Spring多数据源解决方案
2011-05-13 00:14 969在很多大型应用中都会对数据进行切分,并且采用多个数据库实例进行 ... -
Spring 初始化之旅(转)
2011-03-23 09:29 944Spring源码学习 ... -
Spring工具类,提供取得Bean的方法,方便单元测试
2011-03-15 15:46 1352Spring工具类,提供取得Bean的方法,方便单元测试 ... -
Spring 的优秀工具类盘点
2011-03-15 15:38 507Spring 的优秀工具类盘点,第 1 部分: 文件资源操作和 ...
相关推荐
Spring Web MVC 是一个功能强大且灵活的Web框架,它不仅能够帮助开发者构建高质量的Web应用程序,还能够与其他Spring生态系统中的组件无缝集成。通过本教程的学习,你可以系统地掌握Spring Web MVC的核心知识和技术...
Spring MVC 配置详解 Spring MVC 是一个基于 DispatcherServlet 的 MVC 框架,它是当前主流的 Web 框架之一。要想灵活运用 Spring MVC 来应对大多数的 Web 开发,就必须要掌握它的配置及原理。 一、Spring MVC ...
**Spring Web MVC与Spring 2.0 Form Tag详解** 在Web开发领域,Spring Web MVC作为一款强大的MVC框架,被广泛应用于构建企业级的Web应用。它提供了模型(model)、视图(view)和控制器(controller)的分离,使得开发者...
- **注解式控制器开发详解**:Spring Web MVC支持注解式的开发方式,通过`@Controller`、`@RequestMapping`等注解简化控制器的编写。了解如何定义控制器类、处理请求映射、REST风格的支持等。 - **数据类型转换**:...
下面我们将详细探讨`web.xml`中涉及Spring MVC的主要配置项。 1. **监听器(Listener)** `web.xml`中的监听器允许我们在特定事件发生时执行代码,例如应用程序启动或关闭。在Spring MVC中,`org.springframework....
Spring 3.0 MVC的核心组件是`DispatcherServlet`,需要在`web.xml`中进行配置: ```xml <web-app> <servlet-name>example <servlet-class>org.springframework.web.servlet.DispatcherServlet ...
### Spring的Web MVC架构模式详解 #### 一、Spring架构简介及特点 Spring是一个轻量级的开源Java应用框架,最初由Rod Johnson创建,并由Juergen Hoeller等人继续开发和完善。Spring框架的设计目的是简化企业级应用...
### Spring Framework 4.1.x Web MVC框架知识点详解 #### 一、Spring Web MVC框架概述 **Spring Web MVC**框架是Spring框架中的一个重要组成部分,它主要用于处理基于HTTP协议的请求,构建灵活且易于扩展的Web应用...
**Spring MVC架构模式详解** Spring MVC是Spring框架中的一个核心组件,主要用于构建Web应用程序的模型-视图-控制器(Model-View-Controller)架构。它为开发者提供了灵活且强大的工具来处理HTTP请求、数据绑定、...
《Spring Web MVC与Tiles2整合详解》 Spring Web MVC是Spring框架的重要组成部分,它提供了一个用于构建Web应用程序的全面模型视图控制器(MVC)架构。而Tiles2是一个视图框架,它允许开发者将Web页面分解成可重用...
**Spring MVC DispatcherServlet详解** Spring MVC是Spring框架的一部分,它是一个用于构建Web应用程序的轻量级、模型-视图-控制器(MVC)框架。在本项目中,`Spring-MVC-DispatcherServlet-Example`是一个使用...
在上述示例中,`dispatcherContext` 是 Servlet 的名称,而 `org.springframework.web.servlet.DispatcherServlet` 指定了 Servlet 类。`<load-on-startup>` 标签设置了 Servlet 在应用启动时的加载顺序,值为 1 ...
Spring3 MVC是Spring框架的重要组成部分,它是一个用于构建Web应用程序的轻量级、模型-视图-控制器(MVC)框架。本篇文章将深入探讨Spring3 MVC的核心概念、工作原理以及如何在实际项目中应用。 一、Spring3 MVC...
### Spring Web 3.0 MVC 注解详解及实例 #### 一、概述 Spring Web MVC 是 Spring Framework 的一部分,提供了一种强大而灵活的方式来构建基于 Web 的应用。随着 Spring 3.0 的发布,框架引入了一系列重要的改进,...
在 "spring-mvc-demo" 中,可能包含 `web.xml` 配置文件,用于部署 DispatcherServlet,以及一个或多个 Spring 配置文件,如 `servlet-context.xml`,用于配置 MVC 组件。此外,可能还会有 Java-based 配置,使用 `...
`<init-param>`可以用来设置DispatcherServlet的初始化参数,如`contextConfigLocation`用于指定Spring MVC的配置文件位置,可以是类路径下的路径(如`classpath:spring-servlet-config.xml`),而不是默认的`/WEB-...
- **Controller**: 处理业务逻辑,通常是一个实现了 `org.springframework.web.servlet.mvc.Controller` 或者 `org.springframework.web.bind.annotation.ControllerAdvice` 接口的类。 - **Model**: 表示应用程序的...
SSM框架,即Spring、Spring MVC和MyBatis的整合,是Java开发中常见的Web应用框架,用于构建高效、灵活的后端服务。本教程将详细介绍如何配置和搭建这一框架,帮助开发者理解其核心概念和操作流程。 首先,我们要...
### Spring MVC 教程知识点详解 #### Spring Web MVC 框架简介 Spring Web MVC 是 Spring Framework 的一个重要组成部分,主要用于构建基于 Java 的 Web 应用程序。它提供了一个灵活且强大的 MVC 实现,使得开发者...
在本教程中,我们将深入探讨如何使用Spring、Spring MVC 3.0.5以及MyBatis 3.0.4这三个流行的Java框架构建一个全注解的Web应用程序。这个实例详解将帮助开发者理解如何有效地集成这三个组件,实现高效的数据访问和...