- 浏览: 152436 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
chen_zujun:
java Object生成实例的new和newInstance的区别? -
honey00125:
感谢楼主分享!
JQuery权威指南源代码整理下载 -
Jojay90:
真的不错, 谢谢此分享!
JQuery权威指南源代码整理下载 -
wjyuian:
感谢楼主,好资料,,下了看看
JQuery权威指南源代码整理下载 -
toefllitong:
感谢楼主的分享,支持越来越多的人分享
JQuery权威指南源代码整理下载
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网页
发表评论
-
Struts2 action中获取web.xml中的context-param以及获取request, response对象的方法
2012-06-28 19:15 3576web.xml中的context-param参数:<co ... -
Annotation-java注解
2012-03-29 17:21 1097Java中提供3个内置注释类型 a. Overr ... -
memcache基础知识-stats参数
2012-03-22 23:53 7256安装memcache: #tar -xvf libe ... -
Log4j扩展的一个按天滚动的appender类,同时支持动态日志
2012-03-22 23:43 2330扩展的一个按天滚动的appender类 暂时不支持datePa ... -
log4j 配置说明
2012-03-01 17:03 1527Log4J 基本使用方法 l ... -
linux命令分析日志
2012-01-05 00:35 1926cat 命令是 concatenate(连锁)的简写,意思是合 ... -
weblogic部署应用碰到的问题
2011-09-21 23:55 14279java.io.IOException: invalid he ... -
Apache2.2.8 + svn-1.4.6安装配置实录
2008-06-18 09:40 1094Apache2.2.8 + svn-1.4.6安装 ... -
JSP下动态INCLUDE与静态INCLUDE的区别,Forward和Redirect的区别分析
2008-11-03 23:02 1521动态INCLUDE与静态INCLUDE的区别 动态inc ... -
关于switch case 语句的总结!
2008-11-12 18:03 1305最近面试过程中遇到一道试题: public class Te ... -
public ,private ,protected 及不写时的区别? final、finally和finalize的区别是什么?
2008-11-18 14:58 1083一、java 作用域public , ... -
文件夹映射到文件夹 文件夹映射到盘符
2009-03-12 16:54 2243今天工作中遇到一个问题需要将一个目录 D:\improve\w ... -
web.xml中参数的问题:context-param和init-param的区别
2011-02-28 11:28 869web.xml里面可以定义两种参数: (1)applicat ... -
VMware-redhat server5网络配置实现网络连接详解
2011-02-22 14:08 2422网络配置详解一:三种 ... -
Java集合的Stack、Queue、Map的遍历
2010-11-11 17:45 1546import java.util.HashMap; impo ... -
Java中的容器讲解
2010-11-11 17:42 1276线性表,链表,集合,哈希表是常用的数据结构,在进行Java开发 ... -
Map--读"找出数组中重复次数最多的元素并打印"有感Map的使用
2010-10-09 11:51 3876目的:了解Map的containsKey的是用以及Map的遍历 ... -
Web应用中request获取各种获取path或URI,URL的方法
2010-08-19 17:25 6846Web应用中有各种获取path或URI,URL的方法,假设网页 ... -
Jboss应用服务器问题收集!
2010-07-22 15:22 2806问题1:Jsp exception,错误代码:Unable t ... -
apache配置虚拟主机
2010-03-26 11:34 817Apache配置虚拟主机 Alias /jquery &qu ...
相关推荐
《Web.xml加载顺序解析》 在Web应用开发中,`web.xml`是部署描述符,它定义了应用程序的行为和配置。了解`web.xml`的加载顺序对于优化和调试Web应用程序至关重要。本文将深入探讨`web.xml`的加载流程,以及各个元素...
web.xml的配置顺序也遵循一定的规则,比如ServletContext总是在其他组件之前被创建,而servlet的加载顺序则根据值的大小和实际出现的顺序进行配置。正确理解web.xml的每个标签及其作用是开发Java EE Web应用的基础。
1. 当一个WEB项目启动时,Web容器首先读取web.xml文件,解析其中的和节点。 2. 随后,容器创建一个Servlet上下文(ServletContext),作为整个Web应用程序共享的数据存储区。 3. 被转化为键值对,并存储在...
DWR有个专门用于解析上面配置语句的解析器,虽然上面的是JDK5中才有的特性,因为有解析器的原因这也可以应用与JDK5之前的版本. 解析规则是不可见的,但有两种例外情况. 一种情况是因为DWR1.0的解析器中有个Bug,在有些...
通过这个压缩包,学习者可以深入了解XML在实际项目中的运用,理解XML解析、生成、转换以及与Java Web应用结合的各种技术。对于初学者来说,这是一个很好的实践平台,能够提升XML处理和Web应用开发的技能。
本文将深入探讨这个主题,重点关注Web容器如何处理配置文件`web.xml`,以及不同组件(如`context-param`、`listener`、`filter`和`servlet`)的加载顺序。 首先,当一个Web项目启动时,Web容器(如Tomcat、Jetty等...
XPath是用于在XML文档中查找信息的语言,通过路径表达式定位XML节点。 7. **XSLT(Extensible Stylesheet Language Transformations)**:XSLT用于转换XML文档,通过定义模板规则,可以将XML转换成其他格式,如HTML...
相较于DOM,SAX是一种事件驱动的解析方式,只在需要时读取XML数据,按顺序触发事件,适合处理大型XML文件。SAX解析器不会创建整个文档对象模型,因此内存占用小。 - **示例代码**: ```java SAXParserFactory ...
在Web开发中,Flash曾是创建动画和交互性内容的流行工具,而XML(eXtensible Markup Language)则是一种用于存储和传输数据的语言,因其结构清晰、易于解析,常被用来作为Flash内容的数据源。 描述提到的“图片轮换...
2. **实现回调接口**: 创建一个实现了`DefaultHandler`或`ContentHandler`接口的类,覆盖其中的方法,如`startElement()`、`endElement()`和`characters()`,以便在解析过程中处理XML节点。 ```java public class ...
SAX是一种事件驱动的解析方法,它不将整个XML文档加载到内存中,而是逐行读取文档,遇到元素、属性、文本等时触发相应的事件处理器。这种方式适合处理大文件或内存有限的情况,因为它的内存消耗相对较低。 2. 使用...
与DOM解析不同,Pull解析不需要一次性加载整个XML文档,而是采用事件驱动的方式,按需读取XML文档的下一个事件(如开始标签、结束标签、文本等)。这种方式更节省内存,适合处理大体积的XML文件。在Android中,使用`...
DOM 解析方式将整个XML文档加载到内存中,并构建出一棵DOM树。这种方式的优点是可以方便地操作整个文档,但缺点是消耗较多的内存资源,尤其是处理大型文件时。 **DOM 核心概念:** - **文档(Document)**:XML树中...
XPath是查询XML文档的语言,用来选取节点、评估表达式和导航XML结构。XSLT(可扩展样式表语言转换)则用于转换XML文档,它可以将XML转换成HTML、PDF或其他格式,实现数据呈现的灵活性。 6. XML在Web服务中的应用: ...
- **SAX解析**:事件驱动型解析,按顺序逐个处理XML元素,不保存整个文档结构。优点是内存消耗小,适合大文件,但无法随机访问。 - **StAX(Streaming API for XML)**:类似于SAX,但允许向前移动,提供更灵活的...
- **内存效率高**:由于SAX解析器只处理当前的XML节点,不需要加载整个文档,所以内存占用较小。 - **速度较快**:与DOM解析相比,SAX解析更快速,特别是对于大文件,因为它只需要读取和处理必要的信息。 - **...