﻿<?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 Tools-随笔分类-Tomcat</title><link>http://www.blogjava.net/simie/category/23716.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 31 Jul 2007 15:07:51 GMT</lastBuildDate><pubDate>Tue, 31 Jul 2007 15:07:51 GMT</pubDate><ttl>60</ttl><item><title>Tomcat 5.5.x 配置集锦(x表示4,5,.6,7) </title><link>http://www.blogjava.net/simie/archive/2007/07/31/133660.html</link><dc:creator>和田雨</dc:creator><author>和田雨</author><pubDate>Tue, 31 Jul 2007 14:00:00 GMT</pubDate><guid>http://www.blogjava.net/simie/archive/2007/07/31/133660.html</guid><wfw:comment>http://www.blogjava.net/simie/comments/133660.html</wfw:comment><comments>http://www.blogjava.net/simie/archive/2007/07/31/133660.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/simie/comments/commentRss/133660.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/simie/services/trackbacks/133660.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/simie/archive/2007/07/31/133660.html'>阅读全文</a><img src ="http://www.blogjava.net/simie/aggbug/133660.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/simie/" target="_blank">和田雨</a> 2007-07-31 22:00 <a href="http://www.blogjava.net/simie/archive/2007/07/31/133660.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从原理上解决Tomcat中文问题</title><link>http://www.blogjava.net/simie/archive/2007/07/21/131625.html</link><dc:creator>和田雨</dc:creator><author>和田雨</author><pubDate>Sat, 21 Jul 2007 05:50:00 GMT</pubDate><guid>http://www.blogjava.net/simie/archive/2007/07/21/131625.html</guid><wfw:comment>http://www.blogjava.net/simie/comments/131625.html</wfw:comment><comments>http://www.blogjava.net/simie/archive/2007/07/21/131625.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/simie/comments/commentRss/131625.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/simie/services/trackbacks/131625.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/simie/archive/2007/07/21/131625.html'>阅读全文</a><img src ="http://www.blogjava.net/simie/aggbug/131625.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/simie/" target="_blank">和田雨</a> 2007-07-21 13:50 <a href="http://www.blogjava.net/simie/archive/2007/07/21/131625.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat简介</title><link>http://www.blogjava.net/simie/archive/2007/07/21/131622.html</link><dc:creator>和田雨</dc:creator><author>和田雨</author><pubDate>Sat, 21 Jul 2007 05:40:00 GMT</pubDate><guid>http://www.blogjava.net/simie/archive/2007/07/21/131622.html</guid><wfw:comment>http://www.blogjava.net/simie/comments/131622.html</wfw:comment><comments>http://www.blogjava.net/simie/archive/2007/07/21/131622.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/simie/comments/commentRss/131622.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/simie/services/trackbacks/131622.html</trackback:ping><description><![CDATA[<p>作者：杨晓(<a href="http://blog.sina.com.cn/u/1237288325"><u><font color=#111133>http://blog.sina.com.cn/u/1237288325</font></u></a>)<strong><span><br><br>一、<span XML:LANG="EN-US">Tomcat背景</span></span></strong><span XML:LANG="EN-US"><br>　　自从JSP发布之后，推出了各式各样的JSP引擎。Apache Group在完成GNUJSP1.0的开发以后，开始考虑在SUN的JSWDK基础上开发一个可以直接提供Web服务的JSP服务器，当然同时也支持Servlet, 这样Tomcat就诞生了<span>。</span></span><span XML:LANG="EN-US">Tomcat是jakarta项目中的一个重要的子项目，其被JavaWorld杂志的编辑选为2001年度最具创新的java产品，同时它又是sun公司官方推荐的servlet和jsp容器，因此其越来</span><span>越多的受到软件公司和开发人员的喜爱。<span XML:LANG="EN-US">servlet和jsp的最新规范都可以在tomcat的新版本中得到实现。其次，</span></span><span XML:LANG="EN-US">Tomcat是完全免费的软件，任何人都可以从互联网上自由地下载。Tomcat与Apache的组合相当完美。</span></p>
<p><span XML:LANG="EN-US"><font face="Times New Roman">&nbsp;</font></span></p>
<p><strong><span>二、</span></strong><strong><span XML:LANG="EN-US"><font face="Times New Roman">Tomcat</font></span></strong><strong><span>目录</span></strong></p>
<p><span XML:LANG="EN-US">tomcat<br>|---bin Tomcat：</span><span>存放启动和关闭<span XML:LANG="EN-US">tomcat脚本</span></span><span>；</span></p>
<p><span XML:LANG="EN-US">|---conf Tomcat：存放</span><span>不同的配置文件（<span XML:LANG="EN-US">server.xml和web.xml）；</span></span><span XML:LANG="EN-US"><br>|---doc：存放Tomcat文档；<br>|---lib</span><span XML:LANG="EN-US">/japser/common</span><span>：存放<span XML:LANG="EN-US">Tomcat运行需要的库文件（JARS）；<br>|---logs：存放Tomcat执行时的LOG文件；<br>|---src：存放Tomcat的源代码；<br>|---webapps：Tomcat的主要Web发布目录（包括</span></span><span>应用程序示例</span><span>）；<span XML:LANG="EN-US"><br>|---work：</span></span><span>存放<span XML:LANG="EN-US">jsp编译后产生的class文件</span></span><span>；<span XML:LANG="EN-US"><br><br><br><br></span></span></p>
<p><strong><span>三、<span XML:LANG="EN-US">Tomcat类加载</span></span></strong></p>
<p><span XML:LANG="EN-US"><span>&nbsp;&nbsp;&nbsp;</span></span> <span XML:LANG="EN-US"><font face="Times New Roman">Bootstrap($JAVA_HOME/jre/lib/ext/*.jar)<br>System($CLASSPATH/*.class</font></span><span>和指定的</span><span XML:LANG="EN-US"><font face="Times New Roman">jar)<br>Common($CATALINA_HOME/common</font></span> <span>下的</span><span XML:LANG="EN-US"><font face="Times New Roman">classes,lib,endores</font></span><span>三个子目录</span><span XML:LANG="EN-US"><font face="Times New Roman">)<br>Catalina ($CATALINA_HOME/server/</font></span><span>下的</span><span XML:LANG="EN-US"><font face="Times New Roman">classes</font></span><span>和</span><span XML:LANG="EN-US"><font face="Times New Roman">lib</font></span><span>目录仅对</span><span XML:LANG="EN-US"><font face="Times New Roman">Tomcat</font></span><span>可见</span><span XML:LANG="EN-US"><font face="Times New Roman">)<br>&amp;Shared($CATALINA_HOME/shared/</font></span><span>下的</span><span XML:LANG="EN-US"><font face="Times New Roman">classes</font></span><span>和</span><span XML:LANG="EN-US"><font face="Times New Roman">lib</font></span><span>目录以及</span><span XML:LANG="EN-US"><font face="Times New Roman">$CATALINA_HOME/lib</font></span><span>目录</span><span XML:LANG="EN-US"><font face="Times New Roman">)</font></span><span>仅对</span><span XML:LANG="EN-US"><font face="Times New Roman">Web</font></span><span>应用程序可见</span><span XML:LANG="EN-US"><font face="Times New Roman">,</font></span><span>对</span><span XML:LANG="EN-US"><font face="Times New Roman">Tomcat</font></span><span>不可见</span><span XML:LANG="EN-US"><font face="Times New Roman">WebApp($WEBAPP/Web-INF/*</font></span><span>仅对该</span><span XML:LANG="EN-US"><font face="Times New Roman">WEB</font></span><span>应用可见</span><span XML:LANG="EN-US"><font face="Times New Roman">classes/*.class lib/*.jar)<br><br><br><br></font></span></p>
<p><span>加载类和资源的顺序为：</span><span XML:LANG="EN-US"><br><font face="Times New Roman">1</font></span><span>、</span><span XML:LANG="EN-US"><font face="Times New Roman">/Web-INF/classes</font></span></p>
<p><span XML:LANG="EN-US"><font face="Times New Roman">2</font></span><span>、</span><span XML:LANG="EN-US"><font face="Times New Roman">/Web-INF/lib/*.jar</font></span></p>
<p><span XML:LANG="EN-US"><font face="Times New Roman">3</font></span><span>、</span><span XML:LANG="EN-US"><font face="Times New Roman">Bootstrap</font></span></p>
<p><span XML:LANG="EN-US"><font face="Times New Roman">4</font></span><span>、</span><span XML:LANG="EN-US"><font face="Times New Roman">System</font></span></p>
<p><span XML:LANG="EN-US"><font face="Times New Roman">5</font></span><span>、</span><span XML:LANG="EN-US"><font face="Times New Roman">$CATALINA_HOME/common/classes<br>6</font></span><span>、</span><span XML:LANG="EN-US"><font face="Times New Roman">$CATALINA_HOME/common/endores/*.jar</font></span></p>
<p><span XML:LANG="EN-US"><font face="Times New Roman">7</font></span><span>、</span><span XML:LANG="EN-US"><font face="Times New Roman">$CATALINA_HOME/common/lib/*.jar</font></span></p>
<p><span XML:LANG="EN-US"><font face="Times New Roman">8</font></span><span>、</span><span XML:LANG="EN-US"><font face="Times New Roman">$CATALINA_HOME/shared/classes<br>9</font></span><span>、</span><span XML:LANG="EN-US"><font face="Times New Roman">$CATALINA_HOME/shared/lib/*.jar</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong><span style="FONT-SIZE: 9pt; COLOR: red; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt">四、</span></strong><strong><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: red; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">server.xml</font></span></strong><strong><span style="FONT-SIZE: 9pt; COLOR: red; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置简介</span></strong><strong><span style="FONT-SIZE: 9pt; COLOR: red; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt">：</span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 11.25pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下面讲述这个文件中的基本配置信息，更具体的配置信息请参考</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">tomcat</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的文档：</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><br><font face="Times New Roman">&nbsp;&nbsp;<span style="COLOR: blue">&nbsp;&nbsp;<strong>server:</strong></span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">port</font></span> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指定一个端口，这个端口<span style="COLOR: black">负责监听关闭</span></span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">tomcat</font></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的请求</span> <span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><br><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">shutdown</font></span> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指定向端口发送的命令字符串</span> <span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman"><br><span style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;<strong>service:</strong></span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">name</font></span> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指定</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">service</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的名字</span> <span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman"><br>&nbsp;&nbsp;<strong><span style="COLOR: blue">&nbsp;&nbsp;Connector</span></strong> <span style="COLOR: black">(</span></font></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示客户端和</span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">service</font></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">之间的连接</span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">)</font></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><br><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">port</font></span> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指定服务器端要创建的端口号，并在这个断口监听来自客户端的请求</span> <span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">minProcessors</font></span> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务器启动时创建的处理请求的线程数</span> <span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">maxProcessors</font></span> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">最大可以创建的处理请求的线程数</span> <span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">enableLookups</font></span> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果为</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">true</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，则可以通过调用</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">request.getRemoteHost()</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">DNS</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">查</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 36.65pt; mso-char-indent-count: 4.07; mso-char-indent-size: 9.0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">询来得到远程客户端的实际主机名，若为</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">false</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">则不进行</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">DNS</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">查询，而是返回其</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">ip</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 36.65pt; mso-char-indent-count: 4.07; mso-char-indent-size: 9.0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址</span> <span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">redirectPort</font></span> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指定服务器正在处理</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">http</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">请求时收到了一个</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">SSL</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">传输请求后重定向的</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 36.65pt; mso-char-indent-count: 4.07; mso-char-indent-size: 9.0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">端口号</span> <span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">acceptCount</font></span> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指定当所有可以使用的处理请求的线程数都被使用时，可以放到处理</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 36.65pt; mso-char-indent-count: 4.07; mso-char-indent-size: 9.0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">队列中的请求数，超过这个数的请求将不予处理</span> <span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">connectionTimeout</font></span> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指定超时的时间数</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">(</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以毫秒为单位</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">)<br><strong><span style="COLOR: blue">&nbsp;&nbsp;&nbsp;&nbsp;Engine</span></strong> <span style="COLOR: black">(</span></font></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表示指定</span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">service</font></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的请求处理机，接收和处理来自</span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">Connector</font></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的请求</span><span lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">)</font></span><span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><br><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">defaultHost</font></span> <span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">指定缺省的处理请求的主机名，它至少与其中的一个</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">host</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">元素的</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">name</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 36.65pt; mso-char-indent-count: 4.07; mso-char-indent-size: 9.0pt"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">属性值是一样的</span><span lang=EN-US style="FONT-SIZE: 9pt; mso-bidi-font-size: 12.0pt" XML:LANG="EN-US"><font face="Times New Roman">&nbsp;<br></p>
<p>Context (表示一个web应用程序)：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、docBase 应用程序的路径或者是WAR文件存放的路径<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、path 表示此web应用程序的url的前缀，这样请求的url为<br><a href="http://localhost:8080/path/"><u><font color=#111133>http://localhost:8080/path/</font></u></a>****<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、reloadable 这个属性非常重要，如果为true，则tomcat会自动检测应用程序的<br>/WEB-INF/lib 和/WEB-INF/classes目录的变化，自动装载新的应用程序，我们可<br>以在不重起tomcat的情况下改变应用程序<br>&nbsp;&nbsp;&nbsp; host (表示一个虚拟主机)：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、name 指定主机名<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、appBase 应用程序基本目录，即存放应用程序的目录<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、unpackWARs 如果为true，则tomcat会自动将WAR文件解压，否则不解压，直接<br>从WAR文件中运行应用程序<br>&nbsp;&nbsp;&nbsp; Logger (表示日志，调试和错误信息)：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、className 指定logger使用的类名，此类必须实现org.apache.catalina.Logger 接口<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、prefix 指定log文件的前缀<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、suffix 指定log文件的后缀<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4、timestamp 如果为true，则log文件名中要加入时间，如下<br>例:localhost_log.2001-10-04.txt<br>&nbsp;&nbsp; Realm (表示存放用户名，密码及role的数据库)：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、className 指定Realm使用的类名，此类必须实现org.apache.catalina.Realm接口<br>&nbsp;&nbsp; Valve (功能与Logger差不多，其prefix和suffix属性解释和Logger 中的一样)：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、className 指定Valve使用的类名，如用org.apache.catalina.valves.AccessLogValve<br>类可以记录应用程序的访问信息<br>&nbsp;&nbsp;&nbsp; directory（指定log文件存放的位置）：<br>&nbsp;&nbsp;&nbsp; 1、pattern 有两个值，common方式记录远程主机名或ip地址，用户名，日期，第一行请求的字符串，HTTP响应代码，发送的字节数。combined方式比common方式记录的值更多<br><br><br><br></p>
<p>五、web.xml配置简介：<br>1、默认(欢迎)文件的设置<br>在tomcat4\conf\web.xml中，&lt;welcome-file-list&gt;与IIS中的默认文件意思相同。<br>&lt;welcome-file-list&gt;<br>&lt;welcome-file&gt;index.html&lt;/welcome-file&gt;<br>&lt;welcome-file&gt;index.htm&lt;/welcome-file&gt;<br>&lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br>&lt;/welcome-file-list&gt;</p>
<p>2、报错文件的设置<br>&lt;error-page&gt;<br>&lt;error-code&gt;404&lt;/error-code&gt;<br>&lt;location&gt;/notFileFound.jsp&lt;/location&gt;<br>&lt;/error-page&gt;<br>&lt;error-page&gt;<br>&lt;exception-type&gt;java.lang.NullPointerException&lt;/exception-type&gt;<br>&lt;location&gt;/null.jsp&lt;/location&gt;<br>&lt;/error-page&gt;<br>如果某文件资源没有找到，服务器要报404错误，按上述配置则会调用\webapps\ROOT\notFileFound.jsp。<br>如果执行的某个JSP文件产生NullPointException ，则会调用\webapps\ROOT\null.jsp<br>&nbsp;<br>3、会话超时的设置<br>设置session 的过期时间，单位是分钟；<br>&lt;session-config&gt;<br>&lt;session-timeout&gt;30&lt;/session-timeout&gt;<br>&lt;/session-config&gt;</p>
<p>4、过滤器的设置<br>&lt;filter&gt;<br>&lt;filter-name&gt;FilterSource&lt;/filter-name&gt;<br>&lt;filter-class&gt;project4. FilterSource &lt;/filter-class&gt;<br>&lt;/filter&gt;<br>&lt;filter-mapping&gt;<br>&lt;filter-name&gt;FilterSource&lt;/filter-name&gt;<br>&lt;url-pattern&gt;/WwwServlet&lt;/url-pattern&gt;<br>(&lt;url-pattern&gt;/haha/*&lt;/url-pattern&gt;)<br>&lt;/filter-mapping&gt;<br>&nbsp;<br>过滤：<br>1) 身份验证的过滤Authentication Filters<br>2) 日志和审核的过滤Logging and Auditing Filters<br>3) 图片转化的过滤Image conversion Filters<br>4) 数据压缩的过滤Data compression Filters<br>5) 加密过滤Encryption Filters<br>6) Tokenizing Filters<br>7) 资源访问事件触发的过滤Filters that trigger resource access events XSL/T 过滤XSL/T filters<br>9) 内容类型的过滤Mime-type chain Filter 注意监听器的顺序，如：先安全过滤，然后资源，然后内容类型等，这个顺序可以自己定。</p>
<p><br>六、管理<br>&nbsp;&nbsp;&nbsp; 1、用户配置<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在进行具体Tomcat管理之前，先给tomcat添加一个用户，使这个用户有权限来进行管理。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打开conf目录下的tomcat-users.xml文件，在相应的位置添加下面一行：<br>&nbsp;&nbsp;&nbsp; &lt;user name="user" password="user" roles="standard,manager"/&gt;<br>&nbsp;&nbsp;&nbsp; 然后重起tomcat，在浏览器中输入<a href="http://localhost:8080/manager/"><u><font color=#111133>http://localhost:8080/manager/</font></u></a>，会弹出对话框，输入上面的用户<br>名和密码即可。</p>
<div>&nbsp;&nbsp;&nbsp; 2、应用程序列表<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在浏览器中输入<a href="http://localhost:8080/manager/list"><u><font color=#111133>http://localhost:8080/manager/list</font></u></a>，浏览器将会显示如下的信息：<br>&nbsp;&nbsp;&nbsp; OK - Listed applications for virtual host localhost<br>&nbsp;&nbsp;&nbsp; /ex:running:1<br>&nbsp;&nbsp;&nbsp; /examples:running:1<br>&nbsp;&nbsp;&nbsp; /webdav:running:0<br>&nbsp;&nbsp;&nbsp; /tomcat-docs:running:0<br>&nbsp;&nbsp;&nbsp; /manager:running:0<br>&nbsp;&nbsp;&nbsp; /:running:0<br>&nbsp;&nbsp;&nbsp;&nbsp; 上面显示的信息分别为：应用程序的路径、当前状态、连接这个程序的session数</div>
<div>&nbsp;&nbsp; 3、重新装载应用程序<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在浏览器中输入 <a href="http://localhost:8080/manager/reload?path=/examples"><u><font color=#111133>http://localhost:8080/manager/reload?path=/examples</font></u></a>，浏览器显示如下：<br>&nbsp;&nbsp;&nbsp; OK - Reloaded application at context path /examples&nbsp;&nbsp;&nbsp;<br>这表示example应用程序装载成功，如果我们将server.xml的Context元素的reloadable属性设为true，则没必要利用这种方式重新装载应用程序，因为tomcat会自动装载。</div>
<div>4、显示session信息<br>&nbsp;&nbsp;&nbsp; 在浏览器中输入<a href="http://localhost:8080/manager/sessions?path=/examples"><u><font color=#111133>http://localhost:8080/manager/sessions?path=/examples</font></u></a>，浏览器显示如下：<br>&nbsp;&nbsp;&nbsp; OK - Session information for application at context path /examples Default maximum session inactive<br>interval 30 minutes</div>
<div>5、启动和关闭应用程序<br>&nbsp;&nbsp; 在浏览器中输入<a href="http://localhost:8080/manager/start?path=/examples"><u><font color=#111133>http://localhost:8080/manager/start?path=/examples</font></u></a>和<br><a href="http://localhost:8080/manager/stop?path=/examples"><u><font color=#111133>http://localhost:8080/manager/stop?path=/examples</font></u></a>分别启动和关闭examples应用程序。</div>
<div>关于作者：<br>杨晓，计算机硕士，曾在NEC、Softbrain 担任java开发工作。<br>博客：<a href="http://blog.sina.com.cn/u/1237288325"><u><font color=#111133>http://blog.sina.com.cn/u/1237288325</font></u></a></div>
</font></span>
<img src ="http://www.blogjava.net/simie/aggbug/131622.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/simie/" target="_blank">和田雨</a> 2007-07-21 13:40 <a href="http://www.blogjava.net/simie/archive/2007/07/21/131622.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java Web Start入门基础教程</title><link>http://www.blogjava.net/simie/archive/2007/07/06/128526.html</link><dc:creator>和田雨</dc:creator><author>和田雨</author><pubDate>Fri, 06 Jul 2007 03:34:00 GMT</pubDate><guid>http://www.blogjava.net/simie/archive/2007/07/06/128526.html</guid><wfw:comment>http://www.blogjava.net/simie/comments/128526.html</wfw:comment><comments>http://www.blogjava.net/simie/archive/2007/07/06/128526.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/simie/comments/commentRss/128526.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/simie/services/trackbacks/128526.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 版权所有：(xiaodaoxiaodao)蓝小刀 &nbsp;&nbsp; xiaodaoxiaodao@gmail.com http://www.blogjava.net/xiaodaoxiaodao/articles/103469.html &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 转载请注明来源/作者 Java Web Start 入门基础教程 &nbs...&nbsp;&nbsp;<a href='http://www.blogjava.net/simie/archive/2007/07/06/128526.html'>阅读全文</a><img src ="http://www.blogjava.net/simie/aggbug/128526.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/simie/" target="_blank">和田雨</a> 2007-07-06 11:34 <a href="http://www.blogjava.net/simie/archive/2007/07/06/128526.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Sysdeo/SQLI Eclipse Tomcat Launcher plugin</title><link>http://www.blogjava.net/simie/archive/2007/07/05/128390.html</link><dc:creator>和田雨</dc:creator><author>和田雨</author><pubDate>Thu, 05 Jul 2007 08:28:00 GMT</pubDate><guid>http://www.blogjava.net/simie/archive/2007/07/05/128390.html</guid><wfw:comment>http://www.blogjava.net/simie/comments/128390.html</wfw:comment><comments>http://www.blogjava.net/simie/archive/2007/07/05/128390.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/simie/comments/commentRss/128390.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/simie/services/trackbacks/128390.html</trackback:ping><description><![CDATA[<h2>Sysdeo/SQLI Eclipse Tomcat Launcher plugin</h2>
<p><strong>在Eclipse方面使用Ｔｏｍｃａｔ的插件</strong></p>
<table cellSpacing=0 cellPadding=0 width="45%" border=0>
    <tbody>
        <tr>
            <td>
            <table cellSpacing=0 cellPadding=5 width="100%" border=1>
                <tbody>
                    <tr>
                        <td bgColor=#eeeeff>
                        <ul>
                            <li><span class=toc><a class=toc href="http://www.eclipsetotale.com/tomcatPlugin.html#A1"><u><font color=#800080>Plugin features</font></u></a> </span>
                            <li><span class=toc><a class=toc href="http://www.eclipsetotale.com/tomcatPlugin.html#A2"><u><font color=#800080>Support and contributions</font></u></a></span>
                            <li><a href="http://www.eclipsetotale.com/tomcatPlugin.html#A3"><u><font color=#800080>Download</font></u></a>
                            <li><a href="http://www.eclipsetotale.com/tomcatPlugin.html#A4"><u><font color=#800080>Installation</font></u></a>
                            <li><a href="http://www.eclipsetotale.com/tomcatPlugin.html#A5"><u><font color=#800080>Documentation</font></u></a>
                            <li><a href="http://www.eclipsetotale.com/tomcatPlugin.html#A6"><u><font color=#800080>Troubleshooting</font></u></a> </li>
                        </ul>
                        </td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
<h3>&nbsp;</h3>
<h3>&nbsp;</h3>
<h3><a name=A1></a>Plugin features</h3>
<ul>
    <li>
    <p>Starting and stopping Tomcat 4.x, 5.x and 6.x</p>
    <li>
    <p>Registering Tomcat process to Eclipse debugger </p>
    <li>
    <p>Creating a WAR project (wizard can update server.xml file) </p>
    <li>
    <p>Adding Java Projects to Tomcat classpath </p>
    <li>
    <p>Setting Tomcat JVM parameters, classpath and bootclasspath </p>
    <li>
    <p>Exporting a Tomcat project to a WAR File </p>
    <li>
    <p>Capability to use a custom Tomcat classloader to load classes in several java projects at the same classloader level than classes in a Tomcat project, see <a href="http://www.eclipsetotale.com/tomcatPlugin/readmeDevLoader.html"><u><font color=#0000ff>readmeDevLoader.html</font></u></a> (Thanks Martin Kahr) </p>
    </li>
</ul>
<h3>&nbsp;</h3>
<h3><a name=A2></a>Support and contributions</h3>
<p>Contact <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#112;&#108;&#117;&#103;&#105;&#110;&#116;&#111;&#109;&#99;&#97;&#116;&#64;&#115;&#121;&#115;&#100;&#101;&#111;&#46;&#102;&#114;"><u><font color=#0000ff>plugintomcat@sysdeo.fr</font></u></a> </p>
<h3>&nbsp;</h3>
<h3><a name=A3></a>Download</h3>
<p>This plugin is free and open-source<br></p>
<table class=tomcatPluginTable>
    <tbody>
        <tr>
            <th>Version</th>
            <th>File</th>
            <th>Date</th>
            <th>Comment</th>
        </tr>
        <tr>
            <td vAlign=top>
            <p>3.2.1</p>
            </td>
            <td vAlign=top>
            <div class=object-right><a href="http://www.eclipsetotale.com/tomcatPlugin/tomcatPluginV321.zip"><u><font color=#800080>tomcatPluginV321.zip</font></u></a> </div>
            </td>
            <td vAlign=top>
            <p>10 May 2007</p>
            </td>
            <td vAlign=top>
            <div class=object-right><a href="http://www.eclipsetotale.com/tomcatPlugin/releaseNotesV321.txt"><u><font color=#0000ff>releaseNotesV321.txt</font></u></a> </div>
            <p>Works with Eclipse 3.1, 3.2 and 3.3M7<br>Fix a problem with HTTPS</p>
            </td>
        </tr>
        <tr bgColor=#cccccc>
            <td vAlign=top>
            <p>3.2</p>
            </td>
            <td vAlign=top>
            <div class=object-right><a href="http://www.eclipsetotale.com/tomcatPlugin/tomcatPluginV32.zip"><u><font color=#0000ff>tomcatPluginV32.zip</font></u></a> </div>
            </td>
            <td vAlign=top>
            <p>13 April 2007</p>
            </td>
            <td vAlign=top>
            <div class=object-right><a href="http://www.eclipsetotale.com/tomcatPlugin/releaseNotesV32.txt"><u><font color=#0000ff>releaseNotesV32.txt</font></u></a> </div>
            <p>Works with Eclipse 3.1, 3.2 and 3.3M6<br>Tomcat 6 support added </p>
            </td>
        </tr>
        <tr bgColor=#cccccc>
            <td vAlign=top>
            <p>3.2 beta3 </p>
            </td>
            <td vAlign=top>
            <div class=object-right><a href="http://www.eclipsetotale.com/tomcatPlugin/tomcatPluginV32beta3.zip"><u><font color=#0000ff>tomcatPluginV32beta3.zip</font></u></a> </div>
            </td>
            <td vAlign=top>
            <p>20 November 2006 </p>
            </td>
            <td vAlign=top>
            <div class=object-right><a href="http://www.eclipsetotale.com/tomcatPlugin/releaseNotesV32beta3.txt"><u><font color=#0000ff>releaseNotesV32beta3.txt</font></u></a> </div>
            <p>Works with Eclipse 3.2 and Eclipse 3.1<br>Tomcat 6 support added </p>
            </td>
        </tr>
        <tr bgColor=#cccccc>
            <td vAlign=top>
            <p>3.2 beta2 </p>
            </td>
            <td vAlign=top>
            <div class=object-right><a href="http://www.eclipsetotale.com/tomcatPlugin/tomcatPluginV32beta2.zip"><u><font color=#0000ff>tomcatPluginV32beta2.zip</font></u></a> </div>
            </td>
            <td vAlign=top>
            <p>25 October 2006 </p>
            </td>
            <td vAlign=top>
            <div class=object-right><a href="http://www.eclipsetotale.com/tomcatPlugin/releaseNotesV32beta2.txt"><u><font color=#0000ff>releaseNotesV32beta2.txt</font></u></a> </div>
            <p>Works with Eclipse 3.2 and Eclipse 3.1<br>Tomcat 6 support added </p>
            </td>
        </tr>
        <tr>
            <td vAlign=top>
            <p>3.1</p>
            </td>
            <td vAlign=top>
            <div class=object-right><a href="http://www.eclipsetotale.com/tomcatPlugin/tomcatPluginV31.zip"><u><font color=#0000ff>tomcatPluginV31.zip</font></u></a> </div>
            </td>
            <td vAlign=top>
            <p>15 September 2005 </p>
            </td>
            <td vAlign=top>
            <div class=object-right><a href="http://www.eclipsetotale.com/tomcatPlugin/releaseNotesV31.txt"><u><font color=#0000ff>releaseNotesV31.txt</font></u></a> </div>
            <p>Works with Eclipse 3.0 and Eclipse 3.1 (fix a problem with Eclipse 3.1M6) </p>
            </td>
        </tr>
        <tr>
            <td vAlign=top>
            <p>3.0 </p>
            </td>
            <td vAlign=top>
            <div class=object-right><a href="http://www.eclipsetotale.com/tomcatPlugin/tomcatPluginV3.zip"><u><font color=#0000ff>tomcatPluginV3.zip</font></u></a> </div>
            </td>
            <td vAlign=top>
            <p>27 July 2004 </p>
            </td>
            <td vAlign=top>
            <div class=object-right><a href="http://www.eclipsetotale.com/tomcatPlugin/releaseNotesV3.txt"><u><font color=#0000ff>releaseNotesV3.txt</font></u></a> </div>
            <p>Works with Eclipse 3.0 and Eclipse 2.1 </p>
            </td>
        </tr>
        <tr bgColor=#cccccc>
            <td vAlign=top>
            <p>2.2.1</p>
            </td>
            <td vAlign=top>
            <div class=object-right><a href="http://www.eclipsetotale.com/tomcatPlugin/tomcatPluginV221.zip"><u><font color=#0000ff>tomcatPluginV221.zip</font></u></a> </div>
            </td>
            <td vAlign=top>
            <p>1er August 2003 </p>
            </td>
            <td vAlign=top>
            <div class=object-right><a href="http://www.eclipsetotale.com/tomcatPlugin/releaseNotesV221.txt"><u><font color=#0000ff>releaseNotesV211beta.txt</font></u></a> </div>
            <p>Works with Eclipse 2.1 and Eclipse 3.0 M2 </p>
            </td>
        </tr>
    </tbody>
</table>
<br>
<p>Tomcat 4.x patch for JSP debugging (Thanks to Johan Compagner)</p>
<table class=tomcatPluginTable>
    <tbody>
        <tr>
            <th>Tomcat Version</th>
            <th>File</th>
            <th>Date</th>
        </tr>
        <tr>
            <td vAlign=top>
            <p>4.1.24 </p>
            </td>
            <td vAlign=top>
            <div class=object-right><a href="http://www.eclipsetotale.com/tomcatPlugin/jasperDebugPatchV4.1.24.zip"><u><font color=#0000ff>jasperDebugPatchV4.1.24.zip</font></u></a> </div>
            </td>
            <td vAlign=top>
            <p>1 April 2003 </p>
            </td>
        </tr>
    </tbody>
</table>
<p>To install this patch, unzip the file in &lt;%TOMCAT_HOME%&gt;/classes for tomcat 4.0x, or in &lt;%TOMCAT_HOME%&gt;/common/classes for Tomcat 4.1.x<br></p>
<h3>&nbsp;</h3>
<h3><a name=A4></a>Installation</h3>
<ul>
    <li>
    <p>This plugin does not contain Tomcat.<br>(Download and install Tomcat before using this plugin).<br>This is a design choice not to include Tomcat in the plugin distribution, this way the same plugin version can works with any Tomcat version.<br></p>
    <li>
    <p>Download tomcatPluginVxxx.zip </p>
    <li>
    <p>Unzip it in your_Eclipse_Home/plugins </p>
    <li>
    <p>Plugin activation for Eclipse 3.x :<br>- launch eclipse once using this option : <strong>-clean</strong><br>- if Tomcat icons are not shown in toolbar : select menu 'Window&gt;Customize Perspective...&gt;Commands', and check 'Tomcat' in 'Available command groups'<br></p>
    <li>
    <p>Set Tomcat version and Tomcat home : Workbench -&gt; Preferences, select Tomcat and set Tomcat version and Tomcat home (Tomcat version and Tomcat home are the only required fields, other settings are there for advanced configuration). </p>
    <li>
    <p>This plugin launches Tomcat using the default JRE checked in Eclipe preferences window.<br>To set a JDK as default JRE for Eclipse open the preference window : Window -&gt; Preferences -&gt; Java -&gt; Installed JREs.<br>This JRE must be a JDK (This is a Tomcat prerequisite).<br></p>
    <li>
    <p>The plugin sets itself Tomcat classpath and bootclasspath. Use Preferences -&gt; Tomcat -&gt;JVM Settings, only if you need specific settings. </p>
    </li>
</ul>
<h3>&nbsp;</h3>
<h3><a name=A5></a>Documentation and tutorials</h3>
<p>Official documation (french) : <a href="http://www.eclipsetotale.com/articles/tomcat/tomcatPluginDocFR.html"><u><font color=#0000ff>http://www.eclipsetotale.com/articles/tomcat/tomcatPluginDocFR.html</font></u></a> </p>
<p>Tutorials (english) :<br></p>
<ul>
    <li>
    <p><a href="http://javaboutique.internet.com/tutorials/three/"><u><font color=#0000ff>The Power of Three - Eclipse, Tomcat, and Struts</font></u></a> </p>
    <li>
    <p><a href="http://www.keyboardsamurais.de/mt/archives/000053.html"><u><font color=#0000ff>Tomcat Tutorial: HelloWorld for Complete Fools</font></u></a> </p>
    </li>
</ul>
<h3>&nbsp;</h3>
<h3><a name=A6></a>Troubleshooting</h3>
<ul>
    <li>
    <p>In some case, despite it is correctly unzipped in Eclipse 3 'plugins' directory, the plugin is not loaded : run Eclipse with the -clean option to solve the problem. </p>
    <li>
    <p>ClassNotFound when using DevLoader and launching Tomcat 5.5.12 and above<br>Workaround : set context definition mode (Preferences-&gt;Tomcat) to 'Context files'.<br>Explanations :<br>This problem is due to a change in Tomcat 5.5.12 and above (see <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=37302"><u><font color=#0000ff>http://issues.apache.org/bugzilla/show_bug.cgi?id=37302</font></u></a> ,<br>We hope this bug will be fix but it seems that Tomcat developers don't care about it because it happens when a context containing its own loader is defined in server.xml file and since Tomcat 5 defining context in server.xml is not recommended)<br></p>
    <li>
    <p>ClassNotFoundException on javac/Main when accessing JSP : Tomcat is started with a JRE instead of a JDK. </p>
    <li>
    <p>If you have a problem with the plugin check eclipse log file (&lt;%Your_Workspace_dir%&gt;/.metadata/.log) </p>
    </li>
</ul>
<p>&nbsp; </p>
<p>If you have any problem with this plugin send an email to <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#112;&#108;&#117;&#103;&#105;&#110;&#116;&#111;&#109;&#99;&#97;&#116;&#64;&#115;&#121;&#115;&#100;&#101;&#111;&#46;&#102;&#114;"><u><font color=#0000ff>plugintomcat@sysdeo.fr</font></u></a> . <br>(Select this button : Preferences-&gt;Tomcat-&gt;JVM Settings-&gt;Dump configuration to .log file, and include in your email the corresponding lines of your .log file, it is in &lt;%Your_Workspace_dir%&gt;/.metadata)<br></p>
<img src ="http://www.blogjava.net/simie/aggbug/128390.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/simie/" target="_blank">和田雨</a> 2007-07-05 16:28 <a href="http://www.blogjava.net/simie/archive/2007/07/05/128390.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[TOMCAT]用web.xml控制Web应用的行为</title><link>http://www.blogjava.net/simie/archive/2007/07/02/127520.html</link><dc:creator>和田雨</dc:creator><author>和田雨</author><pubDate>Mon, 02 Jul 2007 05:05:00 GMT</pubDate><guid>http://www.blogjava.net/simie/archive/2007/07/02/127520.html</guid><wfw:comment>http://www.blogjava.net/simie/comments/127520.html</wfw:comment><comments>http://www.blogjava.net/simie/archive/2007/07/02/127520.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/simie/comments/commentRss/127520.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/simie/services/trackbacks/127520.html</trackback:ping><description><![CDATA[1&nbsp;定义头和根元素<br><br>部署描述符文件就像所有XML文件一样，必须以一个XML头开始。这个头声明可以使用的XML版本并给出文件的字符编码。<br>DOCYTPE声明必须立即出现在此头之后。这个声明告诉服务器适用的servlet规范的版本（如2.2或2.3）并指定管理此文件其余部分内容的语法的DTD(Document&nbsp;Type&nbsp;Definition，文档类型定义)。<br>所有部署描述符文件的顶层（根）元素为web-app。请注意，XML元素不像HTML，他们是大小写敏感的。因此，web-App和WEB-APP都是不合法的，web-app必须用小写。<br><br>1&nbsp;定义头和根元素<br><br>XML&nbsp;元素不仅是大小写敏感的，而且它们还对出现在其他元素中的次序敏感。例如，XML头必须是文件中的第一项，DOCTYPE声明必须是第二项，而web-&nbsp;app元素必须是第三项。在web-app元素内，元素的次序也很重要。服务器不一定强制要求这种次序，但它们允许（实际上有些服务器就是这样做的）完全&nbsp;拒绝执行含有次序不正确的元素的Web应用。这表示使用非标准元素次序的web.xml文件是不可移植的。<br>下面的列表给出了所有可直接出现在web-app元素内的合法元素所必需的次序。例如，此列表说明servlet元素必须出现在所有servlet-mapping元素之前。请注意，所有这些元素都是可选的。因此，可以省略掉某一元素，但不能把它放于不正确的位置。<br>l&nbsp;icon&nbsp;icon元素指出IDE和GUI工具用来表示Web应用的一个和两个图像文件的位置。<br>l&nbsp;display-name&nbsp;display-name元素提供GUI工具可能会用来标记这个特定的Web应用的一个名称。<br>l&nbsp;description&nbsp;description元素给出与此有关的说明性文本。<br>l&nbsp;context-param&nbsp;context-param元素声明应用范围内的初始化参数。<br>l&nbsp;filter&nbsp;过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。<br>l&nbsp;filter-mapping&nbsp;一旦命名了一个过滤器，就要利用filter-mapping元素把它与一个或多个servlet或JSP页面相关联。<br>l&nbsp;listener&nbsp;servlet&nbsp;API的版本2.3增加了对事件监听程序的支持，事件监听程序在建立、修改和删除会话或servlet环境时得到通知。Listener元素指出事件监听程序类。<br>l&nbsp;servlet&nbsp;在向servlet或JSP页面制定初始化参数或定制URL时，必须首先命名servlet或JSP页面。Servlet元素就是用来完成此项任务的。<br>l&nbsp;servlet-mapping&nbsp;服务器一般为servlet提供一个缺省的URL：<a href="http://host/webAppPrefix/servlet/ServletName"><u><font color=#0000ff>http://host/webAppPrefix/servlet/ServletName</font></u></a>。但是，常常会更改这个URL，以便servlet可以访问初始化参数或更容易地处理相对URL。在更改缺省URL时，使用servlet-mapping元素。<br>l&nbsp;session-config&nbsp;如果某个会话在一定时间内未被访问，服务器可以抛弃它以节省内存。可通过使用HttpSession的setMaxInactiveInterval方法&nbsp;明确设置单个会话对象的超时值，或者可利用session-config元素制定缺省超时值。<br>l&nbsp;mime-mapping&nbsp;如果Web应用具有想到特殊的文件，希望能保证给他们分配特定的MIME类型，则mime-mapping元素提供这种保证。<br>l&nbsp;welcom-file-list&nbsp;welcome-file-list元素指示服务器在收到引用一个目录名而不是文件名的URL时，使用哪个文件。<br>l&nbsp;error-page&nbsp;error-page元素使得在返回特定HTTP状态代码时，或者特定类型的异常被抛出时，能够制定将要显示的页面。<br>l&nbsp;taglib&nbsp;taglib元素对标记库描述符文件（Tag&nbsp;Libraryu&nbsp;Descriptor&nbsp;file）指定别名。此功能使你能够更改TLD文件的位置，而不用编辑使用这些文件的JSP页面。<br>l&nbsp;resource-env-ref&nbsp;resource-env-ref元素声明与资源相关的一个管理对象。<br>l&nbsp;resource-ref&nbsp;resource-ref元素声明一个资源工厂使用的外部资源。<br>l&nbsp;security-constraint&nbsp;security-constraint元素制定应该保护的URL。它与login-config元素联合使用<br>l&nbsp;login-config&nbsp;用login-config元素来指定服务器应该怎样给试图访问受保护页面的用户授权。它与sercurity-constraint元素联合使用。<br>l&nbsp;security-role&nbsp;security-role元素给出安全角色的一个列表，这些角色将出现在servlet元素内的security-role-ref元素的role-name子元素中。分别地声明角色可使高级IDE处理安全信息更为容易。<br>l&nbsp;env-entry&nbsp;env-entry元素声明Web应用的环境项。<br>l&nbsp;ejb-ref&nbsp;ejb-ref元素声明一个EJB的主目录的引用。<br>l&nbsp;ejb-local-ref&nbsp;ejb-local-ref元素声明一个EJB的本地主目录的应用。<br><br>3&nbsp;分配名称和定制的UL<br><br>在web.xml中完成的一个最常见的任务是对servlet或JSP页面给出名称和定制的URL。用servlet元素分配名称，使用servlet-mapping元素将定制的URL与刚分配的名称相关联。<br>3.1&nbsp;分配名称<br>为&nbsp;了提供初始化参数，对servlet或JSP页面定义一个定制URL或分配一个安全角色，必须首先给servlet或JSP页面一个名称。可通过&nbsp;servlet元素分配一个名称。最常见的格式包括servlet-name和servlet-class子元素（在web-app元素内），如下所示：<br>&lt;servlet&gt;<br>&lt;servlet-name&gt;Test&lt;/servlet-name&gt;<br>&lt;servlet-class&gt;moreservlets.TestServlet&lt;/servlet-class&gt;<br>&lt;/servlet&gt;&nbsp;<br>这&nbsp;表示位于WEB-INF/classes/moreservlets/TestServlet的servlet已经得到了注册名Test。给&nbsp;servlet一个名称具有两个主要的含义。首先，初始化参数、定制的URL模式以及其他定制通过此注册名而不是类名引用此servlet。其次,可在&nbsp;URL而不是类名中使用此名称。因此，利用刚才给出的定义，URL&nbsp;<a href="http://host/webAppPrefix/servlet/Test"><u><font color=#0000ff>http://host/webAppPrefix/servlet/Test</font></u></a>&nbsp;可用于&nbsp;<a href="http://host/webAppPrefix/servlet/moreservlets.TestServlet"><u><font color=#0000ff>http://host/webAppPrefix/servlet/moreservlets.TestServlet</font></u></a>&nbsp;的场所。<br>请&nbsp;记住：XML元素不仅是大小写敏感的，而且定义它们的次序也很重要。例如，web-app元素内所有servlet元素必须位于所有servlet-&nbsp;mapping元素（下一小节介绍）之前，而且还要位于5.6节和5.11节讨论的与过滤器或文档相关的元素（如果有的话）之前。类似地，servlet&nbsp;的servlet-name子元素也必须出现在servlet-class之前。5.2节"部署描述符文件内的元素次序"将详细介绍这种必需的次序。<br>例&nbsp;如，程序清单5-1给出了一个名为TestServlet的简单servlet，它驻留在moreservlets程序包中。因为此servlet是扎根&nbsp;在一个名为deployDemo的目录中的Web应用的组成部分，所以TestServlet.class放在deployDemo/WEB-&nbsp;INF/classes/moreservlets中。程序清单5-2给出将放置在deployDemo/WEB-INF/内的web.xml文件的一部&nbsp;分。此web.xml文件使用servlet-name和servlet-class元素将名称Test与TestServlet.class相关联。图&nbsp;5-1和图5-2分别显示利用缺省URL和注册名调用TestServlet时的结果。<br><br>程序清单5-1&nbsp;TestServlet.java<br>package&nbsp;moreservlets;<br><br>import&nbsp;java.io.*;<br>import&nbsp;javax.servlet.*;<br>import&nbsp;javax.servlet.http.*;<br><br>/**&nbsp;Simple&nbsp;servlet&nbsp;used&nbsp;to&nbsp;illustrate&nbsp;servlet&nbsp;naming<br>*&nbsp;and&nbsp;custom&nbsp;URLs.<br>*&nbsp;&lt;P&gt;<br>*&nbsp;Taken&nbsp;from&nbsp;More&nbsp;Servlets&nbsp;and&nbsp;JavaServer&nbsp;Pages<br>*&nbsp;from&nbsp;Prentice&nbsp;Hall&nbsp;and&nbsp;Sun&nbsp;Microsystems&nbsp;Press,<br>*&nbsp;<a href="http://www.moreservlets.com/"><u><font color=#0000ff>http://www.moreservlets.com/</font></u></a>.<br>*&nbsp;&#169;&nbsp;2002&nbsp;Marty&nbsp;Hall;&nbsp;may&nbsp;be&nbsp;freely&nbsp;used&nbsp;or&nbsp;adapted.<br>*/<br><br>public&nbsp;class&nbsp;TestServlet&nbsp;extends&nbsp;HttpServlet&nbsp;{<br>public&nbsp;void&nbsp;doGet(HttpServletRequest&nbsp;request,<br>HttpServletResponse&nbsp;response)<br>throws&nbsp;ServletException,&nbsp;IOException&nbsp;{<br>response.setContentType("text/html");<br>PrintWriter&nbsp;out&nbsp;=&nbsp;response.getWriter();<br>String&nbsp;uri&nbsp;=&nbsp;request.getRequestURI();<br>out.println(ServletUtilities.headWithTitle("Test&nbsp;Servlet")&nbsp;+<br>"&lt;BODY&nbsp;BGCOLOR=\"#FDF5E6\"&gt;\n"&nbsp;+<br>"&lt;H2&gt;URI:&nbsp;"&nbsp;+&nbsp;uri&nbsp;+&nbsp;"&lt;/H2&gt;\n"&nbsp;+<br>"&lt;/BODY&gt;&lt;/HTML&gt;");<br>}<br>}<br><br><br>程序清单5-2&nbsp;web.xml（说明servlet名称的摘录）<br>&lt;?xml&nbsp;version="1.0"&nbsp;encoding="ISO-8859-1"?&gt;<br>&lt;!DOCTYPE&nbsp;web-app<br>PUBLIC&nbsp;"-//Sun&nbsp;Microsystems,&nbsp;Inc.//DTD&nbsp;Web&nbsp;Application&nbsp;2.3//EN"<br>"http://java.sun.com/dtd/web-app_2_3.dtd"&gt;<br><br>&lt;web-app&gt;<br>&lt;!--&nbsp;&#8230;&nbsp;--&gt;<br>&lt;servlet&gt;<br>&lt;servlet-name&gt;Test&lt;/servlet-name&gt;<br>&lt;servlet-class&gt;moreservlets.TestServlet&lt;/servlet-class&gt;<br>&lt;/servlet&gt;<br>&lt;!--&nbsp;&#8230;&nbsp;--&gt;<br>&lt;/web-app&gt;<br><br>3.2&nbsp;定义定制的URL<br>大多数服务器具有一个缺省的serlvet&nbsp;URL：<br>http://host/webAppPrefix/servlet/packageName.ServletName。&nbsp;虽然在开发中使用这个URL很方便，但是我们常常会希望另一个URL用于部署。例如，可能会需要一个出现在Web应用顶层的URL（如，http:&nbsp;//host/webAppPrefix/Anyname），并且在此URL中没有servlet项。位于顶层的URL简化了相对URL的使用。此外，对&nbsp;许多开发人员来说，顶层URL看上去比更长更麻烦的缺省URL更简短。<br>事实上，有时需要使用定制的URL。比如，你可能想关闭缺省URL映射，以便更好地强制实施安全限制或防止用户意外地访问无初始化参数的servlet。如果你禁止了缺省的URL，那么你怎样访问servlet呢？这时只有使用定制的URL了。<br>为&nbsp;了分配一个定制的URL，可使用servlet-mapping元素及其servlet-name和url-pattern子元素。Servlet-&nbsp;name元素提供了一个任意名称，可利用此名称引用相应的servlet；url-pattern描述了相对于Web应用的根目录的URL。url-&nbsp;pattern元素的值必须以斜杠（/）起始。<br>下面给出一个简单的web.xml摘录，它允许使用URL&nbsp;http://host/webAppPrefix/UrlTest而不是http://host/webAppPrefix/servlet/Test或<br>http:&nbsp;//host/webAppPrefix/servlet/moreservlets.TestServlet。请注意，仍然需要XML头、&nbsp;DOCTYPE声明以及web-app封闭元素。此外，可回忆一下，XML元素出现地次序不是随意的。特别是，需要把所有servlet元素放在所有&nbsp;servlet-mapping元素之前。<br>&lt;servlet&gt;<br>&lt;servlet-name&gt;Test&lt;/servlet-name&gt;<br>&lt;servlet-class&gt;moreservlets.TestServlet&lt;/servlet-class&gt;<br>&lt;/servlet&gt;<br>&lt;!--&nbsp;...&nbsp;--&gt;<br>&lt;servlet-mapping&gt;<br>&lt;servlet-name&gt;Test&lt;/servlet-name&gt;<br>&lt;url-pattern&gt;/UrlTest&lt;/url-pattern&gt;<br>&lt;/servlet-mapping&gt;<br>URL模式还可以包含通配符。例如，下面的小程序指示服务器发送所有以Web应用的URL前缀开始，以..asp结束的请求到名为BashMS的servlet。<br>&lt;servlet&gt;<br>&lt;servlet-name&gt;BashMS&lt;/servlet-name&gt;<br>&lt;servlet-class&gt;msUtils.ASPTranslator&lt;/servlet-class&gt;<br>&lt;/servlet&gt;<br>&lt;!--&nbsp;...&nbsp;--&gt;<br>&lt;servlet-mapping&gt;<br>&lt;servlet-name&gt;BashMS&lt;/servlet-name&gt;<br>&lt;url-pattern&gt;/*.asp&lt;/url-pattern&gt;<br>&lt;/servlet-mapping&gt;<br>3.3&nbsp;命名JSP页面<br>因&nbsp;为JSP页面要转换成sevlet，自然希望就像命名servlet一样命名JSP页面。毕竟，JSP页面可能会从初始化参数、安全设置或定制的URL中&nbsp;受益，正如普通的serlvet那样。虽然JSP页面的后台实际上是servlet这句话是正确的，但存在一个关键的猜疑：即，你不知道JSP页面的实际&nbsp;类名（因为系统自己挑选这个名字）。因此，为了命名JSP页面，可将jsp-file元素替换为servlet-calss元素，如下所示：<br>&lt;servlet&gt;<br>&lt;servlet-name&gt;Test&lt;/servlet-name&gt;<br>&lt;jsp-file&gt;/TestPage.jsp&lt;/jsp-file&gt;<br>&lt;/servlet&gt;<br>命&nbsp;名JSP页面的原因与命名servlet的原因完全相同：即为了提供一个与定制设置（如，初始化参数和安全设置）一起使用的名称，并且，以便能更改激活&nbsp;JSP页面的URL（比方说，以便多个URL通过相同页面得以处理，或者从URL中去掉.jsp扩展名）。但是，在设置初始化参数时，应该注意，JSP页&nbsp;面是利用jspInit方法，而不是init方法读取初始化参数的。<br>例如，程序清单5-3给出一个名为TestPage.jsp的简单JSP页面，它的工作只是打印出用来激活它的URL的本地部分。TestPage.jsp放置在deployDemo应用的顶层。程序清单5-4给出了用来分配一个注册名PageName，然后将此注册名与http://host/webAppPrefix/UrlTest2/anything&nbsp;形式的URL相关联的web.xml文件（即，deployDemo/WEB-INF/web.xml）的一部分。<br><br>程序清单5-3&nbsp;TestPage.jsp<br>&lt;!DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.0&nbsp;Transitional//EN"&gt;<br>&lt;HTML&gt;<br>&lt;HEAD&gt;<br>&lt;TITLE&gt;<br>JSP&nbsp;Test&nbsp;Page<br>&lt;/TITLE&gt;<br>&lt;/HEAD&gt;<br>&lt;BODY&nbsp;BGCOLOR="#FDF5E6"&gt;<br>&lt;H2&gt;URI:&nbsp;&lt;%=&nbsp;request.getRequestURI()&nbsp;%&gt;&lt;/H2&gt;<br>&lt;/BODY&gt;<br>&lt;/HTML&gt;<br><br><br>程序清单5-4&nbsp;web.xml（说明JSP页命名的摘录）<br>&lt;?xml&nbsp;version="1.0"&nbsp;encoding="ISO-8859-1"?&gt;<br>&lt;!DOCTYPE&nbsp;web-app<br>PUBLIC&nbsp;"-//Sun&nbsp;Microsystems,&nbsp;Inc.//DTD&nbsp;Web&nbsp;Application&nbsp;2.3//EN"<br>"http://java.sun.com/dtd/web-app_2_3.dtd"&gt;<br><br>&lt;web-app&gt;<br>&lt;!--&nbsp;...&nbsp;--&gt;<br>&lt;servlet&gt;<br>&lt;servlet-name&gt;PageName&lt;/servlet-name&gt;<br>&lt;jsp-file&gt;/TestPage.jsp&lt;/jsp-file&gt;<br>&lt;/servlet&gt;<br>&lt;!--&nbsp;...&nbsp;--&gt;<br>&lt;servlet-mapping&gt;<br>&lt;servlet-name&gt;&nbsp;PageName&nbsp;&lt;/servlet-name&gt;<br>&lt;url-pattern&gt;/UrlTest2/*&lt;/url-pattern&gt;<br>&lt;/servlet-mapping&gt;<br>&lt;!--&nbsp;...&nbsp;--&gt;<br>&lt;/web-app&gt;<br><br><br>4&nbsp;禁止激活器servlet<br><br>对servlet&nbsp;或JSP页面建立定制URL的一个原因是，这样做可以注册从&nbsp;init（servlet）或jspInit（JSP页面）方法中读取得初始化参数。但是，初始化参数只在是利用定制URL模式或注册名访问&nbsp;servlet或JSP页面时可以使用，用缺省URL&nbsp;http://host/webAppPrefix/servlet/ServletName&nbsp;访问时不能使用。因此，你可能会希望关闭缺省URL，这样就不会有人意外地调用初始化servlet了。这个过程有时称为禁止激活器servlet，因为&nbsp;多数服务器具有一个用缺省的servlet&nbsp;URL注册的标准servlet，并激活缺省的URL应用的实际servlet。<br>有两种禁止此缺省URL的主要方法：<br>l&nbsp;在每个Web应用中重新映射/servlet/模式。<br>l&nbsp;全局关闭激活器servlet。<br>重&nbsp;要的是应该注意到，虽然重新映射每个Web应用中的/servlet/模式比彻底禁止激活servlet所做的工作更多，但重新映射可以用一种完全可移植&nbsp;的方式来完成。相反，全局禁止激活器servlet完全是针对具体机器的，事实上有的服务器（如ServletExec）没有这样的选择。下面的讨论对每&nbsp;个Web应用重新映射/servlet/&nbsp;URL模式的策略。后面提供在Tomcat中全局禁止激活器servlet的详细内容。<br>4.1&nbsp;重新映射/servlet/URL模式<br>在一个特定的Web应用中禁止以http://host/webAppPrefix/servlet/&nbsp;开始的URL的处理非常简单。所需做的事情就是建立一个错误消息servlet，并使用前一节讨论的url-pattern元素将所有匹配请求转向该&nbsp;servlet。只要简单地使用：<br>&lt;url-pattern&gt;/servlet/*&lt;/url-pattern&gt;<br>作为servlet-mapping元素中的模式即可。<br>例如，程序清单5-5给出了将SorryServlet&nbsp;servlet（程序清单5-6）与所有以http://host/webAppPrefix/servlet/&nbsp;开头的URL相关联的部署描述符文件的一部分。<br><br>程序清单5-5&nbsp;web.xml（说明JSP页命名的摘录）<br>&lt;?xml&nbsp;version="1.0"&nbsp;encoding="ISO-8859-1"?&gt;<br>&lt;!DOCTYPE&nbsp;web-app<br>PUBLIC&nbsp;"-//Sun&nbsp;Microsystems,&nbsp;Inc.//DTD&nbsp;Web&nbsp;Application&nbsp;2.3//EN"<br>"http://java.sun.com/dtd/web-app_2_3.dtd"&gt;<br><br>&lt;web-app&gt;<br>&lt;!--&nbsp;...&nbsp;--&gt;<br>&lt;servlet&gt;<br>&lt;servlet-name&gt;Sorry&lt;/servlet-name&gt;<br>&lt;servlet-class&gt;moreservlets.SorryServlet&lt;/servlet-class&gt;<br>&lt;/servlet&gt;<br>&lt;!--&nbsp;...&nbsp;--&gt;<br>&lt;servlet-mapping&gt;<br>&lt;servlet-name&gt;&nbsp;Sorry&nbsp;&lt;/servlet-name&gt;<br>&lt;url-pattern&gt;/servlet/*&lt;/url-pattern&gt;<br>&lt;/servlet-mapping&gt;<br>&lt;!--&nbsp;...&nbsp;--&gt;<br>&lt;/web-app&gt;<br><br><br>程序清单5-6&nbsp;SorryServlet.java<br>package&nbsp;moreservlets;<br><br>import&nbsp;java.io.*;<br>import&nbsp;javax.servlet.*;<br>import&nbsp;javax.servlet.http.*;<br><br>/**&nbsp;Simple&nbsp;servlet&nbsp;used&nbsp;to&nbsp;give&nbsp;error&nbsp;messages&nbsp;to<br>*&nbsp;users&nbsp;who&nbsp;try&nbsp;to&nbsp;access&nbsp;default&nbsp;servlet&nbsp;URLs<br>*&nbsp;(i.e.,&nbsp;http://host/webAppPrefix/servlet/ServletName)<br>*&nbsp;in&nbsp;Web&nbsp;applications&nbsp;that&nbsp;have&nbsp;disabled&nbsp;this<br>*&nbsp;behavior.<br>*&nbsp;&lt;P&gt;<br>*&nbsp;Taken&nbsp;from&nbsp;More&nbsp;Servlets&nbsp;and&nbsp;JavaServer&nbsp;Pages<br>*&nbsp;from&nbsp;Prentice&nbsp;Hall&nbsp;and&nbsp;Sun&nbsp;Microsystems&nbsp;Press,<br>*&nbsp;http://www.moreservlets.com/.<br>*&nbsp;&#169;&nbsp;2002&nbsp;Marty&nbsp;Hall;&nbsp;may&nbsp;be&nbsp;freely&nbsp;used&nbsp;or&nbsp;adapted.<br>*/<br><br>public&nbsp;class&nbsp;SorryServlet&nbsp;extends&nbsp;HttpServlet&nbsp;{<br>public&nbsp;void&nbsp;doGet(HttpServletRequest&nbsp;request,<br>HttpServletResponse&nbsp;response)<br>throws&nbsp;ServletException,&nbsp;IOException&nbsp;{<br>response.setContentType("text/html");<br>PrintWriter&nbsp;out&nbsp;=&nbsp;response.getWriter();<br>String&nbsp;title&nbsp;=&nbsp;"Invoker&nbsp;Servlet&nbsp;Disabled.";<br>out.println(ServletUtilities.headWithTitle(title)&nbsp;+<br>"&lt;BODY&nbsp;BGCOLOR=\"#FDF5E6\"&gt;\n"&nbsp;+<br>"&lt;H2&gt;"&nbsp;+&nbsp;title&nbsp;+&nbsp;"&lt;/H2&gt;\n"&nbsp;+<br>"Sorry,&nbsp;access&nbsp;to&nbsp;servlets&nbsp;by&nbsp;means&nbsp;of\n"&nbsp;+<br>"URLs&nbsp;that&nbsp;begin&nbsp;with\n"&nbsp;+<br>"http://host/webAppPrefix/servlet/\n"&nbsp;+<br>"has&nbsp;been&nbsp;disabled.\n"&nbsp;+&nbsp;<br>"&lt;/BODY&gt;&lt;/HTML&gt;");<br>}<br><br>public&nbsp;void&nbsp;doPost(HttpServletRequest&nbsp;request,<br>HttpServletResponse&nbsp;response)<br>throws&nbsp;ServletException,&nbsp;IOException&nbsp;{<br>doGet(request,&nbsp;response);<br>}<br>}<br><br><br>4.2&nbsp;全局禁止激活器：Tomcat<br>Tomcat&nbsp;4中用来关闭缺省URL的方法与Tomcat&nbsp;3中所用的很不相同。下面介绍这两种方法：<br>1．禁止激活器：&nbsp;Tomcat&nbsp;4<br>Tomcat&nbsp;4用与前面相同的方法关闭激活器servlet，即利用web.xml中的url-mapping元素进行关闭。不同之处在于Tomcat使用了放在&nbsp;install_dir/conf中的一个服务器专用的全局web.xml文件，而前面使用的是存放在每个Web应用的WEB-INF目录中的标准&nbsp;web.xml文件。<br>因此，为了在Tomcat&nbsp;4中关闭激活器servlet，只需在install_dir/conf/web.xml中简单地注释出/servlet/*&nbsp;URL映射项即可，如下所示：<br>&lt;!--&nbsp;<br>&lt;servlet-mapping&gt;<br>&lt;servlet-name&gt;invoker&lt;/servlet-name&gt;<br>&lt;url-pattern&gt;/servlet/*&lt;/url-pattern&gt;<br>&lt;/servlet-mapping&gt;<br>--&gt;<br>再次提醒，应该注意这个项是位于存放在install_dir/conf的Tomcat专用的web.xml文件中的，此文件不是存放在每个Web应用的WEB-INF目录中的标准web.xml。<br>2．禁止激活器：Tomcat3<br>在Apache&nbsp;Tomcat的版本3中，通过在install_dir/conf/server.xml中注释出InvokerInterceptor项全局禁止缺省&nbsp;servlet&nbsp;URL。例如，下面是禁止使用缺省servlet&nbsp;URL的server.xml文件的一部分。<br>&lt;!--&nbsp;<br>&lt;RequsetInterceptor&nbsp;<br>className="org.apache.tomcat.request.InvokerInterceptor"<br>debug="0"&nbsp;prefix="/servlet/"&nbsp;/&gt;<br>--&gt;<br><br>5&nbsp;初始化和预装载servlet与JSP页面<br><br>这里讨论控制servlet和JSP页面的启动行为的方法。特别是，说明了怎样分配初始化参数以及怎样更改服务器生存期中装载servlet和JSP页面的时刻。<br>5.1&nbsp;分配servlet初始化参数<br>利&nbsp;用init-param元素向servlet提供初始化参数，init-param元素具有param-name和param-value子元素。例如，&nbsp;在下面的例子中，如果initServlet&nbsp;servlet是利用它的注册名（InitTest）访问的，它将能够从其方法中调用getServletConfig().&nbsp;getInitParameter("param1")获得"Value&nbsp;1"，调用getServletConfig().getInitParameter("param2")获得"2"。<br>&lt;servlet&gt;<br>&lt;servlet-name&gt;InitTest&lt;/servlet-name&gt;<br>&lt;servlet-class&gt;moreservlets.InitServlet&lt;/servlet-class&gt;<br>&lt;init-param&gt;<br>&lt;param-name&gt;param1&lt;/param-name&gt;<br>&lt;param-value&gt;value1&lt;/param-value&gt;<br>&lt;/init-param&gt;<br>&lt;init-param&gt;<br>&lt;param-name&gt;param2&lt;/param-name&gt;<br>&lt;param-value&gt;2&lt;/param-value&gt;<br>&lt;/init-param&gt;<br>&lt;/servlet&gt;<br>在涉及初始化参数时，有几点需要注意：<br>l&nbsp;返回值。GetInitParameter的返回值总是一个String。因此，在前一个例子中，可对param2使用Integer.parseInt获得一个int。<br>l&nbsp;JSP中的初始化。JSP页面使用jspInit而不是init。JSP页面还需要使用jsp-file元素代替servlet-class。<br>l&nbsp;缺省URL。初始化参数只在通过它们的注册名或与它们注册名相关的定制URL模式访问Servlet时可以使用。因此，在这个例子中，param1和&nbsp;param2初始化参数将能够在使用URL&nbsp;http://host/webAppPrefix/servlet/InitTest&nbsp;时可用，但在使用URL&nbsp;http://host/webAppPrefix/servlet/myPackage.InitServlet&nbsp;时不能使用。<br>例如，程序清单5-7给出一个名为InitServlet的简单servlet，它使用init方法设置firstName和emailAddress字段。程序清单5-8给出分配名称InitTest给servlet的web.xml文件。<br>程序清单5-7&nbsp;InitServlet.java<br>package&nbsp;moreservlets;<br><br>import&nbsp;java.io.*;<br>import&nbsp;javax.servlet.*;<br>import&nbsp;javax.servlet.http.*;<br><br>/**&nbsp;Simple&nbsp;servlet&nbsp;used&nbsp;to&nbsp;illustrate&nbsp;servlet<br>*&nbsp;initialization&nbsp;parameters.<br>*&nbsp;&lt;P&gt;<br>*&nbsp;Taken&nbsp;from&nbsp;More&nbsp;Servlets&nbsp;and&nbsp;JavaServer&nbsp;Pages<br>*&nbsp;from&nbsp;Prentice&nbsp;Hall&nbsp;and&nbsp;Sun&nbsp;Microsystems&nbsp;Press,<br>*&nbsp;http://www.moreservlets.com/.<br>*&nbsp;&#169;&nbsp;2002&nbsp;Marty&nbsp;Hall;&nbsp;may&nbsp;be&nbsp;freely&nbsp;used&nbsp;or&nbsp;adapted.<br>*/<br><br>public&nbsp;class&nbsp;InitServlet&nbsp;extends&nbsp;HttpServlet&nbsp;{<br>private&nbsp;String&nbsp;firstName,&nbsp;emailAddress;<br><br>public&nbsp;void&nbsp;init()&nbsp;{<br>ServletConfig&nbsp;config&nbsp;=&nbsp;getServletConfig();<br>firstName&nbsp;=&nbsp;config.getInitParameter("firstName");<br>emailAddress&nbsp;=&nbsp;config.getInitParameter("emailAddress");<br>}<br><br>public&nbsp;void&nbsp;doGet(HttpServletRequest&nbsp;request,<br>HttpServletResponse&nbsp;response)<br>throws&nbsp;ServletException,&nbsp;IOException&nbsp;{<br>response.setContentType("text/html");<br>PrintWriter&nbsp;out&nbsp;=&nbsp;response.getWriter();<br>String&nbsp;uri&nbsp;=&nbsp;request.getRequestURI();<br>out.println(ServletUtilities.headWithTitle("Init&nbsp;Servlet")&nbsp;+<br>"&lt;BODY&nbsp;BGCOLOR=\"#FDF5E6\"&gt;\n"&nbsp;+<br>"&lt;H2&gt;Init&nbsp;Parameters:&lt;/H2&gt;\n"&nbsp;+<br>"&lt;UL&gt;\n"&nbsp;+<br>"&lt;LI&gt;First&nbsp;name:&nbsp;"&nbsp;+&nbsp;firstName&nbsp;+&nbsp;"\n"&nbsp;+<br>"&lt;LI&gt;Email&nbsp;address:&nbsp;"&nbsp;+&nbsp;emailAddress&nbsp;+&nbsp;"\n"&nbsp;+<br>"&lt;/UL&gt;\n"&nbsp;+&nbsp;<br>"&lt;/BODY&gt;&lt;/HTML&gt;");<br>}<br>}<br><br><br>程序清单5-8&nbsp;web.xml（说明初始化参数的摘录）<br>&lt;?xml&nbsp;version="1.0"&nbsp;encoding="ISO-8859-1"?&gt;<br>&lt;!DOCTYPE&nbsp;web-app<br>PUBLIC&nbsp;"-//Sun&nbsp;Microsystems,&nbsp;Inc.//DTD&nbsp;Web&nbsp;Application&nbsp;2.3//EN"<br>"http://java.sun.com/dtd/web-app_2_3.dtd"&gt;<br><br>&lt;web-app&gt;<br>&lt;!--&nbsp;...&nbsp;--&gt;<br>&lt;servlet&gt;<br>&lt;servlet-name&gt;InitTest&lt;/servlet-name&gt;<br>&lt;servlet-class&gt;moreservlets.InitServlet&lt;/servlet-class&gt;<br>&lt;init-param&gt;<br>&lt;param-name&gt;firstName&lt;/param-name&gt;<br>&lt;param-value&gt;Larry&lt;/param-value&gt;<br>&lt;/init-param&gt;<br>&lt;init-param&gt;<br>&lt;param-name&gt;emailAddress&lt;/param-name&gt;<br>&lt;param-value&gt;Ellison@Microsoft.com&lt;/param-value&gt;<br>&lt;/init-param&gt;<br>&lt;/servlet&gt;<br>&lt;!--&nbsp;...&nbsp;--&gt;<br>&lt;/web-app&gt;<br><br>5.2&nbsp;分配JSP初始化参数<br>给JSP页面提供初始化参数在三个方面不同于给servlet提供初始化参数。<br>1）使用jsp-file而不是servlet-class。因此，WEB-INF/web.xml文件的servlet元素如下所示：<br>&lt;servlet&gt;<br>&lt;servlet-name&gt;PageName&lt;/servlet-name&gt;<br>&lt;jsp-file&gt;/RealPage.jsp&lt;/jsp-file&gt;<br>&lt;init-param&gt;<br>&lt;param-name&gt;...&lt;/param-name&gt;<br>&lt;param-value&gt;...&lt;/param-value&gt;<br>&lt;/init-param&gt;<br>...<br>&lt;/servlet&gt;<br>2)&nbsp;几乎总是分配一个明确的URL模式。对servlet，一般相应地使用以http://host/webAppPrefix/servlet/&nbsp;开始的缺省URL。只需记住，使用注册名而不是原名称即可。这对于JSP页面在技术上也是合法的。例如，在上面给出的例子中，可用URL&nbsp;http://host/webAppPrefix/servlet/PageName&nbsp;访问RealPage.jsp的对初始化参数具有访问权的版本。但在用于JSP页面时，许多用户似乎不喜欢应用常规的servlet的URL。此外，如果&nbsp;JSP页面位于服务器为其提供了目录清单的目录中（如，一个既没有index.html也没有index.jsp文件的目录），则用户可能会连接到此&nbsp;JSP页面，单击它，从而意外地激活未初始化的页面。因此，好的办法是使用url-pattern（5.3节）将JSP页面的原URL与注册的&nbsp;servlet名相关联。这样，客户机可使用JSP页面的普通名称，但仍然激活定制的版本。例如，给定来自项目1的servlet定义，可使用下面的&nbsp;servlet-mapping定义：<br>&lt;servlet-mapping&gt;<br>&lt;servlet-name&gt;PageName&lt;/servlet-name&gt;<br>&lt;url-pattern&gt;/RealPage.jsp&lt;/url-pattern&gt;<br>&lt;/servlet-mapping&gt;<br>3）JSP页使用jspInit而不是init。自动从JSP页面建立的servlet或许已经使用了inti方法。因此，使用JSP声明提供一个init方法是不合法的，必须制定jspInit方法。<br>为了说明初始化JSP页面的过程，程序清单5-9给出了一个名为InitPage.jsp的JSP页面，它包含一个jspInit方法且放置于&nbsp;deployDemo&nbsp;Web应用层次结构的顶层。一般，http://host/deployDemo/InitPage.jsp&nbsp;形式的URL将激活此页面的不具有初始化参数访问权的版本，从而将对firstName和emailAddress变量显示null。但是，&nbsp;web.xml文件（程序清单5-10）分配了一个注册名，然后将该注册名与URL模式/InitPage.jsp相关联。<br><br>程序清单5-9&nbsp;InitPage.jsp<br>&lt;!DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.0&nbsp;Transitional//EN"&gt;<br>&lt;HTML&gt;<br>&lt;HEAD&gt;&lt;TITLE&gt;JSP&nbsp;Init&nbsp;Test&lt;/TITLE&gt;&lt;/HEAD&gt;<br>&lt;BODY&nbsp;BGCOLOR="#FDF5E6"&gt;<br>&lt;H2&gt;Init&nbsp;Parameters:&lt;/H2&gt;<br>&lt;UL&gt;<br>&lt;LI&gt;First&nbsp;name:&nbsp;&lt;%=&nbsp;firstName&nbsp;%&gt;<br>&lt;LI&gt;Email&nbsp;address:&nbsp;&lt;%=&nbsp;emailAddress&nbsp;%&gt;<br>&lt;/UL&gt;<br>&lt;/BODY&gt;&lt;/HTML&gt;<br>&lt;%!<br>private&nbsp;String&nbsp;firstName,&nbsp;emailAddress;<br><br>public&nbsp;void&nbsp;jspInit()&nbsp;{<br>ServletConfig&nbsp;config&nbsp;=&nbsp;getServletConfig();<br>firstName&nbsp;=&nbsp;config.getInitParameter("firstName");<br>emailAddress&nbsp;=&nbsp;config.getInitParameter("emailAddress");<br>}<br>%&gt;<br><br><br>程序清单5-10&nbsp;web.xml（说明JSP页面的init参数的摘录）<br>&lt;?xml&nbsp;version="1.0"&nbsp;encoding="ISO-8859-1"?&gt;<br>&lt;!DOCTYPE&nbsp;web-app<br>PUBLIC&nbsp;"-//Sun&nbsp;Microsystems,&nbsp;Inc.//DTD&nbsp;Web&nbsp;Application&nbsp;2.3//EN"<br>"http://java.sun.com/dtd/web-app_2_3.dtd"&gt;<br><br>&lt;web-app&gt;<br>&lt;!--&nbsp;...&nbsp;--&gt;<br>&lt;servlet&gt;<br>&lt;servlet-name&gt;InitPage&lt;/servlet-name&gt;<br>&lt;jsp-file&gt;/InitPage.jsp&lt;/jsp-file&gt;<br>&lt;init-param&gt;<br>&lt;param-name&gt;firstName&lt;/param-name&gt;<br>&lt;param-value&gt;Bill&lt;/param-value&gt;<br>&lt;/init-param&gt;<br>&lt;init-param&gt;<br>&lt;param-name&gt;emailAddress&lt;/param-name&gt;<br>&lt;param-value&gt;gates@oracle.com&lt;/param-value&gt;<br>&lt;/init-param&gt;<br>&lt;/servlet&gt;<br>&lt;!--&nbsp;...&nbsp;--&gt;&nbsp;<br>&lt;servlet-mapping&gt;<br>&lt;servlet-name&gt;&nbsp;InitPage&lt;/servlet-name&gt;<br>&lt;url-pattern&gt;/InitPage.jsp&lt;/url-pattern&gt;<br>&lt;/servlet-mapping&gt;<br>&lt;!--&nbsp;...&nbsp;--&gt;<br>&lt;/web-app&gt;<br><br><br>5.3&nbsp;提供应用范围内的初始化参数<br>一&nbsp;般，对单个地servlet或JSP页面分配初始化参数。指定的servlet或JSP页面利用ServletConfig的&nbsp;getInitParameter方法读取这些参数。但是，在某些情形下，希望提供可由任意servlet或JSP页面借助ServletContext&nbsp;的getInitParameter方法读取的系统范围内的初始化参数。<br>可利用context-param元素声明这些系统范围内的初始化值。context-param元素应该包含param-name、param-value以及可选的description子元素，如下所示：<br>&lt;context-param&gt;<br>&lt;param-name&gt;support-email&lt;/param-name&gt;<br>&lt;param-value&gt;blackhole@mycompany.com&lt;/param-value&gt;<br>&lt;/context-param&gt;<br>可&nbsp;回忆一下，为了保证可移植性，web.xml内的元素必须以正确的次序声明。但这里应该注意，context-param元素必须出现任意与文档有关的元&nbsp;素（icon、display-name或description）之后及filter、filter-mapping、listener或&nbsp;servlet元素之前。<br>5.4&nbsp;在服务器启动时装载servlet<br>假如servlet或JSP页面有一个要花很长时间执行的init&nbsp;（servlet）或jspInit（JSP）方法。例如，假如init或jspInit方法从某个数据库或ResourceBundle查找产量。这种&nbsp;情况下，在第一个客户机请求时装载servlet的缺省行为将对第一个客户机产生较长时间的延迟。因此，可利用servlet的load-on-&nbsp;startup元素规定服务器在第一次启动时装载servlet。下面是一个例子。<br>&lt;servlet&gt;<br>&lt;servlet-name&gt;&nbsp;&#8230;&nbsp;&lt;/servlet-name&gt;<br>&lt;servlet-class&gt;&nbsp;&#8230;&nbsp;&lt;/servlet-class&gt;&nbsp;&lt;!--&nbsp;Or&nbsp;jsp-file&nbsp;--&gt;<br>&lt;load-on-startup/&gt;<br>&lt;/servlet&gt;<br>可&nbsp;以为此元素体提供一个整数而不是使用一个空的load-on-startup。想法是服务器应该在装载较大数目的servlet或JSP页面之前装载较少&nbsp;数目的servlet或JSP页面。例如，下面的servlet项（放置在Web应用的WEB-INF目录下的web.xml文件中的web-app元素&nbsp;内）将指示服务器首先装载和初始化SearchServlet，然后装载和初始化由位于Web应用的result目录中的index.jsp文件产生的&nbsp;servlet。<br>&lt;servlet&gt;<br>&lt;servlet-name&gt;Search&lt;/servlet-name&gt;<br>&lt;servlet-class&gt;myPackage.SearchServlet&lt;/servlet-class&gt;&nbsp;&lt;!--&nbsp;Or&nbsp;jsp-file&nbsp;--&gt;<br>&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br>&lt;/servlet&gt;<br>&lt;servlet&gt;<br>&lt;servlet-name&gt;Results&lt;/servlet-name&gt;<br>&lt;servlet-class&gt;/results/index.jsp&lt;/servlet-class&gt;&nbsp;&lt;!--&nbsp;Or&nbsp;jsp-file&nbsp;--&gt;<br>&lt;load-on-startup&gt;2&lt;/load-on-startup&gt;<br>&lt;/servlet&gt;<br><br>6&nbsp;声明过滤器<br><br>servlet版本2.3引入了过滤器的概念。虽然所有支持servlet&nbsp;API版本2.3的服务器都支持过滤器，但为了使用与过滤器有关的元素，必须在web.xml中使用版本2.3的DTD。<br>过&nbsp;滤器可截取和修改进入一个servlet或JSP页面的请求或从一个servlet或JSP页面发出的相应。在执行一个servlet或JSP页面之前，&nbsp;必须执行第一个相关的过滤器的doFilter方法。在该过滤器对其FilterChain对象调用doFilter时，执行链中的下一个过滤器。如果没&nbsp;有其他过滤器，servlet或JSP页面被执行。过滤器具有对到来的ServletRequest对象的全部访问权，因此，它们可以查看客户机名、查找&nbsp;到来的cookie等。为了访问servlet或JSP页面的输出，过滤器可将响应对象包裹在一个替身对象（stand-in&nbsp;object）中，比方说把输出累加到一个缓冲区。在调用FilterChain对象的doFilter方法之后，过滤器可检查缓冲区，如有必要，就对它&nbsp;进行修改，然后传送到客户机。<br>例如，程序清单5-11帝国难以了一个简单的过滤器，只要访问相关的servlet或JSP页面，它就截取请求并在标准输出上打印一个报告（开发过程中在桌面系统上运行时，大多数服务器都可以使用这个过滤器）。<br><br>程序清单5-11&nbsp;ReportFilter.java<br>package&nbsp;moreservlets;<br><br>import&nbsp;java.io.*;<br>import&nbsp;javax.servlet.*;<br>import&nbsp;javax.servlet.http.*;<br>import&nbsp;java.util.*;<br><br>/**&nbsp;Simple&nbsp;filter&nbsp;that&nbsp;prints&nbsp;a&nbsp;report&nbsp;on&nbsp;the&nbsp;standard&nbsp;output&nbsp;<br>*&nbsp;whenever&nbsp;the&nbsp;associated&nbsp;servlet&nbsp;or&nbsp;JSP&nbsp;page&nbsp;is&nbsp;accessed.<br>*&nbsp;&lt;P&gt;<br>*&nbsp;Taken&nbsp;from&nbsp;More&nbsp;Servlets&nbsp;and&nbsp;JavaServer&nbsp;Pages<br>*&nbsp;from&nbsp;Prentice&nbsp;Hall&nbsp;and&nbsp;Sun&nbsp;Microsystems&nbsp;Press,<br>*&nbsp;http://www.moreservlets.com/.<br>*&nbsp;&#169;&nbsp;2002&nbsp;Marty&nbsp;Hall;&nbsp;may&nbsp;be&nbsp;freely&nbsp;used&nbsp;or&nbsp;adapted.<br>*/<br><br>public&nbsp;class&nbsp;ReportFilter&nbsp;implements&nbsp;Filter&nbsp;{<br>public&nbsp;void&nbsp;doFilter(ServletRequest&nbsp;request,<br>ServletResponse&nbsp;response,<br>FilterChain&nbsp;chain)<br>throws&nbsp;ServletException,&nbsp;IOException&nbsp;{<br>HttpServletRequest&nbsp;req&nbsp;=&nbsp;(HttpServletRequest)request;<br>System.out.println(req.getRemoteHost()&nbsp;+<br>"&nbsp;tried&nbsp;to&nbsp;access&nbsp;"&nbsp;+<br>req.getRequestURL()&nbsp;+<br>"&nbsp;on&nbsp;"&nbsp;+&nbsp;new&nbsp;Date()&nbsp;+&nbsp;".");<br>chain.doFilter(request,response);<br>}<br><br>public&nbsp;void&nbsp;init(FilterConfig&nbsp;config)<br>throws&nbsp;ServletException&nbsp;{<br>}<br><br>public&nbsp;void&nbsp;destroy()&nbsp;{}<br>}<br><br>一&nbsp;旦建立了一个过滤器，可以在web.xml中利用filter元素以及filter-name（任意名称）、file-class（完全限定的类名）和&nbsp;（可选的）init-params子元素声明它。请注意，元素在web.xml的web-app元素中出现的次序不是任意的；允许服务器（但不是必需的）&nbsp;强制所需的次序，并且实际中有些服务器也是这样做的。但这里要注意，所有filter元素必须出现在任意filter-mapping元素之前，&nbsp;filter-mapping元素又必须出现在所有servlet或servlet-mapping元素之前。<br>例如，给定上述的ReportFilter类，可在web.xml中作出下面的filter声明。它把名称Reporter与实际的类ReportFilter（位于moreservlets程序包中）相关联。<br>&lt;filter&gt;<br>&lt;filter-name&gt;Reporter&lt;/filter-name&gt;<br>&lt;filter-class&gt;moresevlets.ReportFilter&lt;/filter-class&gt;<br>&lt;/filter&gt;<br>一旦命名了一个过滤器，可利用filter-mapping元素把它与一个或多个servlet或JSP页面相关联。关于此项工作有两种选择。<br>首&nbsp;先，可使用filter-name和servlet-name子元素把此过滤器与一个特定的servlet名（此servlet名必须稍后在相同的&nbsp;web.xml文件中使用servlet元素声明）关联。例如，下面的程序片断指示系统只要利用一个定制的URL访问名为SomeServletName&nbsp;的servlet或JSP页面，就运行名为Reporter的过滤器。<br>&lt;filter-mapping&gt;<br>&lt;filter-name&gt;Reporter&lt;/filter-name&gt;<br>&lt;servlet-name&gt;SomeServletName&lt;/servlet-name&gt;<br>&lt;/filter-mapping&gt;<br>其次，可利用filter-name和url-pattern子元素将过滤器与一组servlet、JSP页面或静态内容相关联。例如，相面的程序片段指示系统只要访问Web应用中的任意URL，就运行名为Reporter的过滤器。<br>&lt;filter-mapping&gt;<br>&lt;filter-name&gt;Reporter&lt;/filter-name&gt;<br>&lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br>&lt;/filter-mapping&gt;<br>例&nbsp;如，程序清单5-12给出了将ReportFilter过滤器与名为PageName的servlet相关联的web.xml文件的一部分。名字&nbsp;PageName依次又与一个名为TestPage.jsp的JSP页面以及以模式http:&nbsp;//host/webAppPrefix/UrlTest2/&nbsp;开头的URL相关联。TestPage.jsp的源代码已经JSP页面命名的谈论在前面的3节"分配名称和定制的URL"中给出。事实上，程序清单5-&nbsp;12中的servlet和servlet-name项从该节原封不动地拿过来的。给定这些web.xml项，可看到下面的标准输出形式的调试报告（换行是&nbsp;为了容易阅读）。<br>audit.irs.gov&nbsp;tried&nbsp;to&nbsp;access&nbsp;<br>http://mycompany.com/deployDemo/UrlTest2/business/tax-plan.html<br>on&nbsp;Tue&nbsp;Dec&nbsp;25&nbsp;13:12:29&nbsp;EDT&nbsp;2001.<br><br>程序清单5-12&nbsp;Web.xml（说明filter用法的摘录）<br>&lt;?xml&nbsp;version="1.0"&nbsp;encoding="ISO-8859-1"?&gt;<br>&lt;!DOCTYPE&nbsp;web-app<br>PUBLIC&nbsp;"-//Sun&nbsp;Microsystems,&nbsp;Inc.//DTD&nbsp;Web&nbsp;Application&nbsp;2.3//EN"<br>"http://java.sun.com/dtd/web-app_2_3.dtd"&gt;<br><br>&lt;web-app&gt;<br>&lt;filter&gt;<br>&lt;filter-name&gt;Reporter&lt;/filter-name&gt;<br>&lt;filter-class&gt;moresevlets.ReportFilter&lt;/filter-class&gt;<br>&lt;/filter&gt;<br>&lt;!--&nbsp;...&nbsp;--&gt;<br>&lt;filter-mapping&gt;<br>&lt;filter-name&gt;Reporter&lt;/filter-name&gt;<br>&lt;servlet-name&gt;PageName&lt;/servlet-name&gt;<br>&lt;/filter-mapping&gt;<br>&lt;!--&nbsp;...&nbsp;--&gt;<br>&lt;servlet&gt;<br>&lt;servlet-name&gt;PageName&lt;/servlet-name&gt;<br>&lt;jsp-file&gt;/RealPage.jsp&lt;/jsp-file&gt;<br>&lt;/servlet&gt;<br>&lt;!--&nbsp;...&nbsp;--&gt;<br>&lt;servlet-mapping&gt;<br>&lt;servlet-name&gt;&nbsp;PageName&nbsp;&lt;/servlet-name&gt;<br>&lt;url-pattern&gt;/UrlTest2/*&lt;/url-pattern&gt;<br>&lt;/servlet-mapping&gt;<br>&lt;!--&nbsp;...&nbsp;--&gt;<br>&lt;/web-app&gt;<br><br><br>7&nbsp;指定欢迎页<br><br>假&nbsp;如用户提供了一个像http:&nbsp;//host/webAppPrefix/directoryName/&nbsp;这样的包含一个目录名但没有包含文件名的URL，会发生什么事情呢？用户能得到一个目录表？一个错误？还是标准文件的内容？如果得到标准文件内容，是&nbsp;index.html、index.jsp、default.html、default.htm或别的什么东西呢？<br>Welcome-file-list&nbsp;元素及其辅助的welcome-file元素解决了这个模糊的问题。例如，下面的web.xml项指出，如果一个URL给出一个目录名但未给出文件名，服&nbsp;务器应该首先试用index.jsp，然后再试用index.html。如果两者都没有找到，则结果有赖于所用的服务器（如一个目录列表）。<br>&lt;welcome-file-list&gt;<br>&lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br>&lt;welcome-file&gt;index.html&lt;/welcome-file&gt;<br>&lt;/welcome-file-list&gt;<br>虽然许多服务器缺省遵循这种行为，但不一定必须这样。因此，明确地使用welcom-file-list保证可移植性是一种良好的习惯。<br><br>8&nbsp;指定处理错误的页面<br><br>现&nbsp;在我了解到，你在开发servlet和JSP页面时从不会犯错误，而且你的所有页面是那样的清晰，一般的程序员都不会被它们的搞糊涂。但是，是人总会犯错&nbsp;误的，用户可能会提供不合规定的参数，使用不正确的URL或者不能提供必需的表单字段值。除此之外，其它开发人员可能不那么细心，他们应该有些工具来克服&nbsp;自己的不足。<br>error-page元素就是用来克服这些问题的。它有两个可能的子元素，分别是：error-code和exception-&nbsp;type。第一个子元素error-code指出在给定的HTTP错误代码出现时使用的URL。第二个子元素excpetion-type指出在出现某个&nbsp;给定的Java异常但未捕捉到时使用的URL。error-code和exception-type都利用location元素指出相应的URL。此&nbsp;URL必须以/开始。location所指出的位置处的页面可通过查找HttpServletRequest对象的两个专门的属性来访问关于错误的信息，&nbsp;这两个属性分别是：javax.servlet.error.status_code和javax.servlet.error.message。<br>可回忆一下，在web.xml内以正确的次序声明web-app的子元素很重要。这里只要记住，error-page出现在web.xml文件的末尾附近，servlet、servlet-name和welcome-file-list之后即可。<br><br>8.1&nbsp;error-code元素<br>为了更好地了解error-code元素的值，可考虑一下如果不正确地输入文件名，大多数站点会作出什么反映。这样做一般会出现一个404错误信息，它表示不能找到该文件，但几乎没提供更多有用的信息。另一方面，可以试一下在www.microsoft.com、www.ibm.com&nbsp;处或者特别是在www.bea.com&nbsp;处输出未知的文件名。这是会得出有用的消息，这些消息提供可选择的位置，以便查找感兴趣的页面。提供这样有用的错误页面对于Web应用来说是很有价值得。&nbsp;事实上rm-error-page子元素）。由form-login-page给出的HTML表单必须具有一个j_security_check的&nbsp;ACTION属性、一个名为j_username的用户名文本字段以及一个名为j_password的口令字段。<br>例如，程序清单5-19指示服务器使用基于表单的验证。Web应用的顶层目录中的一个名为login.jsp的页面将收集用户名和口令，并且失败的登陆将由相同目录中名为login-error.jsp的页面报告。<br><br>程序清单5-19&nbsp;web.xml（说明login-config的摘录）<br>&lt;?xml&nbsp;version="1.0"&nbsp;encoding="ISO-8859-1"?&gt;<br>&lt;!DOCTYPE&nbsp;web-app<br>PUBLIC&nbsp;"-//Sun&nbsp;Microsystems,&nbsp;Inc.//DTD&nbsp;Web&nbsp;Application&nbsp;2.3//EN"<br>"http://java.sun.com/dtd/web-app_2_3.dtd"&gt;<br><br>&lt;web-app&gt;<br>&lt;!--&nbsp;...&nbsp;--&gt;<br>&lt;security-constraint&gt;&nbsp;...&nbsp;&lt;/security-constraint&gt;<br>&lt;login-config&gt;<br>&lt;auth-method&gt;&nbsp;FORM&nbsp;&lt;/auth-method&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;/login-error.jsp&lt;/form-error-page&gt;<br>&lt;/form-login-config&gt;<br>&lt;/login-config&gt;<br>&lt;!--&nbsp;...&nbsp;--&gt;<br>&lt;/web-app&gt;<br><br><br>9.2&nbsp;限制对Web资源的访问<br>现&nbsp;在，可以指示服务器使用何种验证方法了。"了不起，"你说道，"除非我能指定一个来收到保护的&nbsp;URL，否则没有多大用处。"没错。指出这些URL并说明他们应该得到何种保护正是security-constriaint元素的用途。此元素在&nbsp;web.xml中应该出现在login-config的紧前面。它包含是个可能的子元素，分别是：web-resource-collection、&nbsp;auth-constraint、user-data-constraint和display-name。下面各小节对它们进行介绍。<br>l&nbsp;web-resource-collection<br>此&nbsp;元素确定应该保护的资源。所有security-constraint元素都必须包含至少一个web-resource-collection项。此元素&nbsp;由一个给出任意标识名称的web-resource-name元素、一个确定应该保护的URL的url-pattern元素、一个指出此保护所适用的&nbsp;HTTP命令（GET、POST等，缺省为所有方法）的http-method元素和一个提供资料的可选description元素组成。例如，下面的&nbsp;Web-resource-collection项（在security-constratint元素内）指出Web应用的proprietary目录中&nbsp;所有文档应该受到保护。<br>&lt;security-constraint&gt;<br>&lt;web-resource-coolection&gt;<br>&lt;web-resource-name&gt;Proprietary&lt;/web-resource-name&gt;<br>&lt;url-pattern&gt;/propritary/*&lt;/url-pattern&gt;<br>&lt;/web-resource-coolection&gt;<br>&lt;!--&nbsp;...&nbsp;--&gt;<br>&lt;/security-constraint&gt;<br>重&nbsp;要的是应该注意到，url-pattern仅适用于直接访问这些资源的客户机。特别是，它不适合于通过MVC体系结构利用&nbsp;RequestDispatcher来访问的页面，或者不适合于利用类似jsp:forward的手段来访问的页面。这种不匀称如果利用得当的话很有好&nbsp;处。例如，servlet可利用MVC体系结构查找数据，把它放到bean中，发送请求到从bean中提取数据的JSP页面并显示它。我们希望保证决不直&nbsp;接访问受保护的JSP页面，而只是通过建立该页面将使用的bean的servlet来访问它。url-pattern和auth-contraint元素&nbsp;可通过声明不允许任何用户直接访问JSP页面来提供这种保证。但是，这种不匀称的行为可能让开发人员放松警惕，使他们偶然对应受保护的资源提供不受限制的&nbsp;访问。&nbsp;<br>l&nbsp;auth-constraint<br>尽管web-resource-collention元素质出了哪些URL应该受到保护，&nbsp;但是auth-constraint元素却指出哪些用户应该具有受保护资源的访问权。此元素应该包含一个或多个标识具有访问权限的用户类别role-&nbsp;name元素，以及包含（可选）一个描述角色的description元素。例如，下面web.xml中的security-constraint元素部&nbsp;门规定只有指定为Administrator或Big&nbsp;Kahuna（或两者）的用户具有指定资源的访问权。<br>&lt;security-constraint&gt;<br>&lt;web-resource-coolection&gt;&nbsp;...&nbsp;&lt;/web-resource-coolection&gt;<br>&lt;auth-constraint&gt;<br>&lt;role-name&gt;administrator&lt;/role-name&gt;<br>&lt;role-name&gt;kahuna&lt;/role-name&gt;<br>&lt;/auth-constraint&gt;<br>&lt;/security-constraint&gt;<br>重要的是认识到，到此为止，这个过程的可移植部分结束了。服务器怎样确定哪些用户处于任何角色以及它怎样存放用户的口令，完全有赖于具体的系统。<br>例如，Tomcat使用install_dir/conf/tomcat-users.xml将用户名与角色名和口令相关联，正如下面例子中所示，它指出用户joe（口令bigshot）和jane（口令enaj）属于administrator和kahuna角色。<br>&lt;tomcat-users&gt;<br>&lt;user&nbsp;name="joe"&nbsp;password="bigshot"&nbsp;roles="administrator,kahuna"&nbsp;/&gt;<br>&lt;user&nbsp;name="jane"&nbsp;password="enaj"&nbsp;roles="kahuna"&nbsp;/&gt;<br>&lt;/tomcat-users&gt;<br>l&nbsp;user-data-constraint<br>这&nbsp;个可选的元素指出在访问相关资源时使用任何传输层保护。它必须包含一个transport-guarantee子元素（合法值为NONE、&nbsp;INTEGRAL或CONFIDENTIAL），并且可选地包含一个description元素。transport-guarantee为NONE值将&nbsp;对所用的通讯协议不加限制。INTEGRAL值表示数据必须以一种防止截取它的人阅读它的方式传送。虽然原理上（并且在未来的HTTP版本中），在&nbsp;INTEGRAL和CONFIDENTIAL之间可能会有差别，但在当前实践中，他们都只是简单地要求用SSL。例如，下面指示服务器只允许对相关资源做&nbsp;HTTPS连接：<br>&lt;security-constraint&gt;<br>&lt;!--&nbsp;...&nbsp;--&gt;<br>&lt;user-data-constraint&gt;<br>&lt;transport-guarantee&gt;CONFIDENTIAL&lt;/transport-guarantee&gt;<br>&lt;/user-data-constraint&gt;<br>&lt;/security-constraint&gt;<br>l&nbsp;display-name<br>security-constraint的这个很少使用的子元素给予可能由GUI工具使用的安全约束项一个名称。<br>9.3&nbsp;分配角色名<br>迄今为止，讨论已经集中到完全由容器（服务器）处理的安全问题之上了。但servlet以及JSP页面也能够处理它们自己的安全问题。<br>例&nbsp;如，容器可能允许用户从bigwig或bigcheese角色访问一个显示主管人员额外紧贴的页面，但只允许bigwig用户修改此页面的参数。完成这种&nbsp;更细致的控制的一种常见方法是调用HttpServletRequset的isUserInRole方法，并据此修改访问。<br>Servlet的&nbsp;security-role-ref子元素提供出现在服务器专用口令文件中的安全角色名的一个别名。例如，假如编写了一个调用&nbsp;request.isUserInRole（"boss"）的servlet，但后来该servlet被用在了一个其口令文件调用角色manager而不&nbsp;是boss的服务器中。下面的程序段使该servlet能够使用这两个名称中的任何一个。<br>&lt;servlet&gt;<br>&lt;!--&nbsp;...&nbsp;--&gt;<br>&lt;security-role-ref&gt;<br>&lt;role-name&gt;boss&lt;/role-name&gt;&nbsp;&lt;!--&nbsp;New&nbsp;alias&nbsp;--&gt;<br>&lt;role-link&gt;manager&lt;/role-link&gt;&nbsp;&lt;!--&nbsp;Real&nbsp;name&nbsp;--&gt;<br>&lt;/security-role-ref&gt;<br>&lt;/servlet&gt;<br>也可以在web-app内利用security-role元素提供将出现在role-name元素中的所有安全角色的一个全局列表。分别地生命角色使高级IDE容易处理安全信息。<br><br>10&nbsp;控制会话超时<br><br>如&nbsp;果某个会话在一定的时间内未被访问，服务器可把它扔掉以节约内存。可利用HttpSession的setMaxInactiveInterval方法直接&nbsp;设置个别会话对象的超时值。如果不采用这种方法，则缺省的超时值由具体的服务器决定。但可利用session-config和session-&nbsp;timeout元素来给出一个适用于所有服务器的明确的超时值。超时值的单位为分钟，因此，下面的例子设置缺省会话超时值为三个小时（180分钟）。<br>&lt;session-config&gt;<br>&lt;session-timeout&gt;180&lt;/session-timeout&gt;<br>&lt;/session-config&gt;<br><br>11&nbsp;Web应用的文档化<br><br>越&nbsp;来越多的开发环境开始提供servlet和JSP的直接支持。例子有Borland&nbsp;Jbuilder&nbsp;Enterprise&nbsp;Edition、Macromedia&nbsp;UltraDev、Allaire&nbsp;JRun&nbsp;Studio（写此文时，已被Macromedia收购）以及IBM&nbsp;VisuaAge&nbsp;for&nbsp;Java等。<br>大量的web.xml元素不仅是为服务器设计的，而且还是为可视开发环境设计的。它们包括icon、display-name和discription等。<br>可回忆一下，在web.xml内以适当地次序声明web-app子元素很重要。不过，这里只要记住icon、display-name和description是web.xml的web-app元素内的前三个合法元素即可。<br>l&nbsp;icon<br>icon元素指出GUI工具可用来代表Web应用的一个和两个图像文件。可利用small-icon元素指定一幅16&nbsp;x&nbsp;16的GIF或JPEG图像，用large-icon元素指定一幅32&nbsp;x&nbsp;32的图像。下面举一个例子：&nbsp;<br>&lt;icon&gt;<br>&lt;small-icon&gt;/images/small-book.gif&lt;/small-icon&gt;<br>&lt;large-icon&gt;/images/tome.jpg&lt;/large-icon&gt;<br>&lt;/icon&gt;<br>l&nbsp;display-name<br>display-name元素提供GUI工具可能会用来标记此Web应用的一个名称。下面是个例子。<br>&lt;display-name&gt;Rare&nbsp;Books&lt;/display-name&gt;<br>l&nbsp;description<br>description元素提供解释性文本，如下所示：<br>&lt;description&gt;<br>This&nbsp;Web&nbsp;application&nbsp;represents&nbsp;the&nbsp;store&nbsp;developed&nbsp;for<br>rare-books.com,&nbsp;an&nbsp;online&nbsp;bookstore&nbsp;specializing&nbsp;in&nbsp;rare<br>and&nbsp;limited-edition&nbsp;books.<br>&lt;/description&gt;
<img src ="http://www.blogjava.net/simie/aggbug/127520.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/simie/" target="_blank">和田雨</a> 2007-07-02 13:05 <a href="http://www.blogjava.net/simie/archive/2007/07/02/127520.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP中web配置:web.xml </title><link>http://www.blogjava.net/simie/archive/2007/07/02/127501.html</link><dc:creator>和田雨</dc:creator><author>和田雨</author><pubDate>Mon, 02 Jul 2007 04:22:00 GMT</pubDate><guid>http://www.blogjava.net/simie/archive/2007/07/02/127501.html</guid><wfw:comment>http://www.blogjava.net/simie/comments/127501.html</wfw:comment><comments>http://www.blogjava.net/simie/archive/2007/07/02/127501.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/simie/comments/commentRss/127501.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/simie/services/trackbacks/127501.html</trackback:ping><description><![CDATA[常用的设定,详细请看:<a href="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><u><font color=#800080>http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd</font></u></a>
<div><font color=#000080>XML声明，定义XML的版本、编码格式。还有最重要的schema的来源</font></div>
<div>&lt;?xml version="1.0" <font color=#800000>encoding</font>="UTF-8"?&gt;<br>&lt;web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"&gt;<br>&nbsp; <font color=#800000>.......</font><br>&lt;/web-app&gt;</div>
<div>&nbsp;</div>
<div>&lt;description&gt;</div>
<div>当servlet的URL定义为其他文件类型的扩展名,该文件类型将不能访问,而访问了servlet</div>
<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br>&lt;web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"&gt;<br>&nbsp; &lt;display-name&gt;myweb&lt;/display-name&gt;&lt;!--站点名称--&gt;<br>&nbsp; &lt;description&gt;这里是站点描述&lt;/description&gt;<br>&nbsp; &lt;icon&gt;<br>&nbsp;&nbsp;&nbsp; &lt;small-icon&gt;/images/small.gif&lt;/small-icon&gt;&lt;!--小图标的路径16*16,必须为gif jpge格式--&gt;<br>&nbsp;&nbsp;&nbsp; &lt;large-icon&gt;/images/large.gif&lt;/large-icon&gt;&lt;!--大图标的路径32*32,必须为gif jpge格式--&gt;<br>&nbsp; &lt;/icon&gt;<br>&nbsp; &lt;!--如果存在&lt;distributable/&gt;则代表该站点能在多个JSP Container之间分散执行(分布式)--&gt;<br>&nbsp; &lt;distributable/&gt;<br><br><br><br><br>&nbsp; &lt;context-param&gt;&lt;!--环境参数,设置常量,取得常量&nbsp; this.getInitParameter("context");--&gt;<br>&nbsp;&nbsp;&nbsp; &lt;param-name&gt;context&lt;/param-name&gt;<br>&nbsp;&nbsp;&nbsp; &lt;param-value&gt;10000&lt;/param-value&gt;<br>&nbsp; &lt;/context-param&gt;<br>&nbsp; &lt;filter&gt;&lt;!--声明filter--&gt;<br><br>&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;filterName&lt;/filter-name&gt;<br>&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;filter.filterName&lt;/filter-class&gt;<br>&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;encoding&lt;/param-name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;UTF-8&lt;/param-value&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br>&nbsp; &lt;/filter&gt;<br>&nbsp; &lt;filter-mapping&gt;&lt;!--定义filter所对应的URL--&gt;<br>&nbsp;   &lt;filter-name&gt;filterName&lt;/filter-name&gt;<br>&nbsp;   &lt;url-pattern&gt;/filterName&lt;/url-pattern&gt;<br>&nbsp;   &lt;dispatcher&gt;REQUEST|INCLUDE|FORWARD|ERROR&lt;/dispatcher&gt;&lt;!--filter对应的请求方式,有4种方式,默认REQUEST--&gt;<br>&nbsp; &lt;/filter-mapping&gt;<br>&nbsp; &lt;listener&gt;&lt;!--设定Listener接口--&gt;<br>&nbsp;&nbsp;&nbsp; &lt;listener-class&gt;listener.ListenerClassName&lt;/listener-class&gt;<br>&nbsp; &lt;/listener&gt;<br>&nbsp; &lt;servlet&gt;&lt;!--声明servlet的数据--&gt;<br>&nbsp;   &lt;servlet-name&gt;servletName&lt;/servlet-name&gt;<br>&nbsp;   &lt;servlet-class&gt;servlet.servletName&lt;/servlet-class&gt;<br>&nbsp;   &lt;init-param&gt;&lt;!--初始化参数,可以在init()中使用ServletConfig().getInitParamenter("name")取得--&gt;<br>&nbsp;&nbsp;&nbsp;   &lt;param-name&gt;name&lt;/param-name&gt;<br>&nbsp;&nbsp;&nbsp;   &lt;param-value&gt;123&lt;/param-value&gt;<br>&nbsp;   &lt;/init-param&gt;<br>&nbsp;   &lt;load-on-startup&gt;n&lt;/load-on-startup&gt;&lt;!--站点启动时,此servlet会被自动加载执行,1表示最早,2,3...--&gt;<br><br>&nbsp; &lt;/servlet&gt;<br>&nbsp; &lt;servlet-mapping&gt;&lt;!--定义servlet所对应的URL--&gt;<br><br>&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;name&lt;/servlet-name&gt;<br>&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/name&lt;/url-pattern&gt;<br>&nbsp; &lt;/servlet-mapping&gt;<br>&nbsp; &lt;session-config&gt;&lt;!--设置session超时时间（20分钟）默认按服务器配置--&gt;<br>&nbsp;&nbsp;&nbsp; &lt;session-timeout&gt;20&lt;/session-timeout&gt;<br>&nbsp; &lt;/session-config&gt;<br>&nbsp; &lt;mime-mapping&gt;&lt;!--定义某个扩展名和某个MIME Type做映射--&gt;<br>&nbsp;&nbsp;&nbsp; &lt;extension&gt;doc&lt;/extension&gt;<br>&nbsp;&nbsp;&nbsp; &lt;mime-type&gt;application/vnd.ms-word&lt;/mime-type&gt;<br>&nbsp; &lt;/mime-mapping&gt;<br>&nbsp; &lt;welcome-file-list&gt;&lt;!--设置首页列表--&gt;<br>&nbsp;   &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br>&nbsp; &lt;/welcome-file-list&gt;<br>&nbsp; &lt;error-page&gt;&lt;!--将错误代码对应到WEB站点的资源路径--&gt;<br>&nbsp;   &lt;error-code&gt;错误代码&lt;/error-code&gt;Exception<br>&nbsp;   &lt;location&gt;/路径/&lt;/location&gt;<br><br>&nbsp; &lt;/error-page&gt;<br>&nbsp; &lt;error-page&gt;&lt;!--将异常的种类对应到WEB站点的资源路径--&gt;<br>&nbsp;   &lt;exception-type&gt;Exception&lt;/exception-type&gt;<br>&nbsp;   &lt;location&gt;/路径/&lt;/location&gt;<br><br>&nbsp; &lt;/error-page&gt;<br><br>&nbsp; &lt;jsp-config&gt;&lt;!--JSP的相关配置--&gt;<br>&nbsp;&nbsp;&nbsp; &lt;taglib&gt;&lt;!--JSP所用到的Tag Library--&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;taglib-uri&gt;URI&lt;/taglib-uri&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;taglib-location&gt;/WEB-INF/lib/xxx.tld&lt;/taglib-location&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/taglib&gt;<br>&nbsp;&nbsp;&nbsp; &lt;jsp-property-group&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;description&gt;此设定的说明&lt;/description&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;display-name&gt;Name&lt;/display-name&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;URL&lt;/url-pattern&gt;&lt;!--此设定影响的范围--&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;el-ignored&gt;true|false&lt;/el-ignored&gt;&lt;!--true表示不支持EL语法--&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;scripting-invalid&gt;encoding&lt;/scripting-invalid&gt;&lt;!--jsp的编码--&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;include-coda&gt;...jspf&lt;/include-coda&gt;&lt;!--JSP的结尾,扩展名.jspf--&gt;<br>&nbsp;&nbsp;&nbsp; &lt;/jsp-property-group&gt;<br>&nbsp; &lt;/jsp-config&gt;<br>&nbsp; &lt;resource-ref&gt;&lt;!--利用JNDI取得站点可利用的资源--&gt;<br>&nbsp;&nbsp;&nbsp; &lt;description&gt;资源说明&lt;/description&gt;<br>&nbsp;&nbsp;&nbsp; &lt;res-ref-name&gt;资源名称&lt;/res-ref-name&gt;<br>&nbsp;&nbsp;&nbsp; &lt;res-type&gt;资源种类&lt;/res-type&gt;<br>&nbsp;&nbsp;&nbsp; &lt;res-auth&gt;Application|Container&lt;/res-auth&gt;&lt;!--资源经由什么许可--&gt;<br>&nbsp;&nbsp;&nbsp; &lt;res-sharing-scope&gt;Shareable|Unshareable&lt;/res-sharing-scope&gt;&lt;!--资源是否可以共享,默认为Shareable--&gt;<br>&nbsp; &lt;/resource-ref&gt;<br>&lt;/web-app&gt;</pre>
<img src ="http://www.blogjava.net/simie/aggbug/127501.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/simie/" target="_blank">和田雨</a> 2007-07-02 12:22 <a href="http://www.blogjava.net/simie/archive/2007/07/02/127501.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>