﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-小菜毛毛技术分享-随笔分类-java定时器</title><link>http://www.blogjava.net/caizh2009/category/46489.html</link><description>与大家共同成长</description><language>zh-cn</language><lastBuildDate>Fri, 01 Oct 2010 11:12:04 GMT</lastBuildDate><pubDate>Fri, 01 Oct 2010 11:12:04 GMT</pubDate><ttl>60</ttl><item><title>web.xml中获取全局参数</title><link>http://www.blogjava.net/caizh2009/archive/2010/09/30/333564.html</link><dc:creator>小菜毛毛</dc:creator><author>小菜毛毛</author><pubDate>Thu, 30 Sep 2010 08:38:00 GMT</pubDate><guid>http://www.blogjava.net/caizh2009/archive/2010/09/30/333564.html</guid><wfw:comment>http://www.blogjava.net/caizh2009/comments/333564.html</wfw:comment><comments>http://www.blogjava.net/caizh2009/archive/2010/09/30/333564.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caizh2009/comments/commentRss/333564.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caizh2009/services/trackbacks/333564.html</trackback:ping><description><![CDATA[http://blog.csdn.net/wjp553650958/archive/2009/08/30/4499540.aspx<br />
<span style="font-family: andale mono,times;"><span style="font-size: medium;">读取容器配置参数---context-param和init-param区别</span></span>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">web.xml里面可以定义两种参数：<br />
(1)application范围内的参数，存放在servletcontext中，在web.xml中配置如下：&nbsp; &lt;context-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;context/param&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;avalible during application&lt;/param-value&gt;</span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;name1&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;value1&lt;/param-value&gt;<br />
&nbsp; &lt;/context-param&gt;</span></span></p>
<p><br />
<span style="font-family: andale mono,times;"><span style="font-size: medium;">(2)servlet范围内的参数，只能在servlet的init()方法中取得，在web.xml中配置如下：</span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">&nbsp;&lt;servlet&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;MainServlet&lt;/servlet-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;com.wes.controller.MainServlet&lt;/servlet-class&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;param1&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;avalible in servlet init()&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;load-on-startup&gt;0&lt;/load-on-startup&gt;<br />
&nbsp;&lt;/servlet&gt;</span></span></p>
<p><br />
<span style="font-family: andale mono,times;"><span style="font-size: medium;">在servlet中可以通过代码分别取用：</span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">package com.wes.controller;</span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">import javax.servlet.ServletException;<br />
import javax.servlet.http.HttpServlet;</span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">public class MainServlet extends HttpServlet ...{</span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">&nbsp;&nbsp;&nbsp; public MainServlet() ...{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super();<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void init() throws ServletException ...{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("下面的两个参数param1是在servlet中存放的");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(this.getInitParameter("param1"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("下面的参数是存放在servletcontext中的");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(getServletContext().getInitParameter("context/param"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
}</span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">第
一种参数在servlet里面可以通过getServletContext().getInitParameter("context/param")得
到?(在servlet的init()方法中通过this.getInitParameter("param1")取得)</span></span></p>
<p><br />
<span style="font-family: andale mono,times;"><span style="font-size: medium;">第二种参数只能在servlet的init()方法中通过this.getInitParameter("param1")取得</span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">---------------------------------------------------------------------</span></span></p>
<p><br />
<span style="font-family: andale mono,times;"><span style="font-size: medium;">ServletContextListener实现读取web.xml中context-param信息&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2009年03月27日 星期五 22:37<br />
&nbsp; 用部署文件来存储配置参数在Java中是一种很流行的做法。</span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">配置参数一般存放在context-param元素中，每一个context-param元素代表了一个键值对。</span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">我
们可以通过实现ServletContextListener接口读取该键值对中的值，在web应用程序初始化的时候，调用
ServletContextListener的contextInitialized()方法，所以我们我们可以重写该方法，实现读取操作。可以这样实
现：</span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">public class AppListener implements ServletContextListener {</span></span></p>
<p><br />
<span style="font-family: andale mono,times;"><span style="font-size: medium;">public void contextInitialized(ServletContextEvent sce) {<br />
&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyConfig config = new MyConfig();//存放配置信息，用Map实现<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Enumeration parameters =&nbsp; sce.getServletContext().getInitParameterNames();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(parameters.hasMoreElements()){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String name =&nbsp; (String) parameters.nextElement();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; config.addKeyTValue(name, sce.getServletContext().getInitParameter(name));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; </span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //相应的键值对存到map中<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; config.addKeyValue(parameter, sc.getInitParameter(parameter)); <br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; } catch(Exception e) {<br />
&nbsp;&nbsp;&nbsp; System.out.println("com.shou error:" + e.getMessage());<br />
&nbsp;&nbsp; }<br />
}</span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">public void contextDestroyed(ServletContextEvent arg0) {</span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">}<br />
}</span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">&nbsp;MyConfig类：(Singleton Config)<br />
package com.myapp;</span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">import java.util.Collection;<br />
import java.util.HashMap;<br />
import java.util.Map;<br />
import java.util.Set;</span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">/**<br />
&nbsp;*<br />
&nbsp;* @author Administrator<br />
&nbsp;*/</span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">public class MyConfig{<br />
&nbsp;&nbsp;&nbsp; public static MyConfig myconfig;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public static HashMap config = new HashMap();</span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">&nbsp;&nbsp;&nbsp; public static HashMap getConfig() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return config;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public static MyConfig getInstance(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(myconfig==null){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myconfig = new MyConfig();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return myconfig;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public static void setConfig(HashMap config) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyConfig.config = config;<br />
&nbsp;&nbsp;&nbsp; }</span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">&nbsp;&nbsp;&nbsp;&nbsp; public HashMap addKeyTValue(String name,String value){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.config.put(name, value);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this.config;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
}</span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">接着，必须在web.xml中配置相应的监听类，才能在初始化的时候，自动调用该方法。如：</span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">&lt;listener&gt;<br />
&lt;listener-class&gt;com.myapp.MyListener&lt;/listener-class&gt;<br />
&lt;/listener&gt;</span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">这样就可以在任何一个JSP页面，通过EL表达式或JSTL读到context-param中的内容。</span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">有的网友说在web.xml内定义&lt;listener&gt;元素时得注意下列两点：<br />
&lt;listener&gt;元素必须出现在任何Context起始参数（由&lt;context-param&gt;元素所定义）之后。<br />
&lt;listener&gt;元素必须出现在任何Servlet实体（由&lt;servlet&gt;元素所定义）之前。</span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">但是我在TOMCAT5.5 +　J2EE 5下配置web.xml并没有按照上述的严格限制也能成功读取信息。</span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">难道是版本的问题吗。</span></span></p>
<p><span style="font-family: andale mono,times;"><span style="font-size: medium;">在Struts 1.X下，通过一个自定义的Singleton Config类，可以让web.xml中的配置参数在整个应用程序里都能被共享。</span></span></p>
<br />
<img src ="http://www.blogjava.net/caizh2009/aggbug/333564.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caizh2009/" target="_blank">小菜毛毛</a> 2010-09-30 16:38 <a href="http://www.blogjava.net/caizh2009/archive/2010/09/30/333564.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>web.xml 中的listener、 filter、servlet 加载顺序及其详解</title><link>http://www.blogjava.net/caizh2009/archive/2010/09/30/333562.html</link><dc:creator>小菜毛毛</dc:creator><author>小菜毛毛</author><pubDate>Thu, 30 Sep 2010 08:33:00 GMT</pubDate><guid>http://www.blogjava.net/caizh2009/archive/2010/09/30/333562.html</guid><wfw:comment>http://www.blogjava.net/caizh2009/comments/333562.html</wfw:comment><comments>http://www.blogjava.net/caizh2009/archive/2010/09/30/333562.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caizh2009/comments/commentRss/333562.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caizh2009/services/trackbacks/333562.html</trackback:ping><description><![CDATA[http://zhxing.javaeye.com/blog/399668<br />
在项目中总会遇到一些关于加载的优先级问题，近期也同样遇到过类似的，所以自己查找资料总结了下，下面有些是转载其他人的，毕竟人家写的不错，自己也就不重复造轮子了，只是略加点了自己的修饰。
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先可以肯定的是，加载顺序与它们在 web.xml 文件中的先后顺序无关。即不会因为 filter 写在 listener 的前面而会先加载 filter。最终得出的结论是：<strong>listener -&gt; filter -&gt; servlet</strong> </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同时还存在着这样一种配置节：context-param，它用于向 ServletContext
提供键值对，即应用程序上下文信息。我们的 listener, filter 等在初始化时会用到这些上下文中的信息，那么
context-param 配置节是不是应该写在 listener 配置节前呢？实际上 context-param 配置节可写在任意位置，因此<strong>真正的加载顺序为：context-param -&gt; listener -&gt; filter -&gt; servlet </strong></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对于某类配置节而言，与它们出现的顺序是有关的。以 filter 为例，web.xml 中当然可以定义多个 filter，与
filter 相关的一个配置节是 filter-mapping，这里一定要注意，对于拥有相同 filter-name 的 filter 和
filter-mapping 配置节而言，filter-mapping 必须出现在 filter 之后，否则当解析到
filter-mapping 时，它所对应的 filter-name 还未定义。web 容器启动时初始化每个 filter 时，是按照
filter 配置节出现的顺序来初始化的，当请求资源匹配多个 filter-mapping 时，<strong>filter 拦截资源是按照 filter-mapping 配置节出现的顺序来依次调用</strong> doFilter() 方法的。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>servlet 同 filter 类似</strong>，此处不再赘述。 </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由此，可以看出，web.xml 的加载顺序是：<strong>context-param -&gt; listener -&gt; filter -&gt; servlet</strong> ，而同个类型之间的实际程序调用的时候的顺序是根据对应的 mapping 的顺序进行调用的。</p>
<p>web.xml文件详解</p>
<div>
<div>
<div>Xml代码 </div>
</div>
<ol start="1">
    <li>Web.xml常用元素&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;web-app&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;display-name&gt;&lt;/display-name&gt;定义了WEB应用的名字&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;description&gt;&lt;/description&gt;&nbsp;声明WEB应用的描述信息&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&lt;context-param&gt;&lt;/context-param&gt;&nbsp;context-param元素声明应用范围内的初始化参数。&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;filter&gt;&lt;/filter&gt;&nbsp;过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;filter-mapping&gt;&lt;/filter-mapping&gt;&nbsp;一旦命名了一个过滤器，就要利用filter-mapping元素把它与一个或多个servlet或JSP页面相关联。&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;listener&gt;&lt;/listener&gt;servlet&nbsp;API的版本2.3增加了对事件监听程序的支持，事件监听程序在建立、修改和删除会话或servlet环境时得到通知。&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Listener元素指出事件监听程序类。&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;servlet&gt;&lt;/servlet&gt;&nbsp;在向servlet或JSP页面制定初始化参数或定制URL时，必须首先命名servlet或JSP页面。Servlet元素就是用来完成此项任务的。&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;servlet-mapping&gt;&lt;/servlet-mapping&gt;&nbsp;服务器一般为servlet提供一个缺省的URL：http://host/webAppPrefix/servlet/ServletName。&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;但是，常常会更改这个URL，以便servlet可以访问初始化参数或更容易地处理相对URL。在更改缺省URL时，使用servlet-mapping元素。&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&lt;session-config&gt;&lt;/session-config&gt;&nbsp;如果某个会话在一定时间内未被访问，服务器可以抛弃它以节省内存。&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可通过使用HttpSession的setMaxInactiveInterval方法明确设置单个会话对象的超时值，或者可利用session-config元素制定缺省超时值。&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&lt;mime-mapping&gt;&lt;/mime-mapping&gt;如果Web应用具有想到特殊的文件，希望能保证给他们分配特定的MIME类型，则mime-mapping元素提供这种保证。&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;welcome-file-list&gt;&lt;/welcome-file-list&gt;&nbsp;指示服务器在收到引用一个目录名而不是文件名的URL时，使用哪个文件。&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;error-page&gt;&lt;/error-page&gt;&nbsp;在返回特定HTTP状态代码时，或者特定类型的异常被抛出时，能够制定将要显示的页面。&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;taglib&gt;&lt;/taglib&gt;&nbsp;对标记库描述符文件（Tag&nbsp;Libraryu&nbsp;Descriptor&nbsp;file）指定别名。此功能使你能够更改TLD文件的位置，&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;而不用编辑使用这些文件的JSP页面。&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;resource-env-ref&gt;&lt;/resource-env-ref&gt;声明与资源相关的一个管理对象。&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;resource-ref&gt;&lt;/resource-ref&gt;&nbsp;声明一个资源工厂使用的外部资源。&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;security-constraint&gt;&lt;/security-constraint&gt;&nbsp;制定应该保护的URL。它与login-config元素联合使用&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;login-config&gt;&lt;/login-config&gt;&nbsp;指定服务器应该怎样给试图访问受保护页面的用户授权。它与sercurity-constraint元素联合使用。&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;security-role&gt;&lt;/security-role&gt;给出安全角色的一个列表，这些角色将出现在servlet元素内的security-role-ref元素&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;的role-name子元素中。分别地声明角色可使高级IDE处理安全信息更为容易。&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;env-entry&gt;&lt;/env-entry&gt;声明Web应用的环境项。&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;ejb-ref&gt;&lt;/ejb-ref&gt;声明一个EJB的主目录的引用。&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;&nbsp;ejb-local-ref&gt;&lt;/&nbsp;ejb-local-ref&gt;声明一个EJB的本地主目录的应用。&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;/web-app&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>相应元素配置&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>1、Web应用图标：指出IDE和GUI工具用来表示Web应用的大图标和小图标&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;icon&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;small-icon&gt;/images/app_small.gif&lt;/small-icon&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;large-icon&gt;/images/app_large.gif&lt;/large-icon&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;/icon&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>2、Web&nbsp;应用名称：提供GUI工具可能会用来标记这个特定的Web应用的一个名称&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;display-name&gt;Tomcat&nbsp;Example&lt;/display-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>3、Web&nbsp;应用描述：&nbsp;给出于此相关的说明性文本&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;disciption&gt;Tomcat&nbsp;Example&nbsp;servlets&nbsp;and&nbsp;JSP&nbsp;pages.&lt;/disciption&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>4、上下文参数：声明应用范围内的初始化参数。&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;context-param&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-name&gt;ContextParameter&lt;/para-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-value&gt;test&lt;/param-value&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;description&gt;It&nbsp;is&nbsp;a&nbsp;test&nbsp;parameter.&lt;/description&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;/context-param&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;在servlet里面可以通过getServletContext().getInitParameter("context/param")得到&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>5、过滤器配置：将一个名字与一个实现javaxs.servlet.Filter接口的类相关联。&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;filter&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;filter-name&gt;setCharacterEncoding&lt;/filter-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;filter-class&gt;com.myTest.setCharacterEncodingFilter&lt;/filter-class&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;init-param&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-name&gt;encoding&lt;/param-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-value&gt;GB2312&lt;/param-value&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/init-param&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;/filter&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;filter-mapping&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;filter-name&gt;setCharacterEncoding&lt;/filter-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;url-pattern&gt;/*&lt;/url-pattern&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;/filter-mapping&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>6、监听器配置&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;listener&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;listerner-class&gt;listener.SessionListener&lt;/listener-class&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;/listener&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>7、Servlet配置&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;基本配置&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;servlet&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-name&gt;snoop&lt;/servlet-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-class&gt;SnoopServlet&lt;/servlet-class&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;/servlet&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;servlet-mapping&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-name&gt;snoop&lt;/servlet-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;url-pattern&gt;/snoop&lt;/url-pattern&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;/servlet-mapping&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;高级配置&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;servlet&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-name&gt;snoop&lt;/servlet-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-class&gt;SnoopServlet&lt;/servlet-class&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;init-param&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-name&gt;foo&lt;/param-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-value&gt;bar&lt;/param-value&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/init-param&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;run-as&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;description&gt;Security&nbsp;role&nbsp;for&nbsp;anonymous&nbsp;access&lt;/description&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;role-name&gt;tomcat&lt;/role-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/run-as&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;/servlet&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;servlet-mapping&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-name&gt;snoop&lt;/servlet-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;url-pattern&gt;/snoop&lt;/url-pattern&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;/servlet-mapping&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;元素说明&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet&gt;&lt;/servlet&gt;&nbsp;用来声明一个servlet的数据，主要有以下子元素：&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-name&gt;&lt;/servlet-name&gt;&nbsp;指定servlet的名称&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-class&gt;&lt;/servlet-class&gt;&nbsp;指定servlet的类名称&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;jsp-file&gt;&lt;/jsp-file&gt;&nbsp;指定web站台中的某个JSP网页的完整路径&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;init-param&gt;&lt;/init-param&gt;&nbsp;用来定义参数，可有多个init-param。在servlet类中通过getInitParamenter(String&nbsp;name)方法访问初始化参数&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;load-on-startup&gt;&lt;/load-on-startup&gt;指定当Web应用启动时，装载Servlet的次序。&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当值为正数或零时：Servlet容器先加载数值小的servlet，再依次加载其他数值大的servlet.&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当值为负或未定义：Servlet容器将在Web客户首次访问这个servlet时加载它&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-mapping&gt;&lt;/servlet-mapping&gt;&nbsp;用来定义servlet所对应的URL，包含两个子元素&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-name&gt;&lt;/servlet-name&gt;&nbsp;指定servlet的名称&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;url-pattern&gt;&lt;/url-pattern&gt;&nbsp;指定servlet所对应的URL&nbsp;&nbsp;&nbsp;</li>
    <li>8、会话超时配置（单位为分钟）&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;session-config&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;session-timeout&gt;120&lt;/session-timeout&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;/session-config&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>9、MIME类型配置&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;mime-mapping&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;extension&gt;htm&lt;/extension&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;mime-type&gt;text/html&lt;/mime-type&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;/mime-mapping&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>10、指定欢迎文件页配置&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;welcome-file-list&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;welcome-file&gt;index.html&lt;/welcome-file&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;welcome-file&gt;index.htm&lt;/welcome-file&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;/welcome-file-list&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>11、配置错误页面&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;一、&nbsp;通过错误码来配置error-page&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;error-page&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;error-code&gt;404&lt;/error-code&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;location&gt;/NotFound.jsp&lt;/location&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;/error-page&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;上面配置了当系统发生404错误时，跳转到错误处理页面NotFound.jsp。&nbsp;&nbsp;&nbsp;</li>
    <li>二、通过异常的类型配置error-page&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;error-page&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;exception-type&gt;java.lang.NullException&lt;/exception-type&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;location&gt;/error.jsp&lt;/location&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;/error-page&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;上面配置了当系统发生java.lang.NullException（即空指针异常）时，跳转到错误处理页面error.jsp&nbsp;&nbsp;&nbsp;</li>
    <li>12、TLD配置&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;taglib&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;taglib-uri&gt;http://jakarta.apache.org/tomcat/debug-taglib&lt;/taglib-uri&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;taglib-location&gt;/WEB-INF/jsp/debug-taglib.tld&lt;/taglib-location&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;/taglib&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;如果MyEclipse一直在报错,应该把&lt;taglib&gt;&nbsp;放到&nbsp;&lt;jsp-config&gt;中&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;jsp-config&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;taglib&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;taglib-uri&gt;http://jakarta.apache.org/tomcat/debug-taglib&lt;/taglib-uri&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;taglib-location&gt;/WEB-INF/pager-taglib.tld&lt;/taglib-location&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/taglib&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;/jsp-config&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>13、资源管理对象配置&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;resource-env-ref&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;resource-env-ref-name&gt;jms/StockQueue&lt;/resource-env-ref-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;/resource-env-ref&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>14、资源工厂配置&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;resource-ref&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;res-ref-name&gt;mail/Session&lt;/res-ref-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;res-type&gt;javax.mail.Session&lt;/res-type&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;res-auth&gt;Container&lt;/res-auth&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;/resource-ref&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;配置数据库连接池就可在此配置：&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;resource-ref&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;description&gt;JNDI&nbsp;JDBC&nbsp;DataSource&nbsp;of&nbsp;shop&lt;/description&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;res-ref-name&gt;jdbc/sample_db&lt;/res-ref-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;res-auth&gt;Container&lt;/res-auth&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;/resource-ref&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>15、安全限制配置&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;security-constraint&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;display-name&gt;Example&nbsp;Security&nbsp;Constraint&lt;/display-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;web-resource-collection&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;web-resource-name&gt;Protected&nbsp;Area&lt;/web-resource-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;url-pattern&gt;/jsp/security/protected/*&lt;/url-pattern&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;http-method&gt;DELETE&lt;/http-method&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;http-method&gt;GET&lt;/http-method&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;http-method&gt;POST&lt;/http-method&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;http-method&gt;PUT&lt;/http-method&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/web-resource-collection&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;auth-constraint&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;role-name&gt;tomcat&lt;/role-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;role-name&gt;role1&lt;/role-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/auth-constraint&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;/security-constraint&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>16、登陆验证配置&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;login-config&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;auth-method&gt;FORM&lt;/auth-method&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;realm-name&gt;Example-Based&nbsp;Authentiation&nbsp;Area&lt;/realm-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;form-login-config&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;form-login-page&gt;/jsp/security/protected/login.jsp&lt;/form-login-page&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;form-error-page&gt;/jsp/security/protected/error.jsp&lt;/form-error-page&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/form-login-config&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;/login-config&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>17、安全角色：security-role元素给出安全角色的一个列表，这些角色将出现在servlet元素内的security-role-ref元素的role-name子元素中。&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;分别地声明角色可使高级IDE处理安全信息更为容易。&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;security-role&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;role-name&gt;tomcat&lt;/role-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;/security-role&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>18、Web环境参数：env-entry元素声明Web应用的环境项&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;env-entry&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;env-entry-name&gt;minExemptions&lt;/env-entry-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;env-entry-value&gt;1&lt;/env-entry-value&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;env-entry-type&gt;java.lang.Integer&lt;/env-entry-type&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;/env-entry&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>19、EJB&nbsp;声明&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;ejb-ref&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;description&gt;Example&nbsp;EJB&nbsp;reference&lt;/decription&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ejb-ref-name&gt;ejb/Account&lt;/ejb-ref-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ejb-ref-type&gt;Entity&lt;/ejb-ref-type&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;home&gt;com.mycompany.mypackage.AccountHome&lt;/home&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;remote&gt;com.mycompany.mypackage.Account&lt;/remote&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;/ejb-ref&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>20、本地EJB声明&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;ejb-local-ref&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;description&gt;Example&nbsp;Loacal&nbsp;EJB&nbsp;reference&lt;/decription&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ejb-ref-name&gt;ejb/ProcessOrder&lt;/ejb-ref-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ejb-ref-type&gt;Session&lt;/ejb-ref-type&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;local-home&gt;com.mycompany.mypackage.ProcessOrderHome&lt;/local-home&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;local&gt;com.mycompany.mypackage.ProcessOrder&lt;/local&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;/ejb-local-ref&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>21、配置DWR&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;servlet&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-class&gt;uk.ltd.getahead.dwr.DWRServlet&lt;/servlet-class&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;/servlet&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;servlet-mapping&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;url-pattern&gt;/dwr/*&lt;/url-pattern&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;/servlet-mapping&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>22、配置Struts&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;display-name&gt;Struts&nbsp;Blank&nbsp;Application&lt;/display-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-name&gt;action&lt;/servlet-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-class&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.struts.action.ActionServlet&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/servlet-class&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;init-param&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-name&gt;detail&lt;/param-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-value&gt;2&lt;/param-value&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/init-param&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;init-param&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-name&gt;debug&lt;/param-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-value&gt;2&lt;/param-value&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/init-param&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;init-param&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-name&gt;config&lt;/param-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-value&gt;/WEB-INF/struts-config.xml&lt;/param-value&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/init-param&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;init-param&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-name&gt;application&lt;/param-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-value&gt;ApplicationResources&lt;/param-value&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/init-param&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;load-on-startup&gt;2&lt;/load-on-startup&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/servlet&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-mapping&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;servlet-name&gt;action&lt;/servlet-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;url-pattern&gt;*.do&lt;/url-pattern&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/servlet-mapping&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;welcome-file-list&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/welcome-file-list&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--&nbsp;Struts&nbsp;Tag&nbsp;Library&nbsp;Descriptors&nbsp;--&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;taglib&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;taglib-uri&gt;struts-bean&lt;/taglib-uri&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;taglib-location&gt;/WEB-INF/tld/struts-bean.tld&lt;/taglib-location&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/taglib&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;taglib&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;taglib-uri&gt;struts-html&lt;/taglib-uri&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;taglib-location&gt;/WEB-INF/tld/struts-html.tld&lt;/taglib-location&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/taglib&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;taglib&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;taglib-uri&gt;struts-nested&lt;/taglib-uri&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;taglib-location&gt;/WEB-INF/tld/struts-nested.tld&lt;/taglib-location&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/taglib&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;taglib&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;taglib-uri&gt;struts-logic&lt;/taglib-uri&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;taglib-location&gt;/WEB-INF/tld/struts-logic.tld&lt;/taglib-location&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/taglib&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;taglib&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;taglib-uri&gt;struts-tiles&lt;/taglib-uri&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;taglib-location&gt;/WEB-INF/tld/struts-tiles.tld&lt;/taglib-location&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/taglib&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>23、配置Spring（基本上都是在Struts中配置的）&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;!--&nbsp;指定spring配置文件位置&nbsp;--&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;context-param&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;param-value&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--加载多个spring配置文件&nbsp;--&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/WEB-INF/applicationContext.xml,&nbsp;/WEB-INF/action-servlet.xml&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/param-value&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;/context-param&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;!--&nbsp;定义SPRING监听器，加载spring&nbsp;--&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;listener&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;/listener&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;listener&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;listener-class&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.springframework.web.context.request.RequestContextListener&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/listener-class&gt;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;/listener&gt;&nbsp;&nbsp;&nbsp;</li>
</ol>
</div>
<pre style="display: none;" name="code" class="xml">Web.xml常用元素
&lt;web-app&gt;
&lt;display-name&gt;&lt;/display-name&gt;定义了WEB应用的名字
&lt;description&gt;&lt;/description&gt; 声明WEB应用的描述信息
&lt;context-param&gt;&lt;/context-param&gt; context-param元素声明应用范围内的初始化参数。
&lt;filter&gt;&lt;/filter&gt; 过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。
&lt;filter-mapping&gt;&lt;/filter-mapping&gt; 一旦命名了一个过滤器，就要利用filter-mapping元素把它与一个或多个servlet或JSP页面相关联。
&lt;listener&gt;&lt;/listener&gt;servlet API的版本2.3增加了对事件监听程序的支持，事件监听程序在建立、修改和删除会话或servlet环境时得到通知。
Listener元素指出事件监听程序类。
&lt;servlet&gt;&lt;/servlet&gt; 在向servlet或JSP页面制定初始化参数或定制URL时，必须首先命名servlet或JSP页面。Servlet元素就是用来完成此项任务的。
&lt;servlet-mapping&gt;&lt;/servlet-mapping&gt; 服务器一般为servlet提供一个缺省的URL：http://host/webAppPrefix/servlet/ServletName。
但是，常常会更改这个URL，以便servlet可以访问初始化参数或更容易地处理相对URL。在更改缺省URL时，使用servlet-mapping元素。
&lt;session-config&gt;&lt;/session-config&gt; 如果某个会话在一定时间内未被访问，服务器可以抛弃它以节省内存。
可通过使用HttpSession的setMaxInactiveInterval方法明确设置单个会话对象的超时值，或者可利用session-config元素制定缺省超时值。
&lt;mime-mapping&gt;&lt;/mime-mapping&gt;如果Web应用具有想到特殊的文件，希望能保证给他们分配特定的MIME类型，则mime-mapping元素提供这种保证。
&lt;welcome-file-list&gt;&lt;/welcome-file-list&gt; 指示服务器在收到引用一个目录名而不是文件名的URL时，使用哪个文件。
&lt;error-page&gt;&lt;/error-page&gt; 在返回特定HTTP状态代码时，或者特定类型的异常被抛出时，能够制定将要显示的页面。
&lt;taglib&gt;&lt;/taglib&gt; 对标记库描述符文件（Tag Libraryu Descriptor file）指定别名。此功能使你能够更改TLD文件的位置，
而不用编辑使用这些文件的JSP页面。
&lt;resource-env-ref&gt;&lt;/resource-env-ref&gt;声明与资源相关的一个管理对象。
&lt;resource-ref&gt;&lt;/resource-ref&gt; 声明一个资源工厂使用的外部资源。
&lt;security-constraint&gt;&lt;/security-constraint&gt; 制定应该保护的URL。它与login-config元素联合使用
&lt;login-config&gt;&lt;/login-config&gt; 指定服务器应该怎样给试图访问受保护页面的用户授权。它与sercurity-constraint元素联合使用。
&lt;security-role&gt;&lt;/security-role&gt;给出安全角色的一个列表，这些角色将出现在servlet元素内的security-role-ref元素
的role-name子元素中。分别地声明角色可使高级IDE处理安全信息更为容易。
&lt;env-entry&gt;&lt;/env-entry&gt;声明Web应用的环境项。
&lt;ejb-ref&gt;&lt;/ejb-ref&gt;声明一个EJB的主目录的引用。
&lt; ejb-local-ref&gt;&lt;/ ejb-local-ref&gt;声明一个EJB的本地主目录的应用。
&lt;/web-app&gt;
相应元素配置
1、Web应用图标：指出IDE和GUI工具用来表示Web应用的大图标和小图标
&lt;icon&gt;
&lt;small-icon&gt;/images/app_small.gif&lt;/small-icon&gt;
&lt;large-icon&gt;/images/app_large.gif&lt;/large-icon&gt;
&lt;/icon&gt;
2、Web 应用名称：提供GUI工具可能会用来标记这个特定的Web应用的一个名称
&lt;display-name&gt;Tomcat Example&lt;/display-name&gt;
3、Web 应用描述： 给出于此相关的说明性文本
&lt;disciption&gt;Tomcat Example servlets and JSP pages.&lt;/disciption&gt;
4、上下文参数：声明应用范围内的初始化参数。
&lt;context-param&gt;
&lt;param-name&gt;ContextParameter&lt;/para-name&gt;
&lt;param-value&gt;test&lt;/param-value&gt;
&lt;description&gt;It is a test parameter.&lt;/description&gt;
&lt;/context-param&gt;
在servlet里面可以通过getServletContext().getInitParameter("context/param")得到
5、过滤器配置：将一个名字与一个实现javaxs.servlet.Filter接口的类相关联。
&lt;filter&gt;
&lt;filter-name&gt;setCharacterEncoding&lt;/filter-name&gt;
&lt;filter-class&gt;com.myTest.setCharacterEncodingFilter&lt;/filter-class&gt;
&lt;init-param&gt;
&lt;param-name&gt;encoding&lt;/param-name&gt;
&lt;param-value&gt;GB2312&lt;/param-value&gt;
&lt;/init-param&gt;
&lt;/filter&gt;
&lt;filter-mapping&gt;
&lt;filter-name&gt;setCharacterEncoding&lt;/filter-name&gt;
&lt;url-pattern&gt;/*&lt;/url-pattern&gt;
&lt;/filter-mapping&gt;
6、监听器配置
&lt;listener&gt;
&lt;listerner-class&gt;listener.SessionListener&lt;/listener-class&gt;
&lt;/listener&gt;
7、Servlet配置
基本配置
&lt;servlet&gt;
&lt;servlet-name&gt;snoop&lt;/servlet-name&gt;
&lt;servlet-class&gt;SnoopServlet&lt;/servlet-class&gt;
&lt;/servlet&gt;
&lt;servlet-mapping&gt;
&lt;servlet-name&gt;snoop&lt;/servlet-name&gt;
&lt;url-pattern&gt;/snoop&lt;/url-pattern&gt;
&lt;/servlet-mapping&gt;
高级配置
&lt;servlet&gt;
&lt;servlet-name&gt;snoop&lt;/servlet-name&gt;
&lt;servlet-class&gt;SnoopServlet&lt;/servlet-class&gt;
&lt;init-param&gt;
&lt;param-name&gt;foo&lt;/param-name&gt;
&lt;param-value&gt;bar&lt;/param-value&gt;
&lt;/init-param&gt;
&lt;run-as&gt;
&lt;description&gt;Security role for anonymous access&lt;/description&gt;
&lt;role-name&gt;tomcat&lt;/role-name&gt;
&lt;/run-as&gt;
&lt;/servlet&gt;
&lt;servlet-mapping&gt;
&lt;servlet-name&gt;snoop&lt;/servlet-name&gt;
&lt;url-pattern&gt;/snoop&lt;/url-pattern&gt;
&lt;/servlet-mapping&gt;
元素说明
&lt;servlet&gt;&lt;/servlet&gt; 用来声明一个servlet的数据，主要有以下子元素：
&lt;servlet-name&gt;&lt;/servlet-name&gt; 指定servlet的名称
&lt;servlet-class&gt;&lt;/servlet-class&gt; 指定servlet的类名称
&lt;jsp-file&gt;&lt;/jsp-file&gt; 指定web站台中的某个JSP网页的完整路径
&lt;init-param&gt;&lt;/init-param&gt; 用来定义参数，可有多个init-param。在servlet类中通过getInitParamenter(String name)方法访问初始化参数
&lt;load-on-startup&gt;&lt;/load-on-startup&gt;指定当Web应用启动时，装载Servlet的次序。
当值为正数或零时：Servlet容器先加载数值小的servlet，再依次加载其他数值大的servlet.
当值为负或未定义：Servlet容器将在Web客户首次访问这个servlet时加载它
&lt;servlet-mapping&gt;&lt;/servlet-mapping&gt; 用来定义servlet所对应的URL，包含两个子元素
&lt;servlet-name&gt;&lt;/servlet-name&gt; 指定servlet的名称
&lt;url-pattern&gt;&lt;/url-pattern&gt; 指定servlet所对应的URL
8、会话超时配置（单位为分钟）
&lt;session-config&gt;
&lt;session-timeout&gt;120&lt;/session-timeout&gt;
&lt;/session-config&gt;
9、MIME类型配置
&lt;mime-mapping&gt;
&lt;extension&gt;htm&lt;/extension&gt;
&lt;mime-type&gt;text/html&lt;/mime-type&gt;
&lt;/mime-mapping&gt;
10、指定欢迎文件页配置
&lt;welcome-file-list&gt;
&lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;
&lt;welcome-file&gt;index.html&lt;/welcome-file&gt;
&lt;welcome-file&gt;index.htm&lt;/welcome-file&gt;
&lt;/welcome-file-list&gt;
11、配置错误页面
一、 通过错误码来配置error-page
&lt;error-page&gt;
&lt;error-code&gt;404&lt;/error-code&gt;
&lt;location&gt;/NotFound.jsp&lt;/location&gt;
&lt;/error-page&gt;
上面配置了当系统发生404错误时，跳转到错误处理页面NotFound.jsp。
二、通过异常的类型配置error-page
&lt;error-page&gt;
&lt;exception-type&gt;java.lang.NullException&lt;/exception-type&gt;
&lt;location&gt;/error.jsp&lt;/location&gt;
&lt;/error-page&gt;
上面配置了当系统发生java.lang.NullException（即空指针异常）时，跳转到错误处理页面error.jsp
12、TLD配置
&lt;taglib&gt;
&lt;taglib-uri&gt;http://jakarta.apache.org/tomcat/debug-taglib&lt;/taglib-uri&gt;
&lt;taglib-location&gt;/WEB-INF/jsp/debug-taglib.tld&lt;/taglib-location&gt;
&lt;/taglib&gt;
如果MyEclipse一直在报错,应该把&lt;taglib&gt; 放到 &lt;jsp-config&gt;中
&lt;jsp-config&gt;
&lt;taglib&gt;
&lt;taglib-uri&gt;http://jakarta.apache.org/tomcat/debug-taglib&lt;/taglib-uri&gt;
&lt;taglib-location&gt;/WEB-INF/pager-taglib.tld&lt;/taglib-location&gt;
&lt;/taglib&gt;
&lt;/jsp-config&gt;
13、资源管理对象配置
&lt;resource-env-ref&gt;
&lt;resource-env-ref-name&gt;jms/StockQueue&lt;/resource-env-ref-name&gt;
&lt;/resource-env-ref&gt;
14、资源工厂配置
&lt;resource-ref&gt;
&lt;res-ref-name&gt;mail/Session&lt;/res-ref-name&gt;
&lt;res-type&gt;javax.mail.Session&lt;/res-type&gt;
&lt;res-auth&gt;Container&lt;/res-auth&gt;
&lt;/resource-ref&gt;
配置数据库连接池就可在此配置：
&lt;resource-ref&gt;
&lt;description&gt;JNDI JDBC DataSource of shop&lt;/description&gt;
&lt;res-ref-name&gt;jdbc/sample_db&lt;/res-ref-name&gt;
&lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;
&lt;res-auth&gt;Container&lt;/res-auth&gt;
&lt;/resource-ref&gt;
15、安全限制配置
&lt;security-constraint&gt;
&lt;display-name&gt;Example Security Constraint&lt;/display-name&gt;
&lt;web-resource-collection&gt;
&lt;web-resource-name&gt;Protected Area&lt;/web-resource-name&gt;
&lt;url-pattern&gt;/jsp/security/protected/*&lt;/url-pattern&gt;
&lt;http-method&gt;DELETE&lt;/http-method&gt;
&lt;http-method&gt;GET&lt;/http-method&gt;
&lt;http-method&gt;POST&lt;/http-method&gt;
&lt;http-method&gt;PUT&lt;/http-method&gt;
&lt;/web-resource-collection&gt;
&lt;auth-constraint&gt;
&lt;role-name&gt;tomcat&lt;/role-name&gt;
&lt;role-name&gt;role1&lt;/role-name&gt;
&lt;/auth-constraint&gt;
&lt;/security-constraint&gt;
16、登陆验证配置
&lt;login-config&gt;
&lt;auth-method&gt;FORM&lt;/auth-method&gt;
&lt;realm-name&gt;Example-Based Authentiation Area&lt;/realm-name&gt;
&lt;form-login-config&gt;
&lt;form-login-page&gt;/jsp/security/protected/login.jsp&lt;/form-login-page&gt;
&lt;form-error-page&gt;/jsp/security/protected/error.jsp&lt;/form-error-page&gt;
&lt;/form-login-config&gt;
&lt;/login-config&gt;
17、安全角色：security-role元素给出安全角色的一个列表，这些角色将出现在servlet元素内的security-role-ref元素的role-name子元素中。
分别地声明角色可使高级IDE处理安全信息更为容易。
&lt;security-role&gt;
&lt;role-name&gt;tomcat&lt;/role-name&gt;
&lt;/security-role&gt;
18、Web环境参数：env-entry元素声明Web应用的环境项
&lt;env-entry&gt;
&lt;env-entry-name&gt;minExemptions&lt;/env-entry-name&gt;
&lt;env-entry-value&gt;1&lt;/env-entry-value&gt;
&lt;env-entry-type&gt;java.lang.Integer&lt;/env-entry-type&gt;
&lt;/env-entry&gt;
19、EJB 声明
&lt;ejb-ref&gt;
&lt;description&gt;Example EJB reference&lt;/decription&gt;
&lt;ejb-ref-name&gt;ejb/Account&lt;/ejb-ref-name&gt;
&lt;ejb-ref-type&gt;Entity&lt;/ejb-ref-type&gt;
&lt;home&gt;com.mycompany.mypackage.AccountHome&lt;/home&gt;
&lt;remote&gt;com.mycompany.mypackage.Account&lt;/remote&gt;
&lt;/ejb-ref&gt;
20、本地EJB声明
&lt;ejb-local-ref&gt;
&lt;description&gt;Example Loacal EJB reference&lt;/decription&gt;
&lt;ejb-ref-name&gt;ejb/ProcessOrder&lt;/ejb-ref-name&gt;
&lt;ejb-ref-type&gt;Session&lt;/ejb-ref-type&gt;
&lt;local-home&gt;com.mycompany.mypackage.ProcessOrderHome&lt;/local-home&gt;
&lt;local&gt;com.mycompany.mypackage.ProcessOrder&lt;/local&gt;
&lt;/ejb-local-ref&gt;
21、配置DWR
&lt;servlet&gt;
&lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;
&lt;servlet-class&gt;uk.ltd.getahead.dwr.DWRServlet&lt;/servlet-class&gt;
&lt;/servlet&gt;
&lt;servlet-mapping&gt;
&lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;
&lt;url-pattern&gt;/dwr/*&lt;/url-pattern&gt;
&lt;/servlet-mapping&gt;
22、配置Struts
&lt;display-name&gt;Struts Blank Application&lt;/display-name&gt;
&lt;servlet&gt;
&lt;servlet-name&gt;action&lt;/servlet-name&gt;
&lt;servlet-class&gt;
org.apache.struts.action.ActionServlet
&lt;/servlet-class&gt;
&lt;init-param&gt;
&lt;param-name&gt;detail&lt;/param-name&gt;
&lt;param-value&gt;2&lt;/param-value&gt;
&lt;/init-param&gt;
&lt;init-param&gt;
&lt;param-name&gt;debug&lt;/param-name&gt;
&lt;param-value&gt;2&lt;/param-value&gt;
&lt;/init-param&gt;
&lt;init-param&gt;
&lt;param-name&gt;config&lt;/param-name&gt;
&lt;param-value&gt;/WEB-INF/struts-config.xml&lt;/param-value&gt;
&lt;/init-param&gt;
&lt;init-param&gt;
&lt;param-name&gt;application&lt;/param-name&gt;
&lt;param-value&gt;ApplicationResources&lt;/param-value&gt;
&lt;/init-param&gt;
&lt;load-on-startup&gt;2&lt;/load-on-startup&gt;
&lt;/servlet&gt;
&lt;servlet-mapping&gt;
&lt;servlet-name&gt;action&lt;/servlet-name&gt;
&lt;url-pattern&gt;*.do&lt;/url-pattern&gt;
&lt;/servlet-mapping&gt;
&lt;welcome-file-list&gt;
&lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;
&lt;/welcome-file-list&gt;
&lt;!-- Struts Tag Library Descriptors --&gt;
&lt;taglib&gt;
&lt;taglib-uri&gt;struts-bean&lt;/taglib-uri&gt;
&lt;taglib-location&gt;/WEB-INF/tld/struts-bean.tld&lt;/taglib-location&gt;
&lt;/taglib&gt;
&lt;taglib&gt;
&lt;taglib-uri&gt;struts-html&lt;/taglib-uri&gt;
&lt;taglib-location&gt;/WEB-INF/tld/struts-html.tld&lt;/taglib-location&gt;
&lt;/taglib&gt;
&lt;taglib&gt;
&lt;taglib-uri&gt;struts-nested&lt;/taglib-uri&gt;
&lt;taglib-location&gt;/WEB-INF/tld/struts-nested.tld&lt;/taglib-location&gt;
&lt;/taglib&gt;
&lt;taglib&gt;
&lt;taglib-uri&gt;struts-logic&lt;/taglib-uri&gt;
&lt;taglib-location&gt;/WEB-INF/tld/struts-logic.tld&lt;/taglib-location&gt;
&lt;/taglib&gt;
&lt;taglib&gt;
&lt;taglib-uri&gt;struts-tiles&lt;/taglib-uri&gt;
&lt;taglib-location&gt;/WEB-INF/tld/struts-tiles.tld&lt;/taglib-location&gt;
&lt;/taglib&gt;
23、配置Spring（基本上都是在Struts中配置的）
&lt;!-- 指定spring配置文件位置 --&gt;
&lt;context-param&gt;
&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;
&lt;param-value&gt;
&lt;!--加载多个spring配置文件 --&gt;
/WEB-INF/applicationContext.xml, /WEB-INF/action-servlet.xml
&lt;/param-value&gt;
&lt;/context-param&gt;
&lt;!-- 定义SPRING监听器，加载spring --&gt;
&lt;listener&gt;
&lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;
&lt;/listener&gt;
&lt;listener&gt;
&lt;listener-class&gt;
org.springframework.web.context.request.RequestContextListener
&lt;/listener-class&gt;
&lt;/listener&gt; </pre>
<br />
<img src ="http://www.blogjava.net/caizh2009/aggbug/333562.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caizh2009/" target="_blank">小菜毛毛</a> 2010-09-30 16:33 <a href="http://www.blogjava.net/caizh2009/archive/2010/09/30/333562.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat中web.xml文件的详细说明 </title><link>http://www.blogjava.net/caizh2009/archive/2010/09/30/333555.html</link><dc:creator>小菜毛毛</dc:creator><author>小菜毛毛</author><pubDate>Thu, 30 Sep 2010 08:06:00 GMT</pubDate><guid>http://www.blogjava.net/caizh2009/archive/2010/09/30/333555.html</guid><wfw:comment>http://www.blogjava.net/caizh2009/comments/333555.html</wfw:comment><comments>http://www.blogjava.net/caizh2009/archive/2010/09/30/333555.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caizh2009/comments/commentRss/333555.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caizh2009/services/trackbacks/333555.html</trackback:ping><description><![CDATA[<p>Tomcat中web.xml文件的详细说明 <br />
&lt;?xml version="1.0" encoding="GB2312"?&gt; &lt;!-- <br />
Web.xml依次定议了如下元素： <br />
&lt;web-app&gt; <br />
&lt;display-name&gt;&lt;/display-name&gt; 定义了WEB应用的名字 <br />
&lt;description&gt;&lt;/description&gt; 声明WEB应用的描述信息 <br />
&lt;filter&gt;&lt;/filter&gt; <br />
&lt;filter-mapping&gt;&lt;/filter-mapping&gt; <br />
&lt;servlet&gt;&lt;/servlet&gt; <br />
&lt;servlet-mapping&gt;&lt;/servlet-mapping&gt; <br />
&lt;session-config&gt;&lt;/session-config&gt; <br />
&lt;welcome-file-list&gt;&lt;/welcome-file-list&gt; <br />
&lt;taglib&gt;&lt;/taglib&gt; <br />
&lt;resource-ref&gt;&lt;/resource-ref&gt; <br />
&lt;security-constraint&gt;&lt;/security-constraint&gt; <br />
&lt;login-config&gt;&lt;/login-config&gt; <br />
&lt;/web-app&gt; <br />
在web.xml中元素定义的先后顺序不能颠倒，否则Tomcat服务器可能会抛出SAXParseException. <br />
--&gt; <br />
&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN" "<a href="http://java.sun.com/dtd/web-app_2_3.dtd">http://java.sun.com/dtd/web-app_2_3.dtd</a>"&gt; <br />
&lt;web-app&gt; </p>
<p>&lt;display-name&gt;Sample Application&lt;/display-name&gt; </p>
<p>&lt;description&gt; <br />
This is a Sample Application <br />
&lt;/description&gt; </p>
<p>&lt;!-- <br />
filter 配置Servlet过滤器 <br />
filter-name 定义过滤器的名字。当有多个过滤器时，不能同名 <br />
filter-class 指定实现这一过滤的类，这个类负责具体的过滤事务 <br />
--&gt; <br />
&lt;filter&gt; <br />
&lt;filter-name&gt;SampleFilter&lt;/filter-name&gt; <br />
&lt;filter-class&gt;mypack.SampleFilter&lt;/filter-class&gt; <br />
&lt;/filter&gt; </p>
<p>&lt;!-- <br />
filter-mapping 设定过滤器负责过滤的URL <br />
filter-name 过滤器名。这里的名字一定要和filter中的过滤器名匹配 <br />
url-pattern 指定过滤器负责过滤的URL <br />
--&gt; <br />
&lt;filter-mapping&gt; <br />
&lt;filter-name&gt;SampleFilter&lt;/filter-name&gt; <br />
&lt;url-pattern&gt;*.jsp&lt;/url-pattern&gt; <br />
&lt;/filter-mapping&gt; </p>
<p>&lt;!-- <br />
servlet 配置Servlet. <br />
servlet-name 定义Servlet的名字 <br />
servlet-class 指定实现这个servlet的类 <br />
init-param 定义Servlet的初始化参数和参数值，可有多个init-param。在servlet类中通过getInitParamenter(String name)方法访问初始化参数 <br />
load-on-startup 指定当Web应用启动时，装载Servlet的次序。 <br />
当值为正数或零时：Servlet容器先加载数值小的servlet，再依次加载其他数值大的servlet. <br />
当值为负或未定义：Servlet容器将在Web客户首次访问这个servlet时加载它 <br />
--&gt; <br />
&lt;servlet&gt; <br />
&lt;servlet-name&gt;SampleServlet&lt;/servlet-name&gt; <br />
&lt;servlet-class&gt;mypack.SampleServlet&lt;/servlet-class&gt; <br />
&lt;init-param&gt; <br />
&lt;param-name&gt;initParam1&lt;/param-name&gt; <br />
&lt;param-value&gt;2&lt;/param-value&gt; <br />
&lt;/init-param&gt; <br />
&lt;load-on-startup&gt;1&lt;/load-on-startup&gt; <br />
&lt;/servlet&gt; </p>
<p>&lt;!-- <br />
配置servlet映射（下面代码为SampleServlet指定的相对URL为"/sample": <br />
servlet-name 指定servlet的名字，这里的名字应该和&lt;Servlet&gt;元素中定义的名字匹配。 <br />
url-pattern 指定访问这个servlet的URL。只需给出相对路径。 <br />
--&gt; <br />
&lt;servlet-mapping&gt; <br />
&lt;servlet-name&gt;SampleServlet&lt;/servlet-name&gt; <br />
&lt;url-pattern&gt;/sample&lt;/url-pattern&gt; <br />
&lt;/servlet-mapping&gt; </p>
<p>&lt;!--配置session session用来设定HttpSession的生命周期。单位（秒）--&gt; <br />
&lt;session-config&gt; <br />
&lt;session-timeout&gt;30&lt;/session-timeout&gt; <br />
&lt;/session-config&gt; </p>
<p>&lt;!--配置Wel0come0文件清单--&gt; <br />
&lt;welcome-file-list&gt; <br />
&lt;welcome-file&gt;login.jsp&lt;/welcome-file&gt; <br />
&lt;welcome-file&gt;index.htm&lt;/welcome-file&gt; <br />
&lt;/welcome-file-list&gt; </p>
<p>&lt;!-- <br />
配置Tag Library <br />
taglib-uri 设定Tag Library的唯一标识符，在Web应用中将根据这一标识符来引用Tag Library <br />
taglib-location 指定和Tag Library对应的TLD文件的位置 <br />
--&gt; <br />
&lt;taglib&gt; <br />
&lt;taglib-uri&gt;/mytaglib&lt;/taglib-uri&gt; <br />
&lt;taglib-location&gt;/WEB-INF/mytaglib.tld&lt;/taglib-location&gt; <br />
&lt;/taglib&gt; </p>
<p>&lt;!-- <br />
配置资源引用 <br />
description 对所引用的资源的说明 <br />
res-ref-name 指定所引用资源的JNDI名字 <br />
res-type 指定所引用资源的类名字 <br />
res-auth 指定管理所引用资源的Manager,它有两个可选值： <br />
Container：由容器来创建和管理resource <br />
Application:同WEB应用来创建和管理Resource <br />
--&gt; <br />
&lt;resource-ref&gt; <br />
&lt;description&gt;DB Connection&lt;/description&gt; <br />
&lt;res-ref-name&gt;jdbc/sampleDB&lt;/res-ref-name&gt; <br />
&lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt; <br />
&lt;res-auth&gt;Container&lt;/res-auth&gt; <br />
&lt;/resource-ref&gt; </p>
<p>&lt;!-- <br />
配置安全约束（以下代码指定当用户访问该WEB应用下的所有资源时，必须具备guest角色） <br />
web-resource-collection 声明受保护的WEB资源 <br />
auth-constraint 声明可以访问受保护资源的角色，可以包含多个&lt;role-name&gt;子元素 </p>
<p>web-resource-name 标识受保护的WEB资源 <br />
url-pattern 指定受保护的URL路径 <br />
--&gt; <br />
&lt;Security-constraint&gt; <br />
&lt;web-resource-collection&gt; <br />
&lt;web-resource-name&gt;sample appliction&lt;/web-resource-name&gt; <br />
&lt;url-pattern&gt;/*&lt;/url-pattern&gt; <br />
&lt;/web-resource-collection&gt; <br />
&lt;auth-constraint&gt; <br />
&lt;role-name&gt;guest&lt;/role-name&gt; <br />
&lt;/auth-constraint&gt; <br />
&lt;/Security-constraint&gt; </p>
<p><br />
&lt;!-- <br />
配置安全验证登录界面：指定当WEB客户访问受保护的WEB资源时，系统弹出的登录对话框的类型。 <br />
auth-method 指定验证方法，它有三个可选值：BASIC(基本验证)、DIGEST(摘要验证)、FORM(表单验证) <br />
realm-name 设定安全域的名称 <br />
form-login-config 当验证方法为FORM时，配置验证网页和出错网页 <br />
form-login-page 当验证方法为FORM时，设定验证网页 <br />
form-error-page 当验证方法为FORM时，设定出错网页 <br />
--&gt; <br />
&lt;login-config&gt; <br />
&lt;auth-method&gt;FORM&lt;/auth-method&gt; <br />
&lt;realm-name&gt; <br />
Tomcat Server Configuration form-Based Authentication Area <br />
&lt;/realm-name&gt; <br />
&lt;form-login-config&gt; <br />
&lt;form-login-page&gt;/login.jsp&lt;/form-login-page&gt; <br />
&lt;form-error-page&gt;/error.jsp&lt;/form-error-page&gt; <br />
&lt;/form-login-config&gt; <br />
&lt;/login-config&gt; </p>
<p>&lt;!--配置对安全验证角色的引用--&gt; <br />
&lt;security-role&gt; <br />
&lt;description&gt; <br />
The role that is required to log into the sample application <br />
&lt;/description&gt; <br />
&lt;role-name&gt;guest&lt;/role-name&gt; <br />
&lt;/security-role&gt; <br />
&lt;/web-app&gt; </p>
<img src ="http://www.blogjava.net/caizh2009/aggbug/333555.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caizh2009/" target="_blank">小菜毛毛</a> 2010-09-30 16:06 <a href="http://www.blogjava.net/caizh2009/archive/2010/09/30/333555.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java定时器 web</title><link>http://www.blogjava.net/caizh2009/archive/2010/09/30/333545.html</link><dc:creator>小菜毛毛</dc:creator><author>小菜毛毛</author><pubDate>Thu, 30 Sep 2010 06:56:00 GMT</pubDate><guid>http://www.blogjava.net/caizh2009/archive/2010/09/30/333545.html</guid><wfw:comment>http://www.blogjava.net/caizh2009/comments/333545.html</wfw:comment><comments>http://www.blogjava.net/caizh2009/archive/2010/09/30/333545.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caizh2009/comments/commentRss/333545.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caizh2009/services/trackbacks/333545.html</trackback:ping><description><![CDATA[http://wangguorui89.javaeye.com/blog/428345<br />
<h3><a href="http://callan.javaeye.com/blog/123374">Java定时器在Web中的应用</a></h3>
关键字: java, 定时器, timertask
<p>在web中,定时器的启动一般随web server的启动而启动,一般有两种方法.</p>
<p>方法一：在web.xml里配置一个Servlet，并设置其随web server的启动而启动。然后在该Servlet的init()方法里启动定时器，在destory()方法里销毁定时器。<br />
方法二：在web.xml里配置一个Listener,然后在该Listener的初始化方法里启动定时器，在其销毁的方法朝左销毁定时器。</p>
<div>在servlet中启动定时器</div>
<div>java 代码</div>
<div>
<ol>
    <li>import&nbsp;java.io.IOException; &nbsp;&nbsp; </li>
    <li>import&nbsp;java.util.Timer; &nbsp;&nbsp; </li>
    <li>import&nbsp;javax.servlet.RequestDispatcher; &nbsp;&nbsp; </li>
    <li>import&nbsp;javax.servlet.ServletContext; &nbsp;&nbsp; </li>
    <li>import&nbsp;javax.servlet.ServletException; &nbsp;&nbsp; </li>
    <li>import&nbsp;javax.servlet.http.HttpServlet; &nbsp;&nbsp; </li>
    <li>import&nbsp;javax.servlet.http.HttpServletRequest; &nbsp;&nbsp; </li>
    <li>import&nbsp;javax.servlet.http.HttpServletResponse; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp; </li>
    <li>import&nbsp;org.apache.commons.lang.StringUtils; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp; </li>
    <li>public&nbsp;class&nbsp;ConvergeDataServlet&nbsp;extends&nbsp;HttpServlet&nbsp;{ &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;final&nbsp;long&nbsp;serialVersionUID&nbsp;=&nbsp;1L; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Timer&nbsp;timer1&nbsp;=&nbsp;null; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Task&nbsp;task1; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;/** &nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Constructor&nbsp;of&nbsp;the&nbsp;object. &nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ConvergeDataServlet()&nbsp;{ &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super(); &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;/** &nbsp; </li>
    <li><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Destruction&nbsp;of&nbsp;the&nbsp;servlet.&nbsp;<br />
    </span>&nbsp;</span> </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;destroy()&nbsp;{ &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.destroy();&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(timer1!=null){ &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer1.cancel(); &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;doGet(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response) &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;ServletException,&nbsp;IOException&nbsp;{ &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;doPost(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response) &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;ServletException,&nbsp;IOException&nbsp;{ &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doGet(request,&nbsp;response);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;init方法启动定时器 &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;init()&nbsp;throws&nbsp;ServletException&nbsp;{ &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletContext&nbsp;context&nbsp;=&nbsp;getServletContext(); &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;(true为用定时间刷新缓存) &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;startTask&nbsp;=&nbsp;getInitParameter("startTask"); &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;定时刷新时间(分钟) &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Long&nbsp;delay&nbsp;=&nbsp;Long.parseLong(getInitParameter("delay")); &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;启动定时器 &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(startTask.equals("true")){ &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer1&nbsp;=&nbsp;new&nbsp;Timer(true); &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;task1&nbsp;=&nbsp;new&nbsp;Task(context); &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer1.schedule(task1,&nbsp;delay&nbsp;*&nbsp;60&nbsp;*&nbsp;1000,&nbsp;delay&nbsp;*&nbsp;60&nbsp;*&nbsp;1000); &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp; </li>
    <li>} &nbsp;&nbsp; </li>
</ol>
</div>
<p>&nbsp;定时执行操作</p>
<div>java 代码</div>
<div>
<ol>
    <li>&nbsp;&nbsp; </li>
    <li>/** &nbsp; </li>
    <li>&nbsp;*&nbsp; &nbsp; </li>
    <li>&nbsp;*&nbsp;@author&nbsp;callan &nbsp; </li>
    <li>&nbsp;*/&nbsp;&nbsp; </li>
    <li>import&nbsp;java.util.TimerTask; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp; </li>
    <li>import&nbsp;javax.servlet.ServletContext; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp; </li>
    <li>public&nbsp;class&nbsp;Task&nbsp;extends&nbsp;TimerTask{ &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;ServletContext&nbsp;context; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;boolean&nbsp;isRunning&nbsp;=&nbsp;true; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Task(ServletContext&nbsp;context){ &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.context&nbsp;=&nbsp;context; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;@Override&nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;run()&nbsp;{ &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(isRunning){ &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp; </li>
    <li>} &nbsp;&nbsp; </li>
</ol>
</div>
<p>在web.xml配置这个servlet为服务启动时就调用servlet</p>
<font>&lt;servlet&gt;&lt;/servlet&gt;<br />
&nbsp;&nbsp;<font>&lt; servlet &gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt; servlet-name &gt;taskservlet&lt; /&nbsp;servlet-name &gt;<br />
&nbsp;&nbsp;&nbsp; &lt; servlet-class &gt;com.task&lt; /servlet-class &gt;<br />
&nbsp;&nbsp;&nbsp; &lt; init-param &gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt; param-name &gt;startTask&lt; /param-name &gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt; param-value &gt;true&lt; /param-value &gt;<br />
&nbsp;&nbsp;&nbsp; &lt; /init-param &gt;<br />
&nbsp;&nbsp;&nbsp; &lt; init-param &gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt; param-name &gt;intervalTime&lt; /param-name &gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt; param-value &gt;1&lt; /param-value &gt;<br />
&nbsp;&nbsp;&nbsp; &lt; /init-param &gt;<br />
&nbsp;&nbsp;&nbsp; &lt; load-on-startup &gt;300&lt; /load-on-startup &gt;<br />
&nbsp; &lt; /servlet &gt;</font></font>
<p>&lt;servlet&gt;&lt;/servlet&gt;</p>
<br />
<img src ="http://www.blogjava.net/caizh2009/aggbug/333545.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caizh2009/" target="_blank">小菜毛毛</a> 2010-09-30 14:56 <a href="http://www.blogjava.net/caizh2009/archive/2010/09/30/333545.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java定时器在Web中的应用</title><link>http://www.blogjava.net/caizh2009/archive/2010/09/30/333538.html</link><dc:creator>小菜毛毛</dc:creator><author>小菜毛毛</author><pubDate>Thu, 30 Sep 2010 05:53:00 GMT</pubDate><guid>http://www.blogjava.net/caizh2009/archive/2010/09/30/333538.html</guid><wfw:comment>http://www.blogjava.net/caizh2009/comments/333538.html</wfw:comment><comments>http://www.blogjava.net/caizh2009/archive/2010/09/30/333538.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caizh2009/comments/commentRss/333538.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caizh2009/services/trackbacks/333538.html</trackback:ping><description><![CDATA[http://callan.javaeye.com/blog/123374<br />
关键字: java, 定时器, timertask
<p>在web中,定时器的启动一般随web server的启动而启动,一般有两种方法.</p>
<p>方法一：在web.xml里配置一个Servlet，并设置其随web server的启动而启动。然后在该Servlet的init()方法里启动定时器，在destory()方法里销毁定时器。<br />
方法二：在web.xml里配置一个Listener,然后在该Listener的初始化方法里启动定时器，在其销毁的方法朝左销毁定时器。</p>
<div>在servlet中启动定时器</div>
<div>java 代码</div>
<div>
<ol>
    <li>import&nbsp;java.io.IOException; &nbsp;&nbsp; </li>
    <li>import&nbsp;java.util.Timer; &nbsp;&nbsp; </li>
    <li>import&nbsp;javax.servlet.RequestDispatcher; &nbsp;&nbsp; </li>
    <li>import&nbsp;javax.servlet.ServletContext; &nbsp;&nbsp; </li>
    <li>import&nbsp;javax.servlet.ServletException; &nbsp;&nbsp; </li>
    <li>import&nbsp;javax.servlet.http.HttpServlet; &nbsp;&nbsp; </li>
    <li>import&nbsp;javax.servlet.http.HttpServletRequest; &nbsp;&nbsp; </li>
    <li>import&nbsp;javax.servlet.http.HttpServletResponse; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp; </li>
    <li>import&nbsp;org.apache.commons.lang.StringUtils; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp; </li>
    <li>public&nbsp;class&nbsp;ConvergeDataServlet&nbsp;extends&nbsp;HttpServlet&nbsp;{ &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;final&nbsp;long&nbsp;serialVersionUID&nbsp;=&nbsp;1L; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Timer&nbsp;timer1&nbsp;=&nbsp;null; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;Task&nbsp;task1; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;/** &nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Constructor&nbsp;of&nbsp;the&nbsp;object. &nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ConvergeDataServlet()&nbsp;{ &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super(); &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;/** &nbsp; </li>
    <li><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Destruction&nbsp;of&nbsp;the&nbsp;servlet.&nbsp;<br />
    </span>&nbsp;</span> </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;destroy()&nbsp;{ &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.destroy();&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(timer1!=null){ &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer1.cancel(); &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;doGet(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response) &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;ServletException,&nbsp;IOException&nbsp;{ &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;doPost(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response) &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;ServletException,&nbsp;IOException&nbsp;{ &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doGet(request,&nbsp;response);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;init方法启动定时器 &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;init()&nbsp;throws&nbsp;ServletException&nbsp;{ &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletContext&nbsp;context&nbsp;=&nbsp;getServletContext(); &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;(true为用定时间刷新缓存) &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;startTask&nbsp;=&nbsp;getInitParameter("startTask"); &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;定时刷新时间(分钟) &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Long&nbsp;delay&nbsp;=&nbsp;Long.parseLong(getInitParameter("delay")); &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;启动定时器 &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(startTask.equals("true")){ &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer1&nbsp;=&nbsp;new&nbsp;Timer(true); &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;task1&nbsp;=&nbsp;new&nbsp;Task(context); &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer1.schedule(task1,&nbsp;delay&nbsp;*&nbsp;60&nbsp;*&nbsp;1000,&nbsp;delay&nbsp;*&nbsp;60&nbsp;*&nbsp;1000); &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp; </li>
    <li>} &nbsp;&nbsp; </li>
</ol>
</div>
<p>&nbsp;定时执行操作</p>
<div>java 代码</div>
<div>
<ol>
    <li>&nbsp;&nbsp; </li>
    <li>/** &nbsp; </li>
    <li>&nbsp;*&nbsp; &nbsp; </li>
    <li>&nbsp;*&nbsp;@author&nbsp;callan &nbsp; </li>
    <li>&nbsp;*/&nbsp;&nbsp; </li>
    <li>import&nbsp;java.util.TimerTask; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp; </li>
    <li>import&nbsp;javax.servlet.ServletContext; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp; </li>
    <li>public&nbsp;class&nbsp;Task&nbsp;extends&nbsp;TimerTask{ &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;ServletContext&nbsp;context; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;boolean&nbsp;isRunning&nbsp;=&nbsp;true; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Task(ServletContext&nbsp;context){ &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.context&nbsp;=&nbsp;context; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;@Override&nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;run()&nbsp;{ &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(isRunning){ &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp; </li>
    <li>&nbsp;&nbsp; </li>
    <li>} &nbsp;&nbsp; </li>
</ol>
</div>
<p>在web.xml配置这个servlet为服务启动时就调用servlet</p>
<font>&lt;servlet&gt;&lt;/servlet&gt;<br />
&nbsp;&nbsp;<font>&lt; servlet &gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt; servlet-name &gt;taskservlet&lt; /&nbsp;servlet-name &gt;<br />
&nbsp;&nbsp;&nbsp; &lt; servlet-class &gt;com.task&lt; /servlet-class &gt;<br />
&nbsp;&nbsp;&nbsp; &lt; init-param &gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt; param-name &gt;startTask&lt; /param-name &gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt; param-value &gt;true&lt; /param-value &gt;<br />
&nbsp;&nbsp;&nbsp; &lt; /init-param &gt;<br />
&nbsp;&nbsp;&nbsp; &lt; init-param &gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt; param-name &gt;intervalTime&lt; /param-name &gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt; param-value &gt;1&lt; /param-value &gt;<br />
&nbsp;&nbsp;&nbsp; &lt; /init-param &gt;<br />
&nbsp;&nbsp;&nbsp; &lt; load-on-startup &gt;300&lt; /load-on-startup &gt;<br />
&nbsp; &lt; /servlet &gt;</font></font>
<p>&lt;servlet&gt;&lt;/servlet&gt;</p>
<img src ="http://www.blogjava.net/caizh2009/aggbug/333538.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caizh2009/" target="_blank">小菜毛毛</a> 2010-09-30 13:53 <a href="http://www.blogjava.net/caizh2009/archive/2010/09/30/333538.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>