zoukankan      html  css  js  c++  java
  • springMVC流程

    springMVC流程

    1.客户端向服务器发送http请求,web服务器对http请求进行解析,得到一个url,如果匹配上了前端控制器DispatcherServlet的映射路径,就将请求交给前端控制器处理。

    2.前端控制器调用相应的方法的到处理器映射器HandlerMapping对象,根据接收到的请求来获得Handler对象以及它对应的拦截器。这里只是获得了Handler对象,并不会操作它,在springMVC中,是通过处理器适配器HandlerAdapter对Handler进行调用,控制的。

    3.前端控制器根据处理器映射器返回的Handler对象,选择一个合适的HandlerAdapter,创建其对象实例,,如果有拦截器,执行拦截器中的preHandle()方法。

    4.处理器适配器将Handler执行完返回的一个ModelAndView对象返回给前端控制器。

    5.这时这个ModelAndView对象还只是一个逻辑视图,并不是真正的物理视图,需要前端控制器将这个ModelAndView对象交给视图解析器ViewResolver,将逻辑视图转化成真正的物理视图,可以理解为是将视图路径补全,将ModelAndView对象加上视图解析器中配置的前缀和后缀,指向真正的物理视图。

    6.前端控制器通过Model将ModelAndView对象中的数据进行解析,对view进行渲染,将最终的结果通过http响应给客户端。

     前端控制器:WEB应用系统前端的一个入口控制器,所有的request请求都被发往该控制器统一处理,处理所有请求。前端控制器在WEB-INF下的web.xml中配置效果

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns="http://java.sun.com/xml/ns/javaee"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
             http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
             id="WebApp_ID" version="3.0">
    
    
      <display-name>Archetype Created Web Application</display-name>
    
      <!-- 配置前端控制器 -->
      <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:applicationContext.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>
      
    </web-app>

    此时,因为前端控制器的拦截路径已经设置为 / ,所以还需要在SpringMVC的配置文件中添加对静态资源访问的配置,<mvc:default-servlet-handler/>

    原因是因为Tomcat中处理静态资源访问的servlet(default)的映射路径为/. 在启动项目的时候,在Tomcat中的web.xml是先加载的,项目的web.xml是后加载的,如果配置了相同的映射路径,后面的会覆盖前者. 也就是说,SpringMVC中的DispatcherServlet的映射路径覆盖了Tomcat默认对静态资源的处理的路径。 如果SpringMVC要配置为/,那么就得设置Dispatcherservlet对静态资源进行支持。

    <mvc:default-servlet-handler/> 配置的作用是在 SpringMVC 上下文中定义一个DefaultServletHttpRequestHandler,它会对进入 DispatcherServlet 的请求进行筛查,如果发现是没有经过映射的请求,就将该请求交由 Tomcat默认的 Servlet 处理,如果不是静态资源的请求,才由 DispatcherServlet 继续处理。

  • 相关阅读:
    [刘阳Java]_MyBatis_其他方式来实现多表查询的操作_第9讲
    [刘阳Java]_MyBatis_实体关系映射_第8讲
    [刘阳Java]_MyBatis_动态SQL标签用法_第7讲
    [刘阳Java]_MyBatis_常规标签的用法_第6讲
    nodejs配置nginx 以后链接mongodb数据库
    es6学习
    学生管理系统
    node exprss-session 和connect-mongo
    容错处理try
    node错误中间件处理 express类 带有路由操作
  • 原文地址:https://www.cnblogs.com/w998/p/11624434.html
Copyright © 2011-2022 走看看