• spring mvc请求过程


    spring mvc处理请求过程

    1、    首先客户端发送一个HTTP请求,Web服务器接收这个请求,如果匹配DispatcherServlet的请求映射路径,web容器将请求转交给DispatcherServlet处理。

    2、    DispatcherServlet接收到请求,根据请求信息(包括URL,HTTP方法,请求报文,请求参数,cookie等)及HandlerMapping的配置找到对应的请求处理器(Handler),在spring MVC中并没有定义一个Handler接口,任何一个object都可以成为请求处理器。

    3、    通过HandlerAdapter对Handler进行封装,再以统一的适配器接口调用Handler,HandlerAdapter负责对各种Handler方法调用。

    4、    处理器完成业务逻辑后返回一个ModelAndView给DispatcherServlet,ModelAndView包含了视图逻辑名与模型数据信息。

    5、    DispatcherServlet通过ViewResolver完成逻辑视图名到真实视图对象的解析工作。

    6、    当得到真实对象的Veiw,DispatcherServlet就使用这个View对象对ModelAndView中的模型数据进行视图渲染。

    配置DispatcherServlet

    <servlet>

    <servlet-name>springmvc</servlet-name>

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

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

    </servlet>

    <servlet-mapping>

    <servlet-name>springmvc</servlet-name>

    <url-pattern>/</url-pattern>

    </servlet-mapping>

    配置了<servlet-name>为springmvc,DispatcherServlet默认自动加载/WEB-INF/springmvc-servlet.xml(即<servlet-name>-servlet.xml)的spring配置文件,启动web层spring容器。

    多个spring容器之间可以设置为父子容器,实现良好解耦,在spring mvc中,web层spring 容器将作为业务层spring容器的子容器,即web层容器可以引用业务层容器的bean,而业务层却访问不到web层容器的bean。

    DispatcherServlet参数设置

    如果需要对DispatcherServlet的默认规则修改,可以通过<servlet>的<init-param>指定

    namespace

            DispatcherServlet对应命名空间,默认为<servlet-name>-servlet,显示指定该属性后,配置文件对应路径为/WEB-INF/<namespace>.xml,如/WEB-INF/springmvc.xml

    contextConfigLocation

             如果DispatcherServlet上下文对应的spring配置文件有多个,可以使用该属性指定配置文件位置,如:”classpath:bb1.xml,classpath:bb2.xml”

    <servlet>

        <servlet-name>springmvc</servlet-name>

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

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

        <init-param>

            <param-name>

                contextConfigLocation

           </param-name>

        <param-value>

             /WEB-INF/springmvc.xml

         </param- value>

    </init-param>

    </servlet>

    DispatcherServlet内部逻辑

    DispatcherServlet通过initStrategies方法装配springmvc组件

    protected voidinitStrategies(ApplicationContext context) {

    initMultipartResolver(context);//初始化文件上传解析器

    initLocaleResolver(context);//初始化本地解析器

             initThemeResolver(context);//初始化主题解析器

             initHandlerMappings(context);//初始化处理器映射器

             initHandlerAdapters(context);//初始化处理器适配器

             initHandlerExceptionResolvers(context);//初始化异常解析器

             initRequestToViewNameTranslator(context);//初始化请求到视图名称解析器

             initViewResolvers(context);//初始化视图解析器

             initFlashMapManager(context);

    }

    initStrategies()方法在WebApplicationContext初始化后自动执行,此时spring上下文中的Bean已经初始化完成,该方法通过反射机制查找并装配spring容器中用户显示自定义的组件Bean,如找不到再装配默认组件实例。

    org.springframework.web.servlet类路径下DispatcherServlet.properties指定了默认组件

    #本地解析器

    org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver

    #主题解析器

    org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver

    #处理器映射器 (2个)

    org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,

             org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping

    #处理器适配器

    org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,

             org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,

             org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter

    #异常解析器

    org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,

             org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,

             org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver

    org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator

    #视图解析器

    org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver

    org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager

    如果用户希望采用非默认类型组件,则需要在spring配置文件中配置自定义组件bean,spring mvc一旦发现上下文中拥有自定义组件,就不会使用默认组件。

    DispatcherServlet初始化后,会自动扫描上下文的bean,根据名称或类型匹配机制查找自定义组件,找不到则使用DispatcherServlet.properties指定的默认组件

  • 相关阅读:
    BOS项目 第1天(项目概述、PowerDesigner、svn、easyui的使用)
    mavenbos项目第二天(msyql操作、ssh配置集成、PowerDesinger、自定义登陆拦截器)
    mavenbos项目第一天(maven、远程部署、svn、easyui的使用。)
    json字符串和java对象的互相转换
    mysql设置环境变量
    windows下mysql的安装
    Unity3d 创建线程 子线程与主线程通信
    Unity3d 子线程能做的事
    Unity3d Resources TextAsset 文本
    NGUI Checkbox与PlayerPrefs
  • 原文地址:https://www.cnblogs.com/caolei1108/p/6207384.html
Copyright © 2020-2023  润新知