spring源代码-DispatcherServlet

DispatcherServlet遵循原始servlet的生命周期,init,service,destory

init(初始化)

通过HttpServletBean、FrameworkServlet、DispatcherServlet三个不同的类层次,SpringMVC的设计者将三种不同的职责分别抽象,运用模版方法设计模式分别固定在三个类层次中。

HttpServletBean : 完成的是<init-param>配置元素的依赖注入

FrameworkServlet :

(1)完成的是容器上下文的建立,即webApplicationContext,我们知道应用在加载加载spring的时候,已经初始化了一个webApplicationContext,现在又来一个context,这两个context为父子关系,spring-mvc对应的context为子,可以通过getParent拿到spring的context

(2)上下文建立的过程中,实例并且初始化核心的bean,比如RequestMappingHandlerMapping ,这个mapping会循环所有的controller及其方法,生成path到method的映射,注册到mapping中。

DispatcherServlet:

完成spring-mvc的请求处理和相应到核心组件的初始化

initHandlerMapping,初始化handlerMapping,从bean工厂中获取handlerMapping,放到DispatcherServlet中

service(请求处理和相应)

请求进行路由,获取对应的handler,并执行



循环handlerMapping,找到url对应的HandlerExcutionChain,生成requestMappingHandlerAdapter,调用handle方法,在handle方法中new出ServletInvocableHandlerMethod对象,执行invokeAndHandle,此时真正执行controller层的method

handle完成之后进行viewResolver,首先进行异常处理,这里给我们提供了扩展,下面介绍如何自定义异常处理器,对controller层的错误统一返回json,不返回错误页面

sping-mvc配置文件中配置

<bean class="com.fengjr.prizecenter.component.AjaxExceptionResolver"></bean>
/**

    * Created by haoxu on 17/10/11.

 */
public class AjaxExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("isSuccess", false);
        modelAndView.setView(new FastJsonJsonView());
        return modelAndView;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值