`
thinkerAndThinker
  • 浏览: 285179 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

web.xml加载顺序

 
阅读更多

web.xml加载顺序

应用服务器启动时web.xml加载过程,至于这些节点在xml文件中的前后顺序没有关系,不过有些应用服务器,我曾碰到过的 websphere就严格要求web.xml的节点顺序,否则部署不成功,所以还是赞成按照web.xml标准格式写
content-param --> listener --> filter --> servlet

1、启动WEB项目的时候,应用服务器会去读它的配置文件web.xml.读两个节点:<listener></listener> 和 <context-param></context-param>   

2、紧接着,容器创建一个ServletContext(上下文),这个WEB项目所有部分都将共享这个上下文.

3、容器将<context-param></context-param>转化为键值对,并交给ServletContext.

4、容器创建<listener></listener>中的类实例,即创建监听.

5、在监听中会有contextInitialized(ServletContextEvent args)初始化方法,在这个方法中获得: 
 ServletContext = ServletContextEvent.getServletContext();
 context-param的值 = ServletContext.getInitParameter("context-param的键");    

6、得到这个context-param的值之后,你就可以做一些操作了.注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早.换句话说,这个时候,你对<context-param>中的键值做的操作,将在你的WEB项目完全启动之前被执行.如果想在项目启动之前就打开数据库,那么这里就可以在<context-param>中设置数据库的连接方式,在监听类中初始化数据库的连接,这个监听是自己写的一个类,除了初始化方法,它还有销毁方法.用于关闭应用前释放资源.比如说数据库连接的关闭.


对于某类配置节而言,与它们出现的顺序是有关的
以 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 类似,此处不再赘述。

比如filter 需要用到 bean ,但加载顺序是: 先加载filter 后加载spring,则filter中初始化操作中的bean为null;所以,如果过滤器中要使用到 bean,可以将spring 的加载 改成 Listener的方式 
 <listener>
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>

 

web.xml节点解析

根节点
1、 <web-app></web-app>

常用节点介绍
2、 <context-param />  用来设定web站台的环境参数
 它包含两个子元素:
 <param-name></param-name> 用来指定参数的名称
 <param-value></param-value> 用来设定参数值
 在此设定的参数,可以在servlet中用 getServletContext().getInitParameter("my_param") 来取得
 例子:
 <context-param>
  <param-name>log4jConfigLocation</param-name>
  <param-value>classpath*:/log4j.properties</param-value>
 </context-param>

3、 <listener /> 用来设定Listener接口
 它的主要子元素为
 <listener-class></listener-class> 定义Listener的类名称
 例子:
 <listener>
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>

4、 <filter />  是用来声明filter的相关设定
 <filter-name></filter-name> 这当然就是指定filter的名字
 <filter-class></filter-class> 这是用来定义filter的类的名称
 <init-param></init-param> 用来定义参数,它有两个子元素:
 <param-name></param-name> 用来指定参数的名称
 <param-value></param-value> 用来设定参数值
 例子:
 <filter>
  <filter-name>encodingFilter</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
   <param-name>encoding</param-name>
   <param-value>GBK</param-value>
  </init-param>
  <init-param>
   <param-name>forceEncoding</param-name>
   <param-value>true</param-value>
  </init-param>
 </filter>

5、 <servlet /> 用来声明一个servlet的数据,主要有以下子元素:
 <servlet-name></servlet-name> 指定servlet的名称
 <servlet-class></servlet-class> 指定servlet的类名称
 <jsp-file></jsp-file> 指定web站台中的某个JSP网页的完整路径
 <init-param></init-param> 用来定义参数,和前面的<init-param>差不多
 同样,与<servlet></servlet>一起使用的是
 <servlet-mapping></servlet-mapping> 用来定义servlet所对应的URL,包含两个子元素:
 <servlet-name></servlet-name> 指定servlet的名称
 <url-pattern></url-pattern> 指定servlet所对应的URL
 <servlet>
  <servlet-name>DemoServlet</servlet-name>
  <servlet-class>com.test.DemoServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>DemoServlet</servlet-name>
  <url-pattern>/demoServlet</url-pattern>
 </servlet-mapping>

基本节点:

6、 <description/> 是对站台的描述
 例子:<description>传道、授业、解惑</description> 

7、 <display-name/> 定义站台的名称
 例子:<display-name>我的站点</display-name>

8、 <icon> 
icon元素包含small-icon和large-icon两个子元素.用来指定web站台中小图标和大图标的路径. 
<small-icon>/路径/smallicon.gif</small-icon> 
small-icon元素应指向web站台中某个小图标的路径,大小为16 X 16 pixel,但是图象文件必须为GIF或JPEG格式,扩展名必须为:.gif或.jpg. 
<large-icon>/路径/largeicon-jpg</large-icon> 
large-icon元素应指向web站台中某个大图表路径,大小为32 X 32 pixel,但是图象文件必须为GIF或JPEG的格式,扩展名必须为; gif或jpg. 
例子: 
<icon> 
 <small-icon>/images/small.gif</small-icon> 
 <large-icon>/images/large.gir</large-icon> 
</icon>

9、 <distributable/> 是指定该站台是否可分布式处理

10、 <session-config/> 用来定义web站台中的session参数
 包含一个子元素:
 <session-timeout></session-timeout> 用来定义这个web站台所有session的有效期限,单位为 分钟

11、 <mime-mapping /> 定义某一个扩展名和某一个MIME Type做对应该
 包含两个子元素:
 <extension></extension> 扩展名的名称
 <mime-type></mime-type> MIME格式
 例子:
 <mime-mapping>
  <extension>doc</extension>  
  <mime-type>application/vnd.ms-word</mime-type>
 </mime-mapping>    
 <mime-mapping>
  <extension>xls</extension>
  <mime-type>application/vnd.ms-excel</mime-type>
 </mime-mapping>

12、 <error-page>
 <error-page>
     <error-code>500</error-code>
     <location>/message.jsp</location>
 </error-page>
 <error-page>
     <error-code>400</error-code>
     <location>/message.jsp</location>
 </error-page>
 <error-page>
     <error-code>403</error-code>
     <location>/message.jsp</location>
 </error-page>
 <error-page>
     <error-code>404</error-code>
     <location>/message.jsp</location>
 </error-page>
 <error-page>
     <error-code>502</error-code>
     <location>/index.jsp</location>
 </error-page>

13、 <jsp-config/>
 <jsp-config>
 <taglib>
 <taglib-uri>/struts-tags</taglib-uri>
 <taglib-location>/WEB-INF/struts-tags.tld</taglib-location>
 </taglib>
 <taglib>
 <taglib-uri>/struts-dojo-tags</taglib-uri>
 <taglib-location>/WEB-INF/struts-dojo-tags.tld</taglib-location>
 </taglib>
 <taglib>
 <taglib-uri>/s</taglib-uri>
 <taglib-location>/WEB-INF/struts-tags.tld</taglib-location>
 </taglib>
 </jsp-config>

14、 <welcome-file-list/>
 <welcome-file-list>
 <welcome-file>index.html</welcome-file>
 <welcome-file>index.htm</welcome-file>
 <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>

15、 <resource-ref></resource-ref> 定义利用JNDI取得站台可利用的资源
 有五个子元素:
 <description></description> 资源说明
 <rec-ref-name></rec-ref-name> 资源名称
 <res-type></res-type> 资源种类
 <res-auth></res-auth> 资源经由Application或Container来许可
 <res-sharing-scope></res-sharing-scope> 资源是否可以共享,有Shareable和Unshareable两个值,默认为Shareable

 比如,配置数据库连接池就可在此配置
 <resource-ref>
 <description>JNDI JDBC DataSource of shop</description>
 <res-ref-name>jdbc/sample_db</res-ref-name>
 <res-type>javax.sql.DataSource</res-type>
 <res-auth>Container</res-auth>
 </resource-ref>

还有其他元素如果想更为详细的了解它可以到http://java.sun.com/xml/ns/j2ee/web-mapp_2_4.xsd网页

分享到:
评论

相关推荐

    web.xml加载顺序与web.xml常用节点解析

    理解`web.xml`的加载顺序和各个节点的作用对于开发和维护高质量的Web应用至关重要。 1. **加载顺序**: - 当应用服务器启动并加载Web应用程序时,首先读取`web.xml`文件。 - 首先解析的是`&lt;context-param&gt;`节点,...

    Web.xml加载顺序[汇编].pdf

    《Web.xml加载顺序解析》 在Web应用开发中,`web.xml`是部署描述符,它定义了应用程序的行为和配置。了解`web.xml`的加载顺序对于优化和调试Web应用程序至关重要。本文将深入探讨`web.xml`的加载流程,以及各个元素...

    web.xml 中的listener、 filter、servlet 加载顺序及其详解.doc

    Web.xml 中的 listener、filter、servlet 加载顺序及其详解 在 Web 应用程序中,web.xml 文件扮演着非常重要的角色,它定义了 Web 应用的结构和配置。其中,listener、filter、servlet 是三个非常重要的概念,它们...

    Tomcat中用web.xml控制Web应用详解

    Tomcat 中 web.xml 文件是 Web 应用的核心配置文件,负责管理 Web 应用的生命周期、Servlet 的加载顺序、Filter 的配置等。下面对 web.xml 文件中的重要元素进行详细解释。 context-param 元素 context-param 元素...

    web.xml配置文件详解

    `web.xml`文件的最外层标签为`&lt;web-app&gt;`,所有的配置项都需要定义在这个标签内,并且遵循一定的顺序。以下是对`web.xml`主要配置项的详细介绍: #### 三、配置项详解 1. ****:该标签用于指定Web应用的显示名称。...

    javaweb项目中web.xml的作用

    web.xml文件的主要作用是用于初始化工程配置信息,例如welcome页面、filter、listener、servlet、servlet-mapping、启动加载级别等等。 web.xml文件的模式文件是由Sun公司定义的,每个web.xml文件的根元素为&lt;web-...

    web.xml文件中配置(servlet, spring, filter, listenr)的加载顺序

    ### web.xml文件中配置(servlet, spring, filter, listener)的加载顺序 在Java Web应用开发中,`web.xml`文件是整个Web应用程序的核心配置文件之一,它定义了Servlet容器如何启动、初始化以及配置各个组件如...

    web.xml配置servlet,filter,listener加载顺序源代码

    本源码将详细介绍web.xml配置中servlet,filter,listener的加载顺序,可以让学习者更好的了解web.xml各种属性配置,自己写的东西,不足之处请大家见谅,顺便收点积分也好下资料,谢谢

    web.xml各种配置

    容器启动时会加载并读取web.xml文件,因此理解web.xml的配置项对于Web应用开发至关重要。 ### web.xml的内容 web.xml中可以定义多个配置元素,包括但不限于: - **icon**: 指定IDE和GUI工具用来表示Web应用的图像...

    web.xml文件配置.doc

    本文将深入探讨web.xml文件中的加载顺序和常用元素,帮助开发者更好地理解和使用。 首先,加载顺序是web.xml配置的核心概念。加载顺序遵循以下规则:context-param -&gt; listener -&gt; filter -&gt; servlet。context-...

    WEB.XML详解

    web.xml的配置顺序也遵循一定的规则,比如ServletContext总是在其他组件之前被创建,而servlet的加载顺序则根据值的大小和实际出现的顺序进行配置。正确理解web.xml的每个标签及其作用是开发Java EE Web应用的基础。

    web.xml配置详解

    * `&lt;load-on-startup&gt;` 元素用于定义 servlet 在 web 应用程序启动时的加载顺序,该顺序将决定 servlet 的加载顺序。 Servlet 映射 在 web.xml 文件中,servlet 映射通过 `&lt;servlet-mapping&gt;` 元素来实现。该元素...

    web.xml中&lt;/context-param&gt;等配置的作用

    了解 web.xml 的配置信息和加载顺序对于理解框架的流程至关重要。在 web.xml 中,&lt;context-param&gt; 配置起着非常重要的作用,它在 web 项目启动时发挥着关键的作用。 首先,让我们来了解一下 web 项目的启动过程。在...

    关于web.xml配置文件servlet,filter,listener加载顺序

    关于filter、servlet在web.xml配置及加载顺序

    web.xml文件加载顺序[归纳].pdf

    理解Web.xml的加载顺序对于开发和调试Web应用程序至关重要。 首先,当Web应用程序启动时,Web容器(如Tomcat、Jetty等)会读取web.xml文件。在这个过程中,它会首先处理`&lt;listener&gt;`和`&lt;context-param&gt;`这两个元素...

    Tomcat中web.xml文件的详细说明

    init-param 元素定义了 Servlet 的初始化参数,而 load-on-startup 元素指定了 Servlet 的加载顺序。 7. servlet-mapping 元素 servlet-mapping 元素定义了 Servlet 的映射关系,例如: ```xml &lt;servlet-name&gt;...

Global site tag (gtag.js) - Google Analytics