一、web.xml是什么?
首先 web.xml 是java web 项目的一个重要的配置文件,但是web.xml文件并不是Java web工程必须的。
web.xml文件是用来配置:欢迎页、servlet、filter等的。当你的web工程没用到这些时,你可以不用web.xml文件来配置你的web工程。
所在位置 项目名/web/WEB-INFO/web.xml,如下图所示
web.xml能做的事情:
其实,web.xml的模式(Schema)文件中定义了多少种标签元素,web.xml中就可以出现它的模式文件所定义的标签元素,它就能拥有定义出来的那些功能。
web.xml的模式文件是由Sun公司定义的,每个web.xml文件的根元素<web-app>中,都必须标明这个web.xml使用的是哪个模式文件。如:
web.xml 配置文件 具体的内容
二、Web.xml详解:
1.web.xml加载过程(步骤)
首先简单讲一下,web.xml的加载过程。当启动一个WEB项目时,容器包括(JBoss、Tomcat等)首先会读取项目web.xml配置文件里的配置,当这一步骤没有出错并且完成之后,项目才能正常地被启动起来。
1. 启动WEB项目的时候,容器首先会去它的配置文件web.xml读取两个节点: <listener></listener>和<context-param></context-param>。
2. 紧接着,容器创建一个ServletContext(application),这个WEB项目所有部分都将共享这个上下文。
3. 容器以<context-param></context-param>的name作为键,value作为值,将其转化为键值对,存入ServletContext。
4. 容器创建<listener></listener>中的类实例,根据配置的class类路径<listener-class>来创建监听,在监听中会有contextInitialized(ServletContextEvent args)初始化方法,启动Web应用时,系统调用Listener的该方法,在这个方法中获得:
- <span style="font-family:Times New Roman;">ServletContextapplication=ServletContextEvent.getServletContext();</span>
context-param的值就是application.getInitParameter("context-param的键");得到这个context-param的值之后,你就可以做一些操作了。
5. 举例:你可能想在项目启动之前就打开数据库,那么这里就可以在<context-param>中设置数据库的连接方式(驱动、url、user、password),在监听类中初始化数据库的连接。这个监听是自己写的一个类,除了初始化方法,它还有销毁方法,用于关闭应用前释放资源。比如:说数据库连接的关闭,此时,调用contextDestroyed(ServletContextEvent args),关闭Web应用时,系统调用Listener的该方法。
6. 接着,容器会读取<filter></filter>,根据指定的类路径来实例化过滤器。
7. 以上都是在WEB项目还没有完全启动起来的时候就已经完成了的工作。如果系统中有Servlet,则Servlet是在第一次发起请求的时候被实例化的,而且一般不会被容器销毁,它可以服务于多个用户的请求。所以,Servlet的初始化都要比上面提到的那几个要迟。
8. 总的来说,web.xml的加载顺序是:<context-param>-><listener>-><filter>-><servlet>。其中,如果web.xml中出现了相同的元素,则按照在配置文件中出现的先后顺序来加载。
9. 对于某类元素而言,与它们出现的顺序是有关的。以<filter>为例,web.xml中当然可以定义多个<filter>,与<filter>相关的一个元素是<filter-mapping>,注意,对于拥有相同<filter-name>的<filter>和<filter-mapping>元素而言,<filter-mapping>必须出现在<filter>之后,否则当解析到<filter-mapping>时,它所对应的<filter-name>还未定义。web容器启动初始化每个<filter>时,按照<filter>出现的顺序来初始化的,当请求资源匹配多个<filter-mapping>时,<filter>拦截资源是按照<filter-mapping>元素出现的顺序来依次调用doFilter()方法的。<servlet>同<filter>类似,此处不再赘述。
2.web.xml标签详解
1. XML文档有效性检查
- <span style="font-family:Times New Roman;"><!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ></span>
这段代码指定文件类型定义(DTD),可以通过它检查XML文档的有效性。下面显示的<!DOCTYPE>元素有几个特性,这些特性告诉我们关于DTD的信息:
- web-app定义该文档(部署描述符,不是DTD文件)的根元素
- PUBLIC意味着DTD文件可以被公开使用
- -//Sun Microsystems, Inc.//DTD Web Application 2.3//EN”意味着DTD由Sun Microsystems, Inc.维护。该信息也表示它描述的文档类型是DTD Web Application 2.3,而且DTD是用英文书写的。
- URL"http://java.sun.com/dtd/web-app_2_3.dtd"表示D文件的位置。
2. <web-app></web-app>
部署描述符的根元素是<web-app>。DTD文件规定<web-app>元素的子元素的语法如下:
- <span style="font-family:Times New Roman;"><!ELEMENT web-app (icon?, display-name?, description?,distributable?, context-param*, filter*, filter-mapping*,listener*, servlet*, servlet-mapping*, session-config?,mime-mapping*, welcome-file-list?,error-page*, taglib*, resource-env-ref*, resource-ref*,security-constraint*, login-config?, security-role*,env-entry*,ejb-ref*, ejb-local-ref*)> </span>
正如您所看到的,这个元素含有23个子元素,而且子元素都是可选的。问号(?)表示子元素是可选的,而且只能出现一次。星号(*)表示子元素可在部署描述符中出现零次或多次。有些子元素还可以有它们自己的子元素。web.xml文件中<web-app>元素声明的是下面每个子元素的声明。下面讲述部署描述符中可能包含的所有子元素。
注意:在Servlet 2.3中,子元素必须按照DTD文件语法描述中指定的顺序出现。比如:如果部署描述符中的<web-app>元素有<servlet>和<servlet-mapping>两个子元素,则<servlet>子元素必须出现在<servlet-mapping>子元素之前。在Servlet2.4中,顺序并不重要。
3. <display-name></display-name>
<display-name>test-hwp-web-application</display-name>定义了web应用的名称,可以在http://localhost:8080/manager/html中显示。如下所示:
![](https://i-blog.csdnimg.cn/blog_migrate/46246d4aad2b3dbd880cf969ebb7388d.png)
4. <distributable/>
<distributable/>可以使用distributable元素来告诉servlet/JSP容器,Web容器中部署的应用程序适合在分布式环境下运行。
5. <context-param></context-param>
-
<!--****************************上下文初始化参数***************************-->
-
<context-param>
-
<param-name>webAppRootKey</param-name>
-
<param-value>business.root</param-value>
-
</context-param>
-
<!-- spring config -->
-
<context-param>
-
<param-name>contextConfigLocation</param-name>
-
<param-value>/WEB-INF/spring-configuration/*.xml</param-value>
-
</context-param>
5.1<context-param>解释:
5.2 什么情况下使用,为什么使用<context-param>:
5.3 Spring配置文件:
-
<!-- spring config -->
-
<context-param>
-
<param-name>contextConfigLocation</param-name>
-
<param-value>/WEB-INF/spring-configuration/*.xml</param-value>
-
</context-param>
-
<listener>
-
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
-
</listener>
![](https://i-blog.csdnimg.cn/blog_migrate/e29779e8c083b6a833f44df48b9923f3.png)
-
<!-- 应用路径 -->
-
<context-param>
-
<param-name>webAppRootKey</param-name>
-
<param-value>webapp.root</param-value>
-
</context-param>
-
<!—business-client应用路径 -->
-
<context-param>
-
<param-name>webAppRootKey</param-name>
-
<param-value> business.root </param-value>
-
</context-param>
-
<!—public-base应用路径 -->
-
<context-param>
-
<param-name>webAppRootKey</param-name>
-
<param-value> pubbase.root</param-value>
-
</context-param>
5.4 多个配置文件交叉引用处理:
-
<context-param>
-
<param-name>contextConfigLocation </param-name>
-
<param-value> applicationContext-database.xml,applicationContext.xml</param-value>
-
<context-param>
-
<bean id="userService" class="domain.user.service.impl.UserServiceImpl">
-
<property name="dbbean">
-
<ref bean="dbBean"/>
-
</property>
-
</bean>
5.5 在不同环境下如何获取:范例:
-
<context-param>
-
<param-name>param_name</param-name>
-
<param-value>param_value</param-value>
-
</context-param>
6. <session-config></session-config>
-
<!-- Set timeout to 120 minutes -->
-
<session-config>
-
<session-timeout>120</session-timeout>
-
</session-config>
7. <listener></listener>
-
<!--****************************监听器配置*********************************-->
-
<!-- Spring的log4j监听器 -->
-
<listener>
-
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
-
</listener>
-
<listener>
-
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
-
</listener>
-
<!-- 与CAS Single Sign Out Filter配合,注销登录信息 -->
-
<listener>
-
<listener-class>com.yonyou.mcloud.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
-
</listener>
7.1 Listener介绍:
(1). ServletContextListener:用于监听Web应用的启动和关闭;
(2). ServletContextAttributeListener:用于监听ServletContext范围(application)内属性的改变;
(3). ServletRequestListener:用于监听用户的请求;
(4). ServletRequestAttributeListener:用于监听ServletRequest范围(request)内属性的改变;
(5). HttpSessionListener:用于监听用户session的开始和结束;
(6). HttpSessionAttributeListener:用于监听HttpSession范围(session)内属性的改变。
<listener>主要用于监听Web应用事件,其中有两个比较重要的WEB应用事件:应用的启动和停止(starting up or shutting down)和Session的创建和失效(created or destroyed)。应用启动事件发生在应用第一次被Servlet容器装载和启动的时候;停止事件发生在Web应用停止的时候。Session创建事件发生在每次一个新的session创建的时候,类似地Session失效事件发生在每次一个Session失效的时候。为了使用这些Web应用事件做些有用的事情,我们必须创建和使用一些特殊的“监听类”。它们是实现了以下两个接口中任何一个接口的简单java类:javax.servlet.ServletContextListener或javax.servlet.http.HttpSessionListener,如果想让你的类监听应用的启动和停止事件,你就得实现ServletContextListener接口;想让你的类去监听Session的创建和失效事件,那你就得实现HttpSessionListener接口。
7.2 Listener配置:
-
<listener>
-
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
-
</listener>
-
<servlet>
-
<servlet-name>context</servlet-narne>
-
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
-
<load-on-startup>1</load-on-startup>
-
</servlet>
-
<listener>
-
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
-
</listener>
8. <filter></filter>
-
<!--****************************过滤器配置*********************************-->
-
<!-- 字符集过滤器 -->
-
<filter>
-
<filter-name>CharacterEncodingFilter</filter-name>
-
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
-
<init-param>
-
<param-name>encoding</param-name>
-
<param-value>UTF-8</param-value>
-
</init-param>
-
<init-param>
-
<param-name>forceEncoding</param-name>
-
<param-value>true</param-value>
-
</init-param>
-
</filter>
-
<!-- 单点登出过滤器 -->
-
<filter>
-
<filter-name>CAS Single Sign Out Filter</filter-name>
-
<filter-class>com.yonyou.mcloud.cas.client.session.SingleSignOutFilter</filter-class>
-
</filter>
-
<!-- 认证过滤器 -->
-
<filter>
-
<filter-name>CAS Authentication Filter</filter-name>
-
<filter-class>com.yonyou.mcloud.cas.client.authentication.ExpandAuthenticationFilter</filter-class>
-
<init-param>
-
<param-name>casServerLoginUrl</param-name>
-
<param-value>https://dev.yonyou.com:443/sso-server/login</param-value>
-
</init-param>
-
<init-param>
-
<!--这里的server是服务端的IP -->
-
<param-name>serverName</param-name>
-
<param-value>http://10.1.215.40:80</param-value>
-
</init-param>
-
</filter>
-
<!-- 验证ST/PT过滤器 -->
-
<filter>
-
<filter-name>CAS Validation Filter</filter-name>
-
<filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
-
<init-param>
-
<param-name>casServerUrlPrefix</param-name>
-
<param-value>https://dev.yonyou.com:443/sso-server</param-value>
-
</init-param>
-
<init-param>
-
<param-name>serverName</param-name>
-
<param-value>http://10.1.215.40:80</param-value>
-
</init-param>
-
<init-param>
-
<param-name>proxyCallbackUrl</param-name>
-
<param-value>https://dev.yonyou.com:443/business/proxyCallback</param-value>
-
</init-param>
-
<init-param>
-
<param-name>proxyReceptorUrl</param-name>
-
<param-value>/proxyCallback</param-value>
-
</init-param>
-
<init-param>
-
<param-name>proxyGrantingTicketStorageClass</param-name>
-
<param-value>com.yonyou.mcloud.cas.client.proxy.MemcachedBackedProxyGrantingTicketStorageImpl</param-value>
-
</init-param>
-
<!-- 解决中文问题 -->
-
<init-param>
-
<param-name>encoding</param-name>
-
<param-value>UTF-8</param-value>
-
</init-param>
-
</filter>
-
<filter>
-
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
-
<filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
-
</filter>
-
<filter>
-
<filter-name>CAS Assertion Thread Local Filter</filter-name>
-
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
-
</filter>
-
<filter>
-
<filter-name>NoCache Filter</filter-name>
-
<filter-class>com.yonyou.mcloud.cas.client.authentication.NoCacheFilter</filter-class>
-
</filter>
-
<!--****************************映射关系配置********************************-->
-
<filter-mapping>
-
<filter-name>CharacterEncodingFilter</filter-name>
-
<url-pattern>/*</url-pattern>
-
</filter-mapping>
-
<filter-mapping>
-
<filter-name>NoCache Filter</filter-name>
-
<url-pattern>/*</url-pattern>
-
</filter-mapping>
-
<filter-mapping>
-
<filter-name>CAS Single Sign Out Filter</filter-name>
-
<url-pattern>/*</url-pattern>
-
</filter-mapping>
-
<filter-mapping>
-
<filter-name>CAS Validation Filter</filter-name>
-
<url-pattern>/proxyCallback</url-pattern>
-
</filter-mapping>
-
<filter-mapping>
-
<filter-name>CAS Authentication Filter</filter-name>
-
<url-pattern>/*</url-pattern>
-
</filter-mapping>
-
<filter-mapping>
-
<filter-name>CAS Validation Filter</filter-name>
-
<url-pattern>/*</url-pattern>
-
</filter-mapping>
-
<filter-mapping>
-
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
-
<url-pattern>/*</url-pattern>
-
</filter-mapping>
-
<filter-mapping>
-
<filter-name>CAS Assertion Thread Local Filter</filter-name>
-
<url-pattern>/*</url-pattern>
-
</filter-mapping>
(1) 创建Filter处理类
(2) Web.xml文件中配置Filter
Filter必须实现javax.servlet.Filter接口,在该接口中定义了三个方法:
(1) void init(FilterConfig config):用于完成Filter的初始化。FilteConfig用于访问Filter的配置信息。
(2) void destroy():用于Filter销毁前,完成某些资源的回收。
(3) void doFilter(ServletRequest request,ServletResponse response,FilterChain chain):实现过滤功能的核心方法,该方法就是对每个请求及响应增加额外的处理。该方法实现对用户请求request进行预处理,也可以实现对服务器响应response进行后处理---它们的分界线为是否调用了chain.doFilter(request,response),执行该方法之前,即对用户请求request进行预处理,执行该方法之后,即对服务器响应response进行后处理。
8.2 Filter配置:
Filter可认为是Servlet的“增强版”,因此Filter配置与Servlet的配置非常相似,需要配置两部分:配置Filter名称和Filter拦截器URL模式。区别在于Servlet通常只配置一个URL,而Filter可以同时配置多个请求的URL。配置Filter有两种方式:(1). 在Filter类中通过Annotation进行配置。
我们使用的是web.xml这种配置方式,下面重点介绍<filter>内包含的一些元素。
<filter>用于指定Web容器中的过滤器,可包含<filter-name>、<filter-class>、<init-param>、<icon>、<display-name>、<description>。
8.21 字符集过滤器
-
<filter>
-
<filter-name>CharacterEncodingFilter</filter-name>
-
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
-
<init-param>
-
<param-name>encoding</param-name>
-
<param-value>UTF-8</param-value>
-
</init-param>
-
<init-param>
-
<param-name>forceEncoding</param-name>
-
<param-value>true</param-value>
-
</init-param>
-
</filter>
-
<filter-mapping>
-
<filter-name>CharacterEncodingFilter</filter-name>
-
<url-pattern>/*</url-pattern>
-
</filter-mapping>
8.22 缓存控制
-
<filter>
-
<filter-name>NoCache Filter</filter-name>
-
<filter-class>com.yonyou.mcloud.cas.client.authentication.NoCacheFilter</filter-class>
-
</filter>
-
<filter-mapping>
-
<filter-name>NoCache Filter</filter-name>
-
<!—表示对URL全部过滤-->
-
<url-pattern>/*</url-pattern>
-
</filter-mapping>
8.23 登录认证
-
<!-- 认证过滤器 -->
-
<filter>
-
<filter-name>CAS Authentication Filter</filter-name>
-
<filter-class>com.yonyou.mcloud.cas.client.authentication.ExpandAuthenticationFilter</filter-class>
-
<init-param>
-
<param-name>casServerLoginUrl</param-name>
-
<param-value>https://dev.yonyou.com:443/sso-server/login</param-value>
-
</init-param>
-
<init-param>
-
<!--这里的server是服务端的IP -->
-
<param-name>serverName</param-name>
-
<param-value>http://10.1.215.40:80</param-value>
-
</init-param>
-
</filter>
-
<filter-mapping>
-
<filter-name>CAS Authentication Filter</filter-name>
-
<url-pattern>/*</url-pattern>
-
</filter-mapping>
8.24 单点登出
-
<filter>
-
<filter-name>CAS Single Sign Out Filter</filter-name>
-
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
-
</filter>
-
<filter-mapping>
-
<filter-name>CAS Single Sign Out Filter</filter-name>
-
<url-pattern>/*</url-pattern>
-
</filter-mapping>
-
<listener>
-
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
-
</listener>
8.25 封装request
-
<filter>
-
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
-
<filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
-
</filter>
-
<filter-mapping>
-
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
-
<url-pattern>/*</url-pattern>
-
</filter-mapping>
8.26 存放Assertion到ThreadLocal中
-
<filter>
-
<filter-name>CAS Assertion Thread Local Filter</filter-name>
-
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
-
</filter>
-
<filter-mapping>
-
<filter-name>CAS Assertion Thread Local Filter</filter-name>
-
<url-pattern>/*</url-pattern>
-
</filter-mapping>
8.27 禁用浏览器缓存
-
<filter>
-
<filter-name>NoCache Filter</filter-name>
-
<filter-class>com.yonyou.mcloud.cas.client.authentication.NoCacheFilter</filter-class>
-
</filter>
-
<filter-mapping>
-
<filter-name>NoCache Filter</filter-name>
-
<url-pattern>/*</url-pattern>
-
</filter-mapping>
8.28 CAS Client向CAS Server进行ticket验证
-
<!-- 验证ST/PT过滤器 -->
-
<filter>
-
<filter-name>CAS Validation Filter</filter-name>
-
<filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
-
<init-param>
-
<param-name>casServerUrlPrefix</param-name>
-
<param-value>https://dev.yonyou.com:443/sso-server</param-value>
-
</init-param>
-
<init-param>
-
<param-name>serverName</param-name>
-
<param-value>http://10.1.215.40:80</param-value>
-
</init-param>
-
<init-param>
-
<param-name>proxyCallbackUrl</param-name>
-
<param-value>https://dev.yonyou.com:443/business/proxyCallback</param-value>
-
</init-param>
-
<init-param>
-
<param-name>proxyReceptorUrl</param-name>
-
<param-value>/proxyCallback</param-value>
-
</init-param>
-
<init-param>
-
<param-name>proxyGrantingTicketStorageClass</param-name>
-
<param-value>com.yonyou.mcloud.cas.client.proxy.MemcachedBackedProxyGrantingTicketStorageImpl</param-value>
-
</init-param>
-
<!-- 解决中文问题 -->
-
<init-param>
-
<param-name>encoding</param-name>
-
<param-value>UTF-8</param-value>
-
</init-param>
-
</filter>
-
<filter-mapping>
-
<filter-name>CAS Validation Filter</filter-name>
-
<url-pattern>/proxyCallback</url-pattern>
-
</filter-mapping>
-
<filter-mapping>
-
<filter-name>CAS Validation Filter</filter-name>
-
<url-pattern>/*</url-pattern>
-
</filter-mapping>
9. <servlet></servlet>
-
<!--****************************servlet</span><span style="font-family:SimSun;">配置</span><span style="font-family:Times New Roman;">******************************-->
-
<!-- Spring view</span><span style="font-family:SimSun;">分发器 对所有的请求都由business对应的类来控制转发</span><span style="font-family:Times New Roman;"> -->
-
<servlet>
-
<servlet-name>business</servlet-name>
-
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
-
<init-param>
-
<param-name>publishContext</param-name>
-
<param-value>false</param-value>
-
</init-param>
-
<load-on-startup>1</load-on-startup>
-
</servlet>
-
<!-- </span><span style="font-family:SimSun;">用户登出</span><span style="font-family:Times New Roman;"> -->
-
<servlet>
-
<servlet-name>LogOutServlet</servlet-name>
-
<servlet-class>com.yonyou.mcloud.cas.web.servlet.LogOutServlet</servlet-class>
-
<init-param>
-
<param-name>serverLogoutUrl</param-name>
-
<param-value>https://dev.yonyou.com:443/sso-server/logout</param-value>
-
</init-param>
-
<init-param>
-
<param-name>serverName</param-name>
-
<param-value>http://10.1.215.40:80/business/</param-value>
-
</init-param>
-
</servlet>
-
<!--****************************servlet</span><span style="font-family:SimSun;">映射关系配置</span><span style="font-family:Times New Roman;">*************************-->
-
<servlet-mapping>
-
<servlet-name>LogOutServlet</servlet-name>
-
<url-pattern>/logout</url-pattern>
-
</servlet-mapping>
-
<servlet-mapping>
-
<servlet-name>business</servlet-name>
-
<url-pattern>/</url-pattern>
-
</servlet-mapping>
9.1 Servlet介绍:
Servlet通常称为服务器端小程序,是运行在服务器端的程序,用于处理及响应客户的请求。Servlet是个特殊的java类,继承于HttpServlet。客户端通常只有GET和POST两种请求方式,Servlet为了响应则两种请求,必须重写doGet()和doPost()方法。大部分时候,Servlet对于所有的请求响应都是完全一样的,此时只需要重写service()方法即可响应客户端的所有请求。9.2 Servlet配置:
为了让Servlet能响应用户请求,还必须将Servlet配置在web应用中,配置Servlet需要修改web.xml文件。从Servlet3.0开始,配置Servlet有两种方式:9.3DispatcherServlet在web.xml中的配置:
-
<!-- Spring view分发器 对所有的请求都由business对应的类来控制转发 -->
-
<servlet>
-
<servlet-name>business</servlet-name>
-
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
-
<init-param>
-
<param-name>publishContext</param-name>
-
<param-value>false</param-value>
-
</init-param>
-
<load-on-startup>1</load-on-startup>
-
</servlet>
![](https://i-blog.csdnimg.cn/blog_migrate/62ecdcafcb8cae6f615ba68849d96384.png)
(2).在public-base-server工程中,通过第2种方式进行配置,把spring-servlet.xml放到src/main/resources/config/spring-servlet.xml,则需要在配置DispatcherServlet时指定<init-param>标签。具体代码如下:
-
<servlet>
-
<servlet-name>spring</servlet-name>
-
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
-
<init-param>
-
<param-name>publishContext</param-name>
-
<param-value>false</param-value>
-
</init-param>
-
<init-param>
-
<param-name>contextConfigLocation</param-name>
-
<param-value>classpath:config/spring-servlet.xml</param-value>
-
</init-param>
-
<load-on-startup>1</load-on-startup>
-
</servlet>
![](https://i-blog.csdnimg.cn/blog_migrate/949c9b09e397e9afb0d96c242f137a84.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ee622b16c4ca21de17d9dc090de19f7a.png)
![](https://i-blog.csdnimg.cn/blog_migrate/641195f449e67e87ff8485c816d6ddb8.png)
9.4 ContextLoaderListener和DispatcherServlet初始化上下文关系和区别:
![](https://i-blog.csdnimg.cn/blog_migrate/5696a435dcf71eb3aef2da207822d28f.png)
10. <welcome-file-list></welcome-file-list>
-
<!-- welcome page -->
-
<welcome-file-list>
-
<welcome-file>index.html</welcome-file>
-
</welcome-file-list>
<welcome-file-list>包含一个子元素<welcome-file>,<welcome-file>用来指定首页文件名称。<welcome-file-list>元素可以包含一个或多个<welcome-file>子元素。如果在第一个<welcome-file>元素中没有找到指定的文件,Web容器就会尝试显示第二个,以此类推。
11. 参考文献:
https://blog.csdn.net/ahou2468/article/details/79015251