DispatcherServlet执行流程

博客介绍了SpringMVC中DispatcherServlet的执行流程,涉及相关代码。SpringMVC是后端开发常用框架,DispatcherServlet是其核心组件,了解其执行流程对后端开发至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 springmvc中DispatcherServlet执行流程:

代码:

//经过精减的DispatcherServlet:
public class DispatcherServlet extends FrameworkServlet {

	//DispatcherServlet分发请求
    protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {

        //获取Hander。getHandler返回HandlerExecutionChain mappedHandler(简称Hander),HandlerExecutionChain包含了核心Handler和拦截器。
        /**
         * public class HandlerExecutionChain {
         *         private final Object handler;//保存了处理请求Controller中的方法信息
         *         private List<HandlerInterceptor> interceptorList;
         *}
         */
        HandlerExecutionChain mappedHandler = getHandler(request);


        //创建HandlerAdapter
		/**
         * protected HandlerAdapter getHandlerAdapter(Object handler) throws ServletException {
         *         //handlerAdapters是一个List<HandlerAdapter>集合
         *         for (HandlerAdapter ha : this.handlerAdapters) {
         *             //判断是否适合
         *             if (ha.supports(handler)) {
         *                 return ha;
         *             }
         *         }
         *     }
         */
        HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());
        //通过HandlerAdapter获取ModelAndView
        ModelAndView mv = ha.handle(request, response, mappedHandler.getHandler());


        //处理程序调用的结果
        processDispatchResult(request, response, mappedHandler, mv, dispatchException);

    }

    //处理程序调用的结果
    private void processDispatchResult(HttpServletRequest request, HttpServletResponse response, HandlerExecutionChain mappedHandler, ModelAndView mv, Exception exception) throws Exception {
        if (mv != null) {
			//渲染视图,获取视图并渲染
            render(mv, request, response);
        }
    }

    //渲染视图,获取视图并渲染
    protected void render(ModelAndView mv, HttpServletRequest request, HttpServletResponse response) throws Exception { Locale locale = this.localeResolver.resolveLocale(request);
        //获取View视图,通过视图名称找到网页,并读取网页代码。
        View view = resolveViewName(mv.getViewName(), mv.getModelInternal(), locale, request);
        //渲染视图,就是将数据绑定到网页代码中,再写入response输出流中。
        view.render(mv.getModelInternal(), request, response);
    }

    //获取View视图,就是通过视图名称找到网页,并读取网页代码。
    protected View resolveViewName(String viewName, Map<String, Object> model, Locale locale, HttpServletRequest request) throws Exception {
        //从viewResoluers集合中找到适合的viewResolver,来获取视图。
        for (ViewResolver viewResolver : this.viewResolvers) {
            View view = viewResolver.resolveViewName(viewName, locale);
            if (view != null) {
                return view;
            }
        }
        return null;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值