- 浏览: 106760 次
- 性别:
- 来自: 杭州
文章分类
最新评论
首先可以确定的一点是, 不同类型节点的加载顺序与它们在web.xml里出现的次序无关,即不会因为filter写在listener之前而先加载fiter.
就<context-param>、<listener>、<filter>、<servlet>四种节点而言,启动服务器时的加载顺序是context-param --> listener --> filter --> servlet
首先是<context-param>,启动一个WEB项目的时候,WEB容器会读取配置描述符文件(web.xml)中的<context-param>节点信息。<context-param>它用于向 ServletContext 提供键值对,即应用程序上下文信息。在初始化listener, filter和servlet时到可能会用到这些信息。
例如在监听器(listener)中有一个contextInitialized(ServletContextEvent contextEvent)初始化方法,在这个方法中可以通过 contextEvent .getServletContext() 可以获得ServletContext对象,然后再从ServletContext中通过getInitParameter(String)方法获取<context-param>的键值:
1
ServletContext servletContext = contextEvent.getServletContext();
2
3
Object context-param的值 = servletContext .getInitParameter("context-param的键");
<context-param>包含两个子元素,分别是<param-name>和<param-value>。 前者用来设置context的名字,后者用来设置其值。
当param-value有多个值时, 用逗号隔开。 <param-value>里也可以使用通配符,比如:
1
<strong> <context-param>
2
<param-name>contextConfigLocation</param-name>
3
<param-value>
4
classpath*:/applicationContext.xml,classpath*:/applicationContext-security.xml
5
</param-value>
6
</context-param> </strong>
接着初始化listener, 主要子元素为< listener-class>,如:
1
<listener>
2
<listener-class>
3
org.springframework.web.context.ContextLoaderListener
4
</listener-class>
5
</listener>
然后是filter。 filter元素主要包括<filter-name>,<filter-class>和<init-param>, 一个典型的<filter>节点声明如下:
1
<filter>
2
<filter-name>Cache Filter - Friendly</filter-name>
3
<filter-class>com.liferay.portal.servlet.filters.cache.CacheFilter</filter-class>
4
<init-param>
5
<param-name>pattern</param-name>
6
<param-value>0</param-value>
7
</init-param>
8
</filter>
filter-mapping用来定义filter所对应的url匹配模式,它有两个子元素,分别是<filter-name>和<url-pattern>,一个典型的<filter-mapping>节点如下:
1
<filter-mapping>
2
<filter-name>Cache Filter - Layout</filter-name>
3
<url-pattern>/c/portal/layout</url-pattern>
4
</filter-mapping>
注意: 对于同一类型的配置节而言,与它们出现的顺序是有关的。以<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一样,servlet也分<servlet>和<servlet-mapping>两部分声明。一个典型的servlet声明如下:
01
<servlet>
02
<servlet-name>Friendly URL Servlet - Private User</servlet-name>
03
<servlet-class>com.liferay.portal.servlet.FriendlyURLServlet</servlet-class>
04
<init-param>
05
<param-name>user</param-name>
06
<param-value>true</param-value>
07
</init-param>
08
<load-on-startup>2</load-on-startup>
09
</servlet>
10
<servlet-mapping>
11
<servlet-name>Friendly URL Servlet - Private User</servlet-name>
12
<url-pattern>/user/*</url-pattern>
13
</servlet-mapping>
其中的<load-on-startup>值为正数或零时:Servlet容器先加载数值小的servlet,再依次加载其他数值大的servlet. 当值为负或未定义:Servlet容器将在Web客户首次访问这个servlet时加载它.
就<context-param>、<listener>、<filter>、<servlet>四种节点而言,启动服务器时的加载顺序是context-param --> listener --> filter --> servlet
首先是<context-param>,启动一个WEB项目的时候,WEB容器会读取配置描述符文件(web.xml)中的<context-param>节点信息。<context-param>它用于向 ServletContext 提供键值对,即应用程序上下文信息。在初始化listener, filter和servlet时到可能会用到这些信息。
例如在监听器(listener)中有一个contextInitialized(ServletContextEvent contextEvent)初始化方法,在这个方法中可以通过 contextEvent .getServletContext() 可以获得ServletContext对象,然后再从ServletContext中通过getInitParameter(String)方法获取<context-param>的键值:
1
ServletContext servletContext = contextEvent.getServletContext();
2
3
Object context-param的值 = servletContext .getInitParameter("context-param的键");
<context-param>包含两个子元素,分别是<param-name>和<param-value>。 前者用来设置context的名字,后者用来设置其值。
当param-value有多个值时, 用逗号隔开。 <param-value>里也可以使用通配符,比如:
1
<strong> <context-param>
2
<param-name>contextConfigLocation</param-name>
3
<param-value>
4
classpath*:/applicationContext.xml,classpath*:/applicationContext-security.xml
5
</param-value>
6
</context-param> </strong>
接着初始化listener, 主要子元素为< listener-class>,如:
1
<listener>
2
<listener-class>
3
org.springframework.web.context.ContextLoaderListener
4
</listener-class>
5
</listener>
然后是filter。 filter元素主要包括<filter-name>,<filter-class>和<init-param>, 一个典型的<filter>节点声明如下:
1
<filter>
2
<filter-name>Cache Filter - Friendly</filter-name>
3
<filter-class>com.liferay.portal.servlet.filters.cache.CacheFilter</filter-class>
4
<init-param>
5
<param-name>pattern</param-name>
6
<param-value>0</param-value>
7
</init-param>
8
</filter>
filter-mapping用来定义filter所对应的url匹配模式,它有两个子元素,分别是<filter-name>和<url-pattern>,一个典型的<filter-mapping>节点如下:
1
<filter-mapping>
2
<filter-name>Cache Filter - Layout</filter-name>
3
<url-pattern>/c/portal/layout</url-pattern>
4
</filter-mapping>
注意: 对于同一类型的配置节而言,与它们出现的顺序是有关的。以<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一样,servlet也分<servlet>和<servlet-mapping>两部分声明。一个典型的servlet声明如下:
01
<servlet>
02
<servlet-name>Friendly URL Servlet - Private User</servlet-name>
03
<servlet-class>com.liferay.portal.servlet.FriendlyURLServlet</servlet-class>
04
<init-param>
05
<param-name>user</param-name>
06
<param-value>true</param-value>
07
</init-param>
08
<load-on-startup>2</load-on-startup>
09
</servlet>
10
<servlet-mapping>
11
<servlet-name>Friendly URL Servlet - Private User</servlet-name>
12
<url-pattern>/user/*</url-pattern>
13
</servlet-mapping>
其中的<load-on-startup>值为正数或零时:Servlet容器先加载数值小的servlet,再依次加载其他数值大的servlet. 当值为负或未定义:Servlet容器将在Web客户首次访问这个servlet时加载它.
发表评论
-
Java线程Dump分析工具--jstack(转摘纪录)
2015-10-29 10:47 824jstack用于打印出给 ... -
多角度看 Java 中的泛型
2014-05-13 15:40 687本文摘自:http://www.ibm.c ... -
java.lang.Object类 方法(转)
2014-05-13 10:55 1903Object类的方法 构造方法:public Obje ... -
为什么Java byte 类型的取值范围是-128~127(short int long同理)
2014-05-12 18:08 2054为什么Java byte 类型的取值范围是-128~127 ... -
java对象初始化书序
2014-05-09 15:05 558package com.test.aa.service; p ... -
java.lang.ThreadLocal详解以及注意事项
2014-04-29 18:12 2505一.什么是ThreadLocal? ThreadLocal ... -
String Stringbuilder StringBuffer区别
2014-04-17 11:00 673关于这三者的区别,我们从官方API上很容易找到答案。 ... -
JAVA反射机制
2014-04-03 15:15 307JAVA反射机制: 通俗地说,反射机制就是可以把一个类, ... -
ArrayList和linkedList几种循环性能比较
2014-03-26 17:51 582请 参照 http://www.trinea.cn/andr ... -
HashMap原理
2014-03-20 15:31 522本文由 ImportNew - 唐小娟 ... -
java.lang.Cloneable
2014-03-20 11:22 552public interface Cloneable 此类实 ... -
Java集合框架学习总结
2014-03-14 16:43 692以下介绍经常使用的集合类,这里不介绍集合类的使用方法,只介绍 ... -
maven项目管理的一些知识
2014-03-04 16:24 490http://sishuok.com/forum/blogPo ... -
ehcache使用注意 及一些问题的解决
2014-02-21 17:35 823配置 1. applicationContext.xml ... -
Xms Xmx PermSize MaxPermSize 区别
2014-02-20 16:13 612Eclipse崩溃,错误提示: ... -
JAVA基础-栈与堆,static、final修饰符、内部类和Java内存分配
2014-01-17 20:00 1099堆:顺序随意 栈:后进 ... -
debug遇到找不到源码的情况解决方案
2013-12-19 18:46 689在做JAVA开发的时候 页面端调用了接口服务端 找问题需要页面 ... -
工作学习2013-11-6
2013-11-06 20:20 4901.在用maven进行项目构建的时候 可以先建立以个maven ... -
运行jtest出现 No value found for property database.type 错误解决办法
2013-06-06 11:25 1723错误信息: Caused by: org.jtester.mo ...
相关推荐
部署描述文件web.xml详解(web-app_2_3.dtd),全面介绍: 1. icon元素 2. display-name元素 3. description元素 4. distributable元素 5. context-param元素 6. filter元素 7. filter-mapping元素 8. ...
org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <filter> <filter-name>encodingFilter</filter-name> <filter-class> org.springframework.web.filter....
本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。. 本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...
本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。. 本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...
org.springframework.web.servlet-3.1.3.RELEASE.jar org.springframework.web.struts-3.1.3.RELEASE.jar 加入struts的配置文件struts.xml 在web.xml中配置struts <filter> <filter-name>struts2</filter-name> ...
1.6.1 监听器(Listener)顺序 ...............................................................................................................14 1.6.2 注解处理 .............................................
本文后面的章节将从数据持久层->业务层->Web层的开发顺序,逐层讲解文件上传下载的开发过程。 数据持久层 1、领域对象及映射文件 您可以使用Hibernate Middlegen、HIbernate Tools、Hibernate ...
36 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 37 <load-on-startup>1</load-on-startup> 38 </servlet> 39 40 <servlet-mapping> 41 <servlet-name>ideawu</servlet-name...
本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。. 本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/dispatcher-servlet.xml</...
—要和<servlet-mapping>中的<servlet-name>一致--> <servlet-name>Faces Servlet</servlet-name> </filter-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> ...
本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。. 本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...
1.6.1 监听器(Listener)顺序 ...............................................................................................................14 1.6.2 注解处理 ...............................................
Servlets和JSP核心技术 卷2 内容还是很详细的,看过卷1的人可以继续用这本书深造,呵呵 目录: Chapter 1. Using and Deploying Web Applications Section 1.1. Purpose of Web Applications Section 1.2. ...
Controlling Web Application Behavior with web.xml Section 2.1. Purpose of the Deployment Descriptor Section 2.2. Defining the Header and the Root Element Section 2.3. The Elements of web.xml ...
XML .............................................................................................................................................. 51 SOAP Transport Protocol .............................