概述
web.xml作用是用来初始化配置信息的。
比如:Welcome页面、servlet、servlet-mapping、filter、listener、启动加载级别等
web.xml加载过程(步骤)
当启动一个WEB项目的时候,容器(比如Tomcat等),首先会读取项目web.xml配置文件里的配置,如果这一步骤不出错且完成之后,项目才能正常启动起来
1、在启动Web项目时,容器(如Tomcat)会首先读web.xml配置文件中的两个节点<listener></listener>
和 <context-param></context-param>
。
2、接着容器会创建一个ServletContext(上下文),应用范围内即整个WEB项目都能够使用这个上下文。
3、接着容器会将<context-param>
转化为键值对,以<context-param>
的name为键,value为值,存入ServletContext。
4、容器根据配置的class类路径创建中的类实例,即创建监听(备注:listener定义的的类型是自定义的类但必须要继承ServletContextListener)。
5、监听器的类中会有一个contextInitialized(servletContextEvent event)初始化的方法,在这个方法中可以通过event.getServletContext().getInitParameter(“context-param的键”)来获得context-param设定的值,得到这个context-param的值之后,你就可以做一些操作了。在这个类中还必须有一个contextDestroyed(ServletContextEvent event)销毁方法,用于关闭资源应用前释放资源。
举例:如果你想在项目启动之前就打开数据库,就可以在<context-param>
中设置数据库的连接方式(驱动、url、user、password),在监听类中初始化数据库的连接。这个监听是自己写的一个类,除了初始化方法,它应该还要有销毁方法,用于关闭应用前释放资源。就比如说这个数据库连接的关闭,此时调用contextDestroyed(servletContextEvent event),关闭Web应用时,系统调用Listener的该方法。
6、接着读取<filter></filter>
,根据指定的类路径来实例化过滤器。
7、以上都是Web项目还没有完全启动起来的时候就已经完成了的工作。如果系统中有Servlet,则Servlet是在第一次发起请求的时候被实例化的,而且一般不会被容器销毁,它可以服务于多个用户的请求。所以,Servlet的初始化都要比上面提到的晚。
总结上面的步骤简化为: web.xml文件加载 >> context-param >> listener >> filter >> servlet
对于某类元素而言,与它们出场的顺序有关
以<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>类似
举例
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Archetype Created Web Application</display-name>
<!--字符集过滤器-->
<filter>
<filter-name>encodingFilter</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>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--springMVC-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--Spring容器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--指定项目阶段的上下文参数,上下文参数提供web应用程序所需的配置信息。 --->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--springsecurity-->
<!--Spring Security过滤器链,注意过滤器名称必须叫springSecurityFilterChain-->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
指定登录页面位置的welcome-file-list元素(关于欢迎页面)访问一个网站时,默认看到的第一个页面就叫欢迎页,一般情况下是由首页来充当欢迎页的。一般情况下,我们会在web.xml中指定欢迎页。但 web.xml并不是一个Web的必要文件,没有web.xml,网站仍然是可以正常工作的。只不过网站的功能复杂起来后,web.xml的确有非常大用处,所以,默认创建的动态web工程在WEB-INF文件夹下面都有一个web.xml文件
最后
以上就是灵巧蛋挞为你收集整理的JavaWeb项目 Web.xml文件详解(启动顺序)的全部内容,希望文章能够帮你解决JavaWeb项目 Web.xml文件详解(启动顺序)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复