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

来源:互联网 发布:建筑设计软件 编辑:程序博客网 时间:2024/06/03 23:00

本文通过前端控制器源码分析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

// 确定当前请求的处理程序mappedHandler = getHandler(processedRequest);
/***返回该请求的HandlerExecutionChain。* <p>按顺序尝试处理所有处理程序的映射。* @param请求当前HTTP请求* @返回HandlerExecutionChain,如果没有找到处理程序,则返回{@code null}*/    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方法中

// 实际上调用处理程序.mv = ha.handle(processedRequest, response, mappedHandler.getHandler());

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

doDispatch->processDispatchResult->render

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

// 我们需要解析视图名称.view = resolveViewName(mv.getViewName(), mv.getModelInternal(), locale, request);

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

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

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

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

阅读全文
0 0