springMVC之请求处理过程

前言

一个request请求开始到结束,究竟进行了哪些步骤, 其中springMVC哪些模块参与,开发人员其中担任什么角色;前端

 

 

Spring工做流程描述

      1. 用户向服务器发送request请求,请求被Spring 前端控制DispatcherServlet捕获;java

      2. DispatcherServlet对请求URL进行解析,获得请求资源标识符(URI)。而后根据该URI,调用HandlerMapping得到该Handler配置的全部相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;web

      3. DispatcherServlet 根据得到的Handler,选择一个合适的HandlerAdapter。(附注:若是成功得到HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)spring

       4.  提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程当中,根据你的配置,Spring将帮你作一些额外的工做:服务器

      HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息mvc

      数据转换:对请求消息进行数据转换。如String转换成Integer、Double等app

      数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等jsp

      数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中ide

      5.  Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;post

      6.  根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;

      7. ViewResolver 结合Model和View,来渲染视图

      8. 将渲染结果返回给客户端。

实际开发

    在实际开发中, 咱们开发人员其实关心并很少,咱们只要作好关键配置便可, 但具体哪些呢;

  • 拦截器

    xml方式注解配置    

<mvc:interceptors>
        <!--对全部的请求记性拦截-->
        <!--<beans:bean class="com.sunp.common.interceptor.Myinterceptor"/>-->
        <!--对特定的请求进行拦截-->
        <mvc:interceptor>
            <mapping path="/kfc/brands/brand1/*"/>
            <beans:bean class="com.sunp.common.interceptor.Myinterceptor"/>
        </mvc:interceptor>
</mvc:interceptors>
package cn.javass.chapter5.web.interceptor;  
//省略import  
public class HandlerInterceptor1 extends HandlerInterceptorAdapter {//此处通常继承HandlerInterceptorAdapter适配器便可  
    @Override  
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {  
        System.out.println("===========HandlerInterceptor1 preHandle 请求前");  
        return true;  
    }  
    @Override  
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {  
        System.out.println("===========HandlerInterceptor1 postHandle 请求中");  
    }  
    @Override  
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {  
        System.out.println("===========HandlerInterceptor1 afterCompletion 请求后");  
    }  
}
  • Ctroller类声明    
@Controller 
@RequestMapping("/welcome") 
public class HelloWorldController {    
  @RequestMapping(value="/hello" ,method=RequestMethod.GET)  
  public String printWelcome(ModelMap model){   
    model.addAttribute("message" ,"Spring MVC Hello World");  
    return "hello";     
  }  
}
  • Ctroller类返回
  • spring视图配置
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/" />
     <property name="suffix" value=".jsp" />
</bean>
相关文章
相关标签/搜索