快速业务通道

Spring源代码解析(四):Spring MVC - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
  Conventions.getQualifiedAttributeName (HandlerMapping.class, "pathWithinHandlerMapping");     //实际上维护一个HandlerExecutionChain,这是典型的Command的模式的使用, 这个执行链里面维护handler和拦截器    HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception; }

他的具体实现只需要实现一个接口方法,而这个接口方法返回的是一个 HandlerExecutionChain,实际上就是一个执行链,就像在Command模式描述的那样,这个 类很简单,就是一个持有一个Interceptor链和一个Controller:

代码

public class HandlerExecutionChain {    private Object handler;    private HandlerInterceptor[] interceptors;    ........ }

而这些Handler和Interceptor需要我们定义HandlerMapping的时候配置好,比如对具 体的 SimpleURLHandlerMapping,他要做的就是根据URL映射的方式注册Handler和 Interceptor,自己维护一个放映映射的handlerMap,当需要匹配Http请求的时候需要使 用这个表里的信息来得到执行链。这个注册的过程在IOC容器初始化 SimpleUrlHandlerMapping的时候就被完成了,这样以后的解析才可以用到map里的映射信 息,这里的信息和bean文件的信息是等价的,下面是具体的注册过程:

代码

protected void registerHandlers(Map urlMap) throws BeansException {    if (urlMap.isEmpty()) {      logger.warn("Neither ''urlMap'' nor ''mappings'' set on SimpleUrlHandlerMapping");    }    else {      //这里迭代在SimpleUrlHandlerMapping中定义的所有映射元素      Iterator it = urlMap.keySet().iterator();      while (it.hasNext()) {        //这里取得配置的url          String url = (String) it.next();        //这里根据url在bean定义中取得对应的handler        Object handler = urlMap.get(url);        // Prepend with slash if not already present.        if (!url.startsWith("/")) {          url = "/" + url;        }        //这里调用AbstractHandlerMapping中的注册过程        registerHandler(url, handler);      }    } }

Spring源代码解析(四):Spring MVC(3)

时间:2011-03-29 javaeye jiwenke

在AbstractMappingHandler中的注册代码:

代码

protected void registerHandler(String urlPath, Object handler) throws BeansException, IllegalStateException {    //试图从handlerMap中取handler,看看是否已经存在同样的Url映射关系    Object mappedHandler = this.handlerMap.get(urlPath);    if (mappedHandler != null) {    ........    }    //如果是直接用bean名做映射那就直接从容器中取handler    if (!this.lazyInitHandlers && handler instanceof String) {      String handlerName = (String) handler;      if (getApplicationContext().isSingleton(handlerName)) {        handler = getApplicationContext().getBean(handlerName);      }    }    //或者使用默认的handler.    if (urlPath.equals("/*")) {      setDefaultHandler(handler);    }    else {   //把url和handler的对应关系放到handlerMap中去      this.handlerMap.put(urlPath, handler);      ........    } }

handlerMap是持有的一个HashMap,里面就保存了具体的映射信息:

代码

private final Map handl

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号