天天看点

SpringMVC执行流程和web.xml配置springMVC的执行流程如图所示:

springMVC的执行流程如图所示:

SpringMVC执行流程和web.xml配置springMVC的执行流程如图所示:

解析(对应上图):①客户端的所有请求都交给前端控制器DispatcherServlrt来处理,他会负责调用系统的其他模块来真正处理用户请求

②DispatcherServlet收到请求后,根据请求信息(包括URL、HTTP协议方法、请求头、请求参数、Cookie等)以及HandlerMapping的配置找到该请求的Handler(任何一个对象都可以作为请求的Handler)。

③如果匹配成功(找到对应的Handler)会返回这个Handler的处理链HandlerExecutionChain对象,在getHandler得到的HandlerExecutionChain对象里还包含了interceptor(拦截器)。

④-⑦:Spring会通过HandlerAdapter对该处理器进行封装。HandlerAdapter是一个适配器,它使用统一接口对Handler中的各种方法进行调用。Handler完成对用户的请求后,会返回一个ModelAndVIew对象给DispatcherServlet,ModelAndView顾名思义,包含了数据模型和相应的视图信息。

⑧-⑨:ModelAndView的视图的作用是逻辑视图,DispatcherServlet还要借助ViewResolver(视图解析器)完成从逻辑视图到真实视图的解析工作。

⑩之后:当得到真正的响应视图对象后,DispatcherServlet会利用视图对象对模型进行渲染。客户端得到响应,可能是一个普通的HTNML页面,也可能是XML或者JSON字符串,还可以是一张图片或者一个PDF文件。

注意

上面的图是springMVC的底层实现的流程,而通常情况下我们在编程中能接触到的过程如下:(springMVC封装了大量细节)

SpringMVC执行流程和web.xml配置springMVC的执行流程如图所示:

使用SpringMVC的程序必须在服务器启动时就加载

org.springframework.web.servlet.DispatcherServl

(通过配置web.xml实现)

并且可以配置加载

org.springframework.web.context.ContextLoaderListener

让spring容器完全接管网页的Bean(这步一并非必要,但大家都这么做参见ContextLoaderListener介绍)

常见的一个web.xml长这样

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-context*.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <servlet>
        <servlet-name>springServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:/spring-mvc*.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
           

继续阅读