您的位置:首页 > 编程语言 > Java开发

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为扩展名的请求。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: