快速业务通道

Spring源代码解析(二):IOC容器在web容器中的启动 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
   StringUtils.tokenizeToStringArray(                getContextConfigLocation(), ConfigurableWebApplicationContext.CONFIG_LOCATION_DELIMITERS));      }      //这里调用ApplicationContext的初始化过程,同样需要使用refresh()      wac.refresh();      return wac;    }

Spring源代码解析(二):IOC容器在web容器中的启动(5)

时间:2011-03-29 javaeye jiwenke

4. 然后就是DispatchServlet中对Spring MVC的配置过程,首先对配置文件中的定义 元素进行配置 - 请注意这个时候我们的WebApplicationContext已经建立起来了,也意味 着DispatcherServlet有自己的定义资源,可以需要从web.xml中读取bean的配置信息,通 常我们会使用单独的xml文件来配置MVC中各个要素定义,这里和web容器相关的加载过程 实际上已经完成了,下面的处理和普通的Spring应用程序的编写没有什么太大的差别,我 们先看看MVC的初始化过程:

代码

protected void initFrameworkServlet() throws ServletException, BeansException {    initMultipartResolver();    initLocaleResolver();    initThemeResolver();    initHandlerMappings();    initHandlerAdapters();    initHandlerExceptionResolvers();    initRequestToViewNameTranslator();    initViewResolvers(); }

5. 这样MVC的框架就建立起来了,DispatchServlet对接受到的HTTP Request进行分发 处理由doService()完成,具体的MVC处理过程我们在doDispatch()中完成,其中包括使用 Command模式建立执行链,显示模型数据等,这些处理我们都可以在DispatcherServlet的 代码中看到:

代码

protected void doService(HttpServletRequest request, HttpServletResponse response) throws Exception {    ......    try {      doDispatch(request, response);    }   ....... }

实际的请求分发由doDispatch(request,response)来完成:

代码

protected void doDispatch(final HttpServletRequest request, HttpServletResponse response) throws Exception {    .......    // 这是Spring定义的执行链,里面放了映射关系对应的handler和定义的相关拦 截器。    HandlerExecutionChain mappedHandler = null;     ......     try {       //我们熟悉的ModelAndView在这里出现了。       ModelAndView mv = null;       try {         processedRequest = checkMultipart(request);         //这里更具request中的参数和映射关系定义决定使用的handler         mappedHandler = getHandler(processedRequest, false);         ......         //这里是handler的调用过程,类似于Command模式中的execute.         HandlerAdapter ha = getHandlerAdapter (mappedHandler.getHandler());         mv = ha.handle(processedRequest, response, mappedHandler.getHandler());         .......       //这里将模型数据通过视图进行展现       if (mv != null && !mv.wasCleared()) {         render(mv, processedRequest, response);       }        ........   }

这样具体的MVC模型的实现就由bean配置文件里定义好的view resolver,handler这些 类来实现用户代码的功能。

总结上面的过程,我们看到在web容器中,ServletContext可以持有一系列的web上下 文,而在整个web上下文中存在一个根上下文来作为其它 Servlet上下文的父上下文。这 个根上下文是由ContextLoader载入并进行初始化的,对

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号