`
xifei321
  • 浏览: 20337 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
文章分类
社区版块
存档分类
最新评论

Spring MVC DispatcherServlet contextConfigLocation设置

阅读更多


web.xml Spring 控制器配置
其中contextConfigLocation是怎么 读取 并设置到 DispatcherServlet 属性中
<servlet>
   <servlet-name>Dispatcher</servlet-name>
<servlet-class>
    org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/Config.xml</param-value>
</init-param>
</servlet>

=============================================================
DispatcherServlet 的 父类 HttpServletBean 中 init方法,根据servlet生命周期,servlet实例创建后,容器会调用init方法初始化,此方法声明为final 所以在其子类都不能重写,所以当DispatcherServlet 实例创建后,容器调用初始化init方法就是执行的此方法。
 public final void init()
        throws ServletException
    {
        if(logger.isDebugEnabled())
            logger.debug("Initializing servlet '" + getServletName() + "'");
        try
        {
//ServletConfigPropertyValues是HttpServletBean 的内部类,作用是根据config对象获取servlet中的配置信息,封装为PropertyValue对象放到propertyValueList的list中去
            org.springframework.beans.PropertyValues pvs = new ServletConfigPropertyValues(getServletConfig(), requiredProperties);
//包装成BeanWrapper 对象
            BeanWrapper bw = new BeanWrapperImpl(this);
            org.springframework.core.io.ResourceLoader resourceLoader = new ServletContextResourceLoader(getServletContext());
            bw.registerCustomEditor(org.springframework.core.io.Resource.class, new ResourceEditor(resourceLoader));
            initBeanWrapper(bw);
//将封装为PropertyValues 对象的配置信息,设置到bean也就是DispatcherServlet 实例对应的属性中。
            bw.setPropertyValues(pvs, true);
        }
        catch(BeansException ex)
        {
            logger.error("Failed to set bean properties on servlet '" + getServletName() + "'", ex);
            throw ex;
        }
        initServletBean();
        if(logger.isDebugEnabled())
            logger.debug("Servlet '" + getServletName() + "' configured successfully");
    }




private static class ServletConfigPropertyValues extends MutablePropertyValues
    {

        public ServletConfigPropertyValues(ServletConfig config, Set requiredProperties)
            throws ServletException
        {
            Set missingProps = requiredProperties == null || requiredProperties.isEmpty() ? null : ((Set) (new HashSet(requiredProperties)));
//获取DispatcherServlet 在web.xml中的配置的所有<init-param>的名字
            Enumeration en = config.getInitParameterNames();
            do
            {
                if(!en.hasMoreElements())
                    break;
                String property = (String)en.nextElement();
//获取对应名字的值
                Object value = config.getInitParameter(property);
                addPropertyValue(new PropertyValue(property, value));
                if(missingProps != null)
                    missingProps.remove(property);
            } while(true);
            if(missingProps != null && missingProps.size() > 0)
                throw new ServletException("Initialization from ServletConfig for servlet '" + config.getServletName() + "' failed; the following required properties were missing: " + StringUtils.collectionToDelimitedString(missingProps, ", "));
            else
                return;
        }
    }



======================================================================
如果忽略contextConfigLocation此设定,则默认为“/WEB-INF/<servlet name>-servlet.xml”,其中<servlet name>以Servlet 名替换

HttpServletBean 中 init方法中:
initServletBean()方法有子类FrameworkServlet重写
在FrameworkServlet的initServletBean()方法中,
this.webApplicationContext = initWebApplicationContext();
完成DispatcherServlet 使用的webApplicationContext 的创建和初始化。
具体创建由FrameworkServlet的:
protected WebApplicationContext createWebApplicationContext(ApplicationContext parent) 方法实现,
在方法最后调用wac.refresh();初始化完成资源文件定位,解析配置文件生成Document对象,从这个对象中解析各个bean定义生成beanDefinition对象,最后注册到该WebApplicationContext 容器中

在AbstractApplicationContext中提供了refresh()方法的实现。。。。。

在XmlWebApplicationContext中:
protected void loadBeanDefinitions(XmlBeanDefinitionReader reader) throws IOException {
    String[] configLocations = getConfigLocations();
       if (configLocations != null) {
	for (String configLocation : configLocations) {
            reader.loadBeanDefinitions(configLocation);
			}
		}
	}


getConfigLocations()获取配置文件的位置,实际调用了父类AbstractRefreshableConfigApplicationContext
中的:

protected String[] getConfigLocations() {
return (this.configLocations != null ? this.configLocations : getDefaultConfigLocations());
	}


如果configLocations 已经有值就返回,没有调用getDefaultConfigLocations()方法获取默认的位置;

而getDefaultConfigLocations()方法由子类XmlWebApplicationContext重写:


protected String[] getDefaultConfigLocations() {
   if (getNamespace() != null) {
 return new String[] {DEFAULT_CONFIG_LOCATION_PREFIX + getNamespace() + DEFAULT_CONFIG_LOCATION_SUFFIX};
		}
    else {
return new String[] {DEFAULT_CONFIG_LOCATION};
		}
	}

DEFAULT_CONFIG_LOCATION_PREFIX + getNamespace()+DEFAULT_CONFIG_LOCATION_SUFFIX =
/WEB-INF/<servlet name>-servlet.xml







分享到:
评论

相关推荐

    spring MVC配置详解

    Spring MVC 是一个基于 DispatcherServlet 的 MVC 框架,它是当前主流的 Web 框架之一。要想灵活运用 Spring MVC 来应对大多数的 Web 开发,就必须要掌握它的配置及原理。 一、Spring MVC 环境搭建 1. jar 包引入 ...

    Spring MVC 简单Demo

    这个"Spring MVC 简单Demo"旨在帮助初学者理解如何设置和运行一个基本的Spring MVC项目。下面,我们将深入探讨Spring MVC的核心概念、工作原理以及如何创建一个简单的示例。 1. **Spring MVC 概述** Spring MVC是...

    Spring MVC源码深度剖析开源架构源码2021.pdf

    在web.xml文件中配置了DispatcherServlet,这是Spring MVC的前端控制器,负责接收所有请求并将其分发给相应的处理程序。从提供的部分内容中,我们看到了如下配置: ```xml &lt;servlet-name&gt;lgoumvc ***.mvc...

    Spring MVC学习指南

    这里的 `&lt;servlet&gt;` 定义了 DispatcherServlet,它是 Spring MVC 的核心组件,负责处理所有的请求。`&lt;url-pattern&gt;` 配置了所有以 `.do` 结尾的 URL 都会被转发给 DispatcherServlet 处理。 ##### 3.3 Spring 配置...

    spring 与 spring mvc 整合 配置讨论

    2. **配置文件**:在`web.xml`中配置DispatcherServlet,指定Spring MVC的配置文件路径,如: ```xml &lt;servlet-name&gt;dispatcher &lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet ...

    Spring MVC 入门实例

    首先, 我需要在你心里建立起 Spring MVC 的基本概念. 基于 Spring 的 Web 应用程序接收到 http://localhost:8080/hello.do(事实上请求路径是 /hello.do) 的请求后, Spring 将这个请求交给一个名为 helloController ...

    spring mvc项目创建

    4. **配置 DispatcherServlet**:在 `web.xml` 文件中,配置 Spring MVC 的前端控制器 `DispatcherServlet`,并指定配置文件的位置。例如: ```xml &lt;servlet-name&gt;dispatcher &lt;servlet-class&gt;org.spring...

    spring MVC框架搭建

    &lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet &lt;param-name&gt;contextConfigLocation &lt;param-value&gt;/WEB-INF/spring-servlet.xml &lt;load-on-startup&gt;1 &lt;servlet-name&gt;spring *.do ...

    最新maven搭建的Spring mvc的demo

    2. **配置web.xml**:这是Servlet容器(如Tomcat)的部署描述符,用于设置Spring MVC的DispatcherServlet和ContextLoaderListener。例如: ```xml &lt;servlet-name&gt;dispatcher &lt;servlet-class&gt;org.spring...

    Spring MVC框架实例

    **Spring MVC 框架实例详解** Spring MVC 是 Spring 框架的重要组成部分,它是一个用于构建 Web 应用程序的 Model-View-Controller (MVC) 模型的实现。在基于 Spring 2.5 的项目中,XML 配置是主要的配置方式,相比...

    IDEA 搭建Spring MVC环境示例1

    在`src/main/webapp/WEB-INF`目录下创建`web.xml`文件,配置Spring MVC的核心组件`DispatcherServlet`: ```xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=...

    spring MVC配置,六步简单搞定

    这篇博客“spring MVC配置,六步简单搞定”可能介绍了如何快速且有效地设置Spring MVC项目。下面将详细阐述Spring MVC配置的六个关键步骤,以及与之相关的知识点。 **步骤1:引入Spring MVC依赖** 在开始Spring MVC...

    spring mvc 实例

    这里`contextConfigLocation`指定Spring MVC的配置文件位置,`url-pattern`定义了`DispatcherServlet`拦截的URL模式。 **Spring MVC 示例** 学习Spring MVC通常从创建“Hello World”应用程序开始,接着可以逐步...

    spring3.0 mvc中文实例教程

    这里,`contextConfigLocation`参数指定了Spring MVC配置文件的位置,`url-pattern`定义了哪些URL会被DispatcherServlet处理。 【系列教程概览】 本系列教程包括多个部分,从基础到高级,涵盖了Spring 3.0 MVC的...

    spring MVC测试实例

    配置文件通常位于WEB-INF目录下,例如:`&lt;contextConfigLocation&gt;`标签可以设置为`/WEB-INF/spring-servlet.xml`。 在`spring-servlet.xml`配置文件中,你需要配置Spring MVC的组件,如视图解析器(ViewResolver)...

    Spring_MVC_实战教程

    - **Servlet配置**:在`web.xml`中配置`DispatcherServlet`,并设置`contextConfigLocation`来指定Spring配置文件的位置。 - **请求映射**:通过`&lt;servlet-mapping&gt;`配置,将所有`.do`结尾的请求路由到`...

    使用maven简单搭建Spring mvc + redis缓存

    在`web.xml`中,我们需要定义Spring MVC的DispatcherServlet,并设置对应的ContextLoaderListener,以便加载Spring的配置文件: ```xml &lt;param-name&gt;contextConfigLocation &lt;param-value&gt;/WEB-INF/spring/...

    Spring MVC实战系列教程(1)--Hello Spring MVC

    Spring MVC的核心组件包括DispatcherServlet、HandlerMapping、ViewResolver和Controller。DispatcherServlet作为前端控制器,接收所有HTTP请求并分发到相应的处理器。HandlerMapping负责将请求映射到对应的...

    spring mvc的配置文件详解

    Spring MVC 的核心组件之一就是 DispatcherServlet,它作为整个框架的入口,负责处理所有进入 Spring Web 应用程序的请求。为了使 DispatcherServlet 正常工作,我们需要在 web.xml 文件中对其进行注册。 ##### ...

    SPRING MVC配置过程

    SPRING MVC 是一个基于 DispatcherServlet 的 MVC 框架,每一个请求最先访问的都是 DispatcherServlet,DispatcherServlet 负责转发每一个 Request 请求给相应的 Handler,Handler 处理以后再返回相应的视图(View)和...

Global site tag (gtag.js) - Google Analytics