springmvc系列之一(原理)
2016-01-02 12:52
447 查看
一、SpringMVC工作流程描述:
1、客户端(用户)通过浏览器向web服务器发送http请求,请求被SpringMVC前端控制器Servlet——DispatcherServlet捕获;
2、 DispatcherServlet 对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象 (包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;
3、DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)
4.、 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作,包括:
HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等
数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中
5、 Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;
6、根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;
7、ViewResolver 结合Model和View,来渲染视图
8、将渲染结果返回给客户端。
二、主要对象解析:
1、DispatcherServlet
a) 定义:前端控制器设计模式的实现。
b) 作用:主要用作职责调度工作,包括:
i. 文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析;
ii. 通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor拦截器);
iii. 通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器);
iv. 通过ViewResolver解析逻辑视图名到具体视图实现;
v. 本地化解析;
vi. 渲染具体的视图等;
vii. 如果执行过程中遇到异常将交给HandlerExceptionResolver来解析。
2、配置:
Web.xml:
<servlet>
<servlet-name>chapter2</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>chapter2</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
load-on-startup:表示启动容器时初始化该Servlet;
url-pattern:表示哪些请求交给Spring Web MVC处理, “/” 是用来定义默认servlet映射的。也可以如“*.html”表示拦截所有以html为扩展名的请求。
1、客户端(用户)通过浏览器向web服务器发送http请求,请求被SpringMVC前端控制器Servlet——DispatcherServlet捕获;
2、 DispatcherServlet 对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象 (包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;
3、DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)
4.、 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作,包括:
HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等
数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中
5、 Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;
6、根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;
7、ViewResolver 结合Model和View,来渲染视图
8、将渲染结果返回给客户端。
二、主要对象解析:
1、DispatcherServlet
a) 定义:前端控制器设计模式的实现。
b) 作用:主要用作职责调度工作,包括:
i. 文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析;
ii. 通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor拦截器);
iii. 通过HandlerAdapter支持多种类型的处理器(HandlerExecutionChain中的处理器);
iv. 通过ViewResolver解析逻辑视图名到具体视图实现;
v. 本地化解析;
vi. 渲染具体的视图等;
vii. 如果执行过程中遇到异常将交给HandlerExceptionResolver来解析。
2、配置:
Web.xml:
<servlet>
<servlet-name>chapter2</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>chapter2</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
load-on-startup:表示启动容器时初始化该Servlet;
url-pattern:表示哪些请求交给Spring Web MVC处理, “/” 是用来定义默认servlet映射的。也可以如“*.html”表示拦截所有以html为扩展名的请求。
相关文章推荐
- java设计模式
- Java反射机制详解:从classLoader到反射机制再到抽象工厂设计模式
- 从iOS学习Java(1)
- Spring学习笔记 1. 尚硅谷_佟刚_Spring_HelloWorld
- Java学习笔记·Servlet parameter参数传递utf-8文字编码正常显示
- 第K大数 算法分析、设计与实现(Java)
- 2014-5-22 java.lang.OutOfMemoryError: Java heap space的一次诊断
- Java 接口归纳
- java中泛型的继承
- Eclipse连接mysql
- java集合:链表:Java:LinkedList<E>
- spring mvc
- Java final 关键字
- java编译运行详解
- java 内部类 和 匿名内部类
- java成员方法
- Win7 64位安装JDK的步骤,并且附上测试程序
- java初始化之变量初始化
- Java super和this的异同总结
- spring05 spring的配置信息