springmvc学习笔记(4)-前端控制器

springmvc学习笔记(4)-前端控制器

标签: springmvc



本文通过前端控制器源码分析springmvc执行过程

1.前端控制器接收请求

调用doDispatch方法

protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
        HttpServletRequest processedRequest = request;
        HandlerExecutionChain mappedHandler = null;
        boolean multipartRequestParsed = false;

         。。。。。
}

2.前端控制器调用HandlerMapping(处理器映射器)根据url查找Handler

// Determine handler for the current request.
mappedHandler = getHandler(processedRequest);
/**
     * Return the HandlerExecutionChain for this request.
     * <p>Tries all handler mappings in order.
     * @param request current HTTP request
     * @return the HandlerExecutionChain, or {@code null} if no handler could be found
     */
    protected HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception {
        for (HandlerMapping hm : this.handlerMappings) {
            if (logger.isTraceEnabled()) {
                logger.trace(
                        "Testing handler map [" + hm + "] in DispatcherServlet with name '" + getServletName() + "'");
            }
            HandlerExecutionChain handler = hm.getHandler(request);
            if (handler != null) {
                return handler;
            }
        }
        return null;
    }

3.调用处理器适配器执行Handler,得到执行的结果ModelAndView mv

doDispatch方法中

// Actually invoke the handler.
mv = ha.handle(processedRequest, response, mappedHandler.getHandler());

4.视图渲染,将model数据填充到request域

doDispatch->processDispatchResult->render

render方法中,视图解析得到view

// We need to resolve the view name.
view = resolveViewName(mv.getViewName(), mv.getModelInternal(), locale, request);

调用view的渲染方法,将model数据填充到request域

render方法中,调用View接口的render方法

view.render(mv.getModelInternal(), request, response);

程序我也没细读,感觉分析比较浅,很多还没弄懂,等我系统阅读源码后会整理一篇好点的。


作者@brianway更多文章:个人网站 | CSDN | oschina

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值