Web.xml 加载顺序


Web.xml 加载顺序 一、 1、启动一个 WEB 项目的时候,WEB 容器会去读取它的配置文件 web.xml,读取两个结点。 2、紧急着,容创建一个 ServletContext(servlet 上下文),这个 web 项目的所有部分 都将共享这个上下文。 3、容器将转换为键值对,并交给 servletContext。 4、容器创建中的类实例,创建监听器。 二、 load-on-startup 元素在 web 应用启动的时候指定了 servlet 被加载的顺序,它的值必须 是一个整数。如果它的值是一个负整数或是这个元素不存在,那么容器会在该 servlet 被调 用的时候,加载这个 servlet 。如果值是正整数或零,容器在配置的时候就加载并初始化 这个 servlet,容器必须保证值小的先被加载。如果值相等,容器可以自动选择先加载谁。 在 servlet 的配置当中,5的含义是: 标记容器是否在启动的时候就加载这个 servlet。 当值为 0 或者大于 0 时,表示容器在应用启动时就加载这个 servlet; 当是一个负数时或者没有指定时,则指示容器在该 servlet 被选择时才加载。 正数的值越小,启动该 servlet 的优先级越高。 三、 在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资 料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只 是略加点了自己的修饰。 首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关。即不会 因为 filter 写在 listener 的前面而会先加载 filter。最终得出的结论是:listener -> filter -> servlet 同时还存在着这样一种配置节:context-param,它用于向 ServletContext 提供 键值对,即应用程序上下文信息。我们的 listener, filter 等在初始化时会用到这些上下文 中的信息,那么 context-param 配置节是不是应该写在 listener 配置节前呢?实际上 context-param 配置节可写在任意位置,因此真正的加载顺序为: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.xml 的加载顺序是:context-param -> listener -> filter -> servlet ,而同个类型之间的实际程序调用的时候的顺序是根据对应的 mapping 的顺 序进行调用的。 web.xml 文件详解 Web.xml 常用元素 定义了 WEB 应用的名字 声明 WEB 应用的描述信息 context-param 元素声明应用范围内的初始化 参数。 过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关 联。 一旦命名了一个过滤器,就要利用 filter-mapping 元素把它与一个或多个 servlet 或 JSP 页面相关联。 servlet API 的版本 2.3 增加了对事件监听程序的支持,事件监听 程序在建立、修改和删除会话或 servlet 环境时得到通知。 Listener 元素指出事件监听程序类。 在向 servlet 或 JSP 页面制定初始化参数或定制 URL 时,必须首 先命名 servlet 或 JSP 页面。Servlet 元素就是用来完成此项任务的。 服务器一般为 servlet 提供一个缺省的 URL: http://host/webAppPrefix/servlet/ServletName。 但是,常常会更改这个 URL,以便 servlet 可以访问初始化参数或更容易地处 理相对 URL。在更改缺省 URL 时,使用 servlet-mapping 元素。 如果某个会话在一定时间内未被访问,服务器可 以抛弃它以节省内存。 可通过使用 HttpSession 的 setMaxInactiveInterval 方法明确设置单个会话对 象的超时值,或者可利用 session-config 元素制定缺省超时值。 如果 Web 应用具有想到特殊的文件,希望能保 证给他们分配特定的 MIME 类型,则 mime-mapping 元素提供这种保证。 指示服务器在收到引用一个目录名而不是 文件名的 URL 时,使用哪个文件。 在返回特定 HTTP 状态代码时,或者特定类型的异常被 抛出时,能够制定将要显示的页面。 对标记库描述符文件(Tag Libraryu Descriptor file)指定别名。 此功能使你能够更改 TLD 文件的位置, 而不用编辑使用这些文件的 JSP 页面。 声明与资源相关的一个管理对象。 声明一个资源工厂使用的外部资源。 制定应该保护的 URL。它与 login-config 元素联合使用 指定服务器应该怎样给试图访问受保护页面的用户授 权。它与 sercurity-constraint 元素联合使用。 给出安全角色的一个列表,这些角色将出现在 servlet 元素内的 security-role-ref 元素 的 role-name 子元素中。分别地声明角色可使高级 IDE 处理安全信息更为 容易。 声明 Web 应用的环境项。 声明一个 EJB 的主目录的引用。 < ejb-local-ref>声明一个 EJB 的本地主目录的应用。 相应元素配置 1、Web 应用图标:指出 IDE 和 GUI 工具用来表示 Web 应用的大图标和小图标 /images/app_small.gif /images/app_large.gif 2、Web 应用名称:提供 GUI 工具可能会用来标记这个特定的 Web 应用的一个名称 Tomcat Example 3、Web 应用描述:给出于此相关的说明性文本 Tomcat Example servlets and JSP pages. 4、上下文参数:声明应用范围内的初始化参数。 ContextParameter test It is a test parameter. 在 servlet 里面可以通过 getServletContext().getInitParameter("context/param") 得到 5、过滤器配置:将一个名字与一个实现 javaxs.servlet.Filter 接口的类相关联。 setCharacterEncoding com.myTest.setCharacterEncodingFilter encoding GB2312 setCharacterEncoding /* 6、监听器配置 listener.SessionListener 7、Servlet 配置 基本配置 snoop SnoopServlet snoop /snoop 高级配置 snoop SnoopServlet foo bar Security role for anonymous access tomcat snoop /snoop 元素说明 用来声明一个 servlet 的数据,主要有以下子元素: 指定 servlet 的名称 指定 servlet 的类名称 指定 web 站台中的某个 JSP 网页的完整路径 用来定义参数,可有多个 init-param。在 servlet 类中通过 getInitParamenter(String name)方法访问初始化参数 指定当 Web 应用启动时,装载 Servlet 的次序。 当值为正数或零时:Servlet 容器先加载数值小的 servlet,再 依次加载其他数值大的 servlet. 当值为负或未定义:Servlet 容器将在 Web 客户首次访问这个 servlet 时加载它 用来定义 servlet 所对应的 URL,包含 两个子元素 指定 servlet 的名称 指定 servlet 所对应的 URL 8、会话超时配置(单位为分钟) 120 9、MIME 类型配置 htm text/html 10、指定欢迎文件页配置 index.jsp index.html index.htm 11、配置错误页面 一、 通过错误码来配置 error-page 404 /NotFound.jsp 上面配置了当系统发生 404 错误时,跳转到错误处理页面 NotFound.jsp。 二、通过异常的类型配置 error-page java.lang.NullException /error.jsp 上面配置了当系统发生 java.lang.NullException(即空指针异常)时,跳转到错误处理 页面 error.jsp 12、TLD 配置 http://jakarta.apache.org/tomcat/debug-taglib /WEB-INF/jsp/debug-taglib.tld 如果 MyEclipse 一直在报错,应该把 放到 http://jakarta.apache.org/tomcat/debug-taglib /WEB-INF/pager-taglib.tld 13、资源管理对象配置 jms/StockQueue 14、资源工厂配置 mail/Session javax.mail.Session Container 配置数据库连接池就可在此配置: JNDI JDBC DataSource of shop jdbc/sample_db javax.sql.DataSource Container 15、安全限制配置 Example Security Constraint Protected Area /jsp/security/protected/* DELETE GET POST PUT tomcat role1 16、登陆验证配置 FORM Example-Based Authentiation Area /jsp/security/protected/login.jsp /jsp/security/protected/error.jsp 17、安全角色:security-role 元素给出安全角色的一个列表,这些角色将出现在 servlet 元素内的 security-role-ref 元素的 role-name 子元素中。 分别地声明角色可使高级 IDE 处理安全信息更为容易。 tomcat 18、Web 环境参数:env-entry 元素声明 Web 应用的环境项 minExemptions 1 java.lang.Integer 19、EJB 声明 Example EJB reference ejb/Account Entity com.mycompany.mypackage.AccountHome com.mycompany.mypackage.Account 20、本地 EJB 声明 Example Loacal EJB reference ejb/ProcessOrder Session com.mycompany.mypackage.ProcessOrderHome com.mycompany.mypackage.ProcessOrder 21、配置 DWR dwr-invoker uk.ltd.getahead.dwr.DWRServlet dwr-invoker /dwr/* 22、配置 Struts Struts Blank Application action org.apache.struts.action.ActionServlet detail 2 debug 2 config /WEB-INF/struts-config.xml application ApplicationResources 2 action *.do index.jsp struts-bean /WEB-INF/tld/struts-bean.tld struts-html /WEB-INF/tld/struts-html.tld struts-nested /WEB-INF/tld/struts-nested.tld struts-logic /WEB-INF/tld/struts-logic.tld struts-tiles /WEB-INF/tld/struts-tiles.tld 23、配置 Spring(基本上都是在 Struts 中配置的) contextConfigLocation /WEB-INF/applicationContext.xml, /WEB-INF/action-servlet.xml org.springframework.web.context.ContextLoaderListener org.springframework.web.context.request.RequestContextListener
还剩8页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 11 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

xf_xin

贡献于2012-08-30

下载需要 11 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf