Spring MVC 的大致流程

一:请求的分发过程

1. 请求的接管

<!-- 前端控制器的配置 -->

<servlet>

<servlet-name>spring</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<!--指定spring配置文件的位置 -->

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:applicationContext.xml</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

<!-- 所有以.html和.json的请求都由dispatcherServlet来处理的配置 -->

<servlet-mapping>

<servlet-name>spring</servlet-name>

<url-pattern>*.htm</url-pattern>

</servlet-mapping>

在web.xml 中配置上面的 servlet 则 所有的 htm 和 json 请求都将由

org.springframework.web.servlet.DispatcherServlet

这个类来处理。

这个类就是一个 servlet. 他的 doService 方法调用 doDispatch 方法。这个方法的大致过程是:

1. mappedHandler = getHandler(processedRequest, false);

依据请求参数获得 对应的映射处理器

2. mv = ha.handle(processedRequest, response, mappedHandler.getHandler());

调用具体的处理方法:

将请求,相应,和处理器对象传递给 handle 方法。

该方法返回 org.springframework.web.servlet.ModelAndView

3. 请求处理完毕之后 返回数据

processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);

二:DispatcherServlet 的初始化

对于DispatcherServlet 类要想能够正确的分发请求和返回请求,则其必须拥有 映射处理的map 和模型视图的map ,

映射处理的map 通过下面的方法获得:

mappedHandler = getHandler(processedRequest, false);

模型视图的map的map(视图分解器)

this.viewResolvers

在 initViewResolvers 方法中初始话。

initStrategies 中初始话这些东西,而这个方法最终被 DispatcherServlet 的 父类:

org.springframework.web.servlet.HttpServletBean

的init方法所调用。所以 映射处理器是在 servelt 被初始话时调用。

三: DispatcherServlet 对象是何时被创建的

DispatcherServlet其实就是一个 Servlet ,那么对于一个 Servlet 他是何时被创建的。

1.     web客户向Servlet容器发出HTTP请求;

2.     Servlet容器解析web的HTTP请求.

3.     Servlet容器创建一个HttpRequest对象,在这个对象中封装了http请求信息;

4.     Servlet容器创建一个HttpResponse对象;

5.     Servlet容器(如果访问的该servlet不是在服务器启动时创建的,则先创建servlet实例并调用init()方法初始化对象)调用HttpServlet的service()方法,把HttpRequest和HttpResponse对象为service方法的参数传给HttpServlet对象;

6.     HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息;

7.     HttpServlet调用HttpResponse的有关方法,生成响应数据;

8. Servlet容器把HttpServlet的响应结果传给web客户.

上面是 Servlet 处理请求的过程。 Servlet 在 第 5 步中被初始话。但是如果在web.xml中配置 DispatcherServlet 时加上下面的属性:

<load-on-startup>1</load-on-startup>

则这个,Servlet 将在 Servlet容器(tomcat)初始化的时候也被初始化,就会调用起 init 方法。这样在 tomcat 启动时,DispatcherServlet类所需要的资源就被初始化好了,例如:请求映射处理器Map,和视图分解器Map。

初始化,这些东西时,需要的配置文件也在 DispatcherServlet 的Servlet配置中申明:

<!-- 加载springMVC的配置文件 -->

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:applicationContext-mvc.xml</param-value>

</init-param>

这个配置文件applicationContext-mvc.xml:中的配置信息,

1. 请求映射处理器。

<!-- 自动扫描的包名 -->

<context:component-scan base-package="com.shishuo.cms"></context:component-scan>

通过注解分析 获得 com.shishuo.cms 下面所有类和包中的类的映射处理器。

  1. 视图分解器

<bean id="viewResolver"

class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">

<property name="viewClass"

value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"></property>

<property name="cache" value="false" />

<property name="prefix" value="/" />

<property name="suffix" value=".ftl" /><!--可为空,方便实现自已的依据扩展名来选择视图解释类的逻辑 -->

<property name="contentType" value="text/html;charset=utf-8" />

<property name="exposeRequestAttributes" value="true" />

<property name="exposeSessionAttributes" value="true" />

<property name="exposeSpringMacroHelpers" value="true" />

上面是 freemarker 的视图分解器配置。

</bean>

  1. 数据源配置等等。。。
时间: 2024-10-16 03:29:14

Spring MVC 的大致流程的相关文章

spring mvc的工作流程

Spring MVC工作流程图 图一 图二  Spring工作流程描述 1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获: 2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI).然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回: 3.

Spring MVC整体处理流程

一.spring整体结构 首先俯视一下spring mvc的整体结构 二.处理流程 1.请求处理的第一站就是DispatcherServlet.它是整个spring mvc的控制核心.与大多数的java web框架一样,spring mvc所有的请求都会经过一个核心的前端控制器(Servlet).DispatcherServlet通过一个或者多个处理程序映射,将每个请求映射到处理程序中.处理程序映射配置在web应用程序的上下文中,是实现了HandlerMapping接口的Bean.它负责为请求返

Spring MVC执行的流程

1.Spring MVC应用的开发步骤 a.在web.xml文件中定义前端控制器DispatcherServlet来拦截用户请求.由于Web应用是基于请求/响应架构的应用,所以 不管哪个MVC Web框架,都需要在web.xml中配置该框架的核心Servlet或Filter,这样才可以让该框架介入到Web应用中. <servlet> <!-- Serlvet的名称 --> <servlet-name>springmvc</servlet-name> <

Spring MVC 的执行流程

(一)核心流程 具体步骤: 第一步:发起请求到前端控制器(DispatcherServlet) 第二步:前端控制器请求HandlerMapping查找 Handler (可以根据xml配置.注解进行查找) 第三步:处理器映射器HandlerMapping向前端控制器返回Handler,HandlerMapping会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象,多个HandlerInterceptor拦截器对象),通过这种策略模式,很容

Spring MVC的核心流程(步骤)

具体步骤: 1.客户端发送请求先要经过前端控制器,请求被Spring 前端控制器DispatcherServlet获取,如详细图第一步:DispatcherServlet对请求URL进行解析(比如我们发送一个url如下的请求(http://localhost:8080/SpringMVC/hello.action),就会得到请求资源标示符(URI,相当于就是上面的hello.action ). 2.然后前端控制器DispatcherServlet根据URI,调用处理器映射器(HandlerMap

spring mvc的执行流程

一:客户端向服务器发送请求,服务器接收 如果请求匹配前端服务器DispatcherServlet的请求路径(在web.xml种指定),web容器将该请求转交给dispatcherServlet处理 二:DispatcherServlet对请求路径(URL.HTTP方法.请求报头文.请求参数.Cookie等)进行解析,得到请求资源标识符 (比如我们发送一个url如下的请求http://localhost:8080/SpringMVC/hello.action,就会得到hello.action) 然

Spring MVC 和 Spring 总结

1. 为什么使用Spring ? 1). 方便解耦,简化开发 通过Spring提供的IoC容器,可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合. 2). AOP编程的支持 通过Spring提供的AOP功能,方便进行面向切面的编程,如性能监测.事务管理.日志记录等. 3). 声明式事务的支持 4). 方便集成各种优秀框架 5). 降低Java EE API的使用难度 如对JDBC,JavaMail,远程调用等提供了简便封装 2. 什么是IoC,为什使用IoC ?

Spring学习总结(2.1)— Spring MVC

简介 Spring MVC是MVC模式在UI中的使用,当然Spring MVC只是其中的一种.这个模式的特点是:分离了模型.视图.控制器三种角色.将业务处理从UI设计中独立出来,分装到模型和控制器设计中去,使得他们相互之间解耦.这样的话,它们就可以独立扩展. 流程 客户端请求提交到DispatcherServlet 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller DispatcherServlet将请求提交到Control

Spring MVC 和 Spring 总结 (转载自留)

Spring MVC 和 Spring 总结 1. 为什么使用Spring ? 1). 方便解耦,简化开发 通过Spring提供的IoC容器,可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合. 2). AOP编程的支持 通过Spring提供的AOP功能,方便进行面向切面的编程,如性能监测.事务管理.日志记录等. 3). 声明式事务的支持 4). 方便集成各种优秀框架 5). 降低Java EE API的使用难度 如对JDBC,JavaMail,远程调用等提供了简便