??xml version="1.0" encoding="utf-8" standalone="yes"?>日本亚洲视频,国产精品三级久久久久三级,超碰97久久国产精品牛牛http://www.aygfsteel.com/simie/category/23716.htmlzh-cnTue, 31 Jul 2007 15:07:51 GMTTue, 31 Jul 2007 15:07:51 GMT60Tomcat 5.5.x 配置集锦(x表示4,5,.6,7) http://www.aygfsteel.com/simie/archive/2007/07/31/133660.html和田?/dc:creator>和田?/author>Tue, 31 Jul 2007 14:00:00 GMThttp://www.aygfsteel.com/simie/archive/2007/07/31/133660.htmlhttp://www.aygfsteel.com/simie/comments/133660.htmlhttp://www.aygfsteel.com/simie/archive/2007/07/31/133660.html#Feedback0http://www.aygfsteel.com/simie/comments/commentRss/133660.htmlhttp://www.aygfsteel.com/simie/services/trackbacks/133660.html阅读全文

]]>
从原理上解决Tomcat中文问题http://www.aygfsteel.com/simie/archive/2007/07/21/131625.html和田?/dc:creator>和田?/author>Sat, 21 Jul 2007 05:50:00 GMThttp://www.aygfsteel.com/simie/archive/2007/07/21/131625.htmlhttp://www.aygfsteel.com/simie/comments/131625.htmlhttp://www.aygfsteel.com/simie/archive/2007/07/21/131625.html#Feedback0http://www.aygfsteel.com/simie/comments/commentRss/131625.htmlhttp://www.aygfsteel.com/simie/services/trackbacks/131625.html阅读全文

]]>
Tomcat?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/simie/archive/2007/07/21/131622.html</guid><wfw:comment>http://www.aygfsteel.com/simie/comments/131622.html</wfw:comment><comments>http://www.aygfsteel.com/simie/archive/2007/07/21/131622.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/simie/comments/commentRss/131622.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/simie/services/trackbacks/131622.html</trackback:ping><description><![CDATA[<p>作者:杨晓(<a ><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发布之后Q推Z各式各样的JSP引擎。Apache Group在完成GNUJSP1.0的开发以后,开始考虑在SUN的JSWDK基础上开发一个可以直接提供Web服务的JSP服务器,当然同时也支持Servlet, q样Tomcatp生了<span>?/span></span><span XML:LANG="EN-US">Tomcat是jakarta目中的一个重要的子项目,其被JavaWorld杂志的编辑选ؓ2001q度最具创新的java产品Q同时它又是sun公司官方推荐的servlet和jsp容器Q因此其来</span><span>多的受到Y件公司和开发h员的喜爱?span XML:LANG="EN-US">servlet和jsp的最新规范都可以在tomcat的新版本中得到实现。其ơ,</span></span><span XML:LANG="EN-US">Tomcat是完全免费的软gQQ何h都可以从互联|上自由C载。Tomcat与Apache的组合相当完?/span></p> <p><span XML:LANG="EN-US"><font face="Times New Roman"> </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 TomcatQ?/span><span>存放启动和关?span XML:LANG="EN-US">tomcat脚本</span></span><span>Q?/span></p> <p><span XML:LANG="EN-US">|---conf TomcatQ存?/span><span>不同的配|文Ӟ<span XML:LANG="EN-US">server.xml和web.xmlQ;</span></span><span XML:LANG="EN-US"><br>|---docQ存放Tomcat文档Q?br>|---lib</span><span XML:LANG="EN-US">/japser/common</span><span>Q存?span XML:LANG="EN-US">Tomcatq行需要的库文ӞJARSQ;<br>|---logsQ存放Tomcat执行时的LOG文gQ?br>|---srcQ存放Tomcat的源代码Q?br>|---webappsQTomcat的主要Web发布目录Q包?/span></span><span>应用E序CZ</span><span>Q;<span XML:LANG="EN-US"><br>|---workQ?/span></span><span>存放<span XML:LANG="EN-US">jsp~译后生的class文g</span></span><span>Q?span XML:LANG="EN-US"><br><br><br><br></span></span></p> <p><strong><span>三?span XML:LANG="EN-US">Tomcatcd?/span></span></strong></p> <p><span XML:LANG="EN-US"><span>   </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>&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>应用E序可见</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>加蝲cd资源的顺序ؓQ?/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">Q?/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'">下面讲述q个文g中的基本配置信息Q更具体的配|信息请参?/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">  <span style="COLOR: blue">  <strong>server:</strong></span><br>          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'">指定一个端口,q个端口<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">          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'">指定向端口发送的命o字符?/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">    <strong>service:</strong></span><br>          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>  <strong><span style="COLOR: blue">  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'">Q?/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">          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'">指定服务器端要创建的端口Pq在q个断口监听来自客户端的h</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>          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'">服务器启动时创徏的处理请求的U程?/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>          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'">最大可以创建的处理h的线E数</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>          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'">Q则可以通过调用</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'">q行</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'">询来得到q程客户端的实际L名,若ؓ</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'">则不q行</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'">查询Q而是q回?/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>          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'">h时收C一?/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'">传输h后重定向?/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>          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'">指定当所有可以用的处理h的线E数都被使用Ӟ可以攑ֈ处理</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'">队列中的h敎ͼ过q个数的h不予处?/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>          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'">以毫Uؓ单位</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">    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'">中的h处理机,接收和处理来?/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'">Q?/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">          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'">指定~省的处理请求的L名,它至与其中的一?/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'">属性值是一L</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></p> <p>Context (表示一个web应用E序)Q?br>          1、docBase 应用E序的\径或者是WAR文g存放的\?br>          2、path 表示此web应用E序的url的前~Q这栯求的url?br><a href="http://localhost:8080/path/"><u><font color=#111133>http://localhost:8080/path/</font></u></a>****<br>          3、reloadable q个属性非帔R要,如果为trueQ则tomcat会自动检应用程序的<br>/WEB-INF/lib ?WEB-INF/classes目录的变化,自动装蝲新的应用E序Q我们可<br>以在不重起tomcat的情况下改变应用E序<br>    host (表示一个虚拟主?Q?br>          1、name 指定L?br>          2、appBase 应用E序基本目录Q即存放应用E序的目?br>          3、unpackWARs 如果为trueQ则tomcat会自动将WAR文g解压Q否则不解压Q直?br>从WAR文g中运行应用程?br>    Logger (表示日志Q调试和错误信息)Q?br>          1、className 指定logger使用的类名,此类必须实现org.apache.catalina.Logger 接口<br>          2、prefix 指定log文g的前~<br>          3、suffix 指定log文g的后~<br>          4、timestamp 如果为trueQ则log文g名中要加入时_如下<br>?localhost_log.2001-10-04.txt<br>   Realm (表示存放用户名,密码及role的数据库)Q?br>          1、className 指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口<br>   Valve (功能与Logger差不多,其prefix和suffix属性解释和Logger 中的一?Q?br>          1、className 指定Valve使用的类名,如用org.apache.catalina.valves.AccessLogValve<br>cd以记录应用程序的讉K信息<br>    directoryQ指定log文g存放的位|)Q?br>    1、pattern 有两个|common方式记录q程L名或ip地址Q用户名Q日期,W一行请求的字符ԌHTTP响应代码Q发送的字节数。combined方式比common方式记录的值更?br><br><br><br></p> <p>五、web.xml配置介:<br>1、默?Ƣ迎)文g的设|?br>在tomcat4\conf\web.xml中,<welcome-file-list>与IIS中的默认文g意思相同?br><welcome-file-list><br><welcome-file>index.html</welcome-file><br><welcome-file>index.htm</welcome-file><br><welcome-file>index.jsp</welcome-file><br></welcome-file-list></p> <p>2、报错文件的讄<br><error-page><br><error-code>404</error-code><br><location>/notFileFound.jsp</location><br></error-page><br><error-page><br><exception-type>java.lang.NullPointerException</exception-type><br><location>/null.jsp</location><br></error-page><br>如果某文件资源没有找刎ͼ服务器要?04错误Q按上述配置则会调用\webapps\ROOT\notFileFound.jsp?br>如果执行的某个JSP文g产生NullPointException Q则会调用\webapps\ROOT\null.jsp<br> <br>3、会话超时的讄<br>讄session 的过期时_单位是分钟;<br><session-config><br><session-timeout>30</session-timeout><br></session-config></p> <p>4、过滤器的设|?br><filter><br><filter-name>FilterSource</filter-name><br><filter-class>project4. FilterSource </filter-class><br></filter><br><filter-mapping><br><filter-name>FilterSource</filter-name><br><url-pattern>/WwwServlet</url-pattern><br>(<url-pattern>/haha/*</url-pattern>)<br></filter-mapping><br> <br>qoQ?br>1) w䆾验证的过滤Authentication Filters<br>2) 日志和审核的qoLogging and Auditing Filters<br>3) 囄转化的过滤Image conversion Filters<br>4) 数据压羃的过滤Data compression Filters<br>5) 加密qoEncryption Filters<br>6) Tokenizing Filters<br>7) 资源讉K事g触发的过滤Filters that trigger resource access events XSL/T qoXSL/T filters<br>9) 内容cd的过滤Mime-type chain Filter 注意监听器的序Q如Q先安全qoQ然后资源,然后内容cd{,q个序可以自己定?/p> <p><br>六、管?br>    1、用户配|?br>      在进行具体Tomcat理之前Q先ltomcatd一个用P使这个用h权限来进行管理?br>      打开conf目录下的tomcat-users.xml文gQ在相应的位|添加下面一行:<br>    <user name="user" password="user" roles="standard,manager"/><br>    然后重vtomcatQ在览器中输入<a href="http://localhost:8080/manager/"><u><font color=#111133>http://localhost:8080/manager/</font></u></a>Q会弹出对话框,输入上面的用?br>名和密码卛_?/p> <div>    2、应用程序列?br>      在浏览器中输?a href="http://localhost:8080/manager/list"><u><font color=#111133>http://localhost:8080/manager/list</font></u></a>Q浏览器会昄如下的信息:<br>    OK - Listed applications for virtual host localhost<br>    /ex:running:1<br>    /examples:running:1<br>    /webdav:running:0<br>    /tomcat-docs:running:0<br>    /manager:running:0<br>    /:running:0<br>     上面昄的信息分别ؓQ应用程序的路径、当前状态、连接这个程序的session?/div> <div>   3、重新装载应用程?br>      在浏览器中输?<a href="http://localhost:8080/manager/reload?path=/examples"><u><font color=#111133>http://localhost:8080/manager/reload?path=/examples</font></u></a>Q浏览器昄如下Q?br>    OK - Reloaded application at context path /examples   <br>q表Cexample应用E序装蝲成功Q如果我们将server.xml的Context元素的reloadable属性设为trueQ则没必要利用这U方式重新装载应用程序,因ؓtomcat会自动装载?/div> <div>4、显Csession信息<br>    在浏览器中输?a href="http://localhost:8080/manager/sessions?path=/examples"><u><font color=#111133>http://localhost:8080/manager/sessions?path=/examples</font></u></a>Q浏览器昄如下Q?br>    OK - Session information for application at context path /examples Default maximum session inactive<br>interval 30 minutes</div> <div>5、启动和关闭应用E序<br>   在浏览器中输?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应用E序?/div> <div>关于作者:<br>杨晓Q计机士Q曾在NEC、Softbrain 担Qjava开发工作?br>博客Q?a ><u><font color=#111133>http://blog.sina.com.cn/u/1237288325</font></u></a></div> </font></span> <img src ="http://www.aygfsteel.com/simie/aggbug/131622.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/simie/" target="_blank">和田?/a> 2007-07-21 13:40 <a href="http://www.aygfsteel.com/simie/archive/2007/07/21/131622.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java Web Start入门基础教程http://www.aygfsteel.com/simie/archive/2007/07/06/128526.html和田?/dc:creator>和田?/author>Fri, 06 Jul 2007 03:34:00 GMThttp://www.aygfsteel.com/simie/archive/2007/07/06/128526.htmlhttp://www.aygfsteel.com/simie/comments/128526.htmlhttp://www.aygfsteel.com/simie/archive/2007/07/06/128526.html#Feedback0http://www.aygfsteel.com/simie/comments/commentRss/128526.htmlhttp://www.aygfsteel.com/simie/services/trackbacks/128526.html阅读全文

]]>
Sysdeo/SQLI Eclipse Tomcat Launcher pluginhttp://www.aygfsteel.com/simie/archive/2007/07/05/128390.html和田?/dc:creator>和田?/author>Thu, 05 Jul 2007 08:28:00 GMThttp://www.aygfsteel.com/simie/archive/2007/07/05/128390.htmlhttp://www.aygfsteel.com/simie/comments/128390.htmlhttp://www.aygfsteel.com/simie/archive/2007/07/05/128390.html#Feedback0http://www.aygfsteel.com/simie/comments/commentRss/128390.htmlhttp://www.aygfsteel.com/simie/services/trackbacks/128390.htmlSysdeo/SQLI Eclipse Tomcat Launcher plugin

在Eclipse斚w使用Q_mcat的插?/strong>

 

 

Plugin features

  • Starting and stopping Tomcat 4.x, 5.x and 6.x

  • Registering Tomcat process to Eclipse debugger

  • Creating a WAR project (wizard can update server.xml file)

  • Adding Java Projects to Tomcat classpath

  • Setting Tomcat JVM parameters, classpath and bootclasspath

  • Exporting a Tomcat project to a WAR File

  • 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 readmeDevLoader.html (Thanks Martin Kahr)

 

Support and contributions

Contact plugintomcat@sysdeo.fr

 

Download

This plugin is free and open-source

Version File Date Comment

3.2.1

10 May 2007

Works with Eclipse 3.1, 3.2 and 3.3M7
Fix a problem with HTTPS

3.2

13 April 2007

Works with Eclipse 3.1, 3.2 and 3.3M6
Tomcat 6 support added

3.2 beta3

20 November 2006

Works with Eclipse 3.2 and Eclipse 3.1
Tomcat 6 support added

3.2 beta2

25 October 2006

Works with Eclipse 3.2 and Eclipse 3.1
Tomcat 6 support added

3.1

15 September 2005

Works with Eclipse 3.0 and Eclipse 3.1 (fix a problem with Eclipse 3.1M6)

3.0

27 July 2004

Works with Eclipse 3.0 and Eclipse 2.1

2.2.1

1er August 2003

Works with Eclipse 2.1 and Eclipse 3.0 M2


Tomcat 4.x patch for JSP debugging (Thanks to Johan Compagner)

Tomcat Version File Date

4.1.24

1 April 2003

To install this patch, unzip the file in <%TOMCAT_HOME%>/classes for tomcat 4.0x, or in <%TOMCAT_HOME%>/common/classes for Tomcat 4.1.x

 

Installation

  • This plugin does not contain Tomcat.
    (Download and install Tomcat before using this plugin).
    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.

  • Download tomcatPluginVxxx.zip

  • Unzip it in your_Eclipse_Home/plugins

  • Plugin activation for Eclipse 3.x :
    - launch eclipse once using this option : -clean
    - if Tomcat icons are not shown in toolbar : select menu 'Window>Customize Perspective...>Commands', and check 'Tomcat' in 'Available command groups'

  • Set Tomcat version and Tomcat home : Workbench -> 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).

  • This plugin launches Tomcat using the default JRE checked in Eclipe preferences window.
    To set a JDK as default JRE for Eclipse open the preference window : Window -> Preferences -> Java -> Installed JREs.
    This JRE must be a JDK (This is a Tomcat prerequisite).

  • The plugin sets itself Tomcat classpath and bootclasspath. Use Preferences -> Tomcat ->JVM Settings, only if you need specific settings.

 

Documentation and tutorials

Official documation (french) : http://www.eclipsetotale.com/articles/tomcat/tomcatPluginDocFR.html

Tutorials (english) :

 

Troubleshooting

  • 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.

  • ClassNotFound when using DevLoader and launching Tomcat 5.5.12 and above
    Workaround : set context definition mode (Preferences->Tomcat) to 'Context files'.
    Explanations :
    This problem is due to a change in Tomcat 5.5.12 and above (see http://issues.apache.org/bugzilla/show_bug.cgi?id=37302 ,
    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)

  • ClassNotFoundException on javac/Main when accessing JSP : Tomcat is started with a JRE instead of a JDK.

  • If you have a problem with the plugin check eclipse log file (<%Your_Workspace_dir%>/.metadata/.log)

 

If you have any problem with this plugin send an email to plugintomcat@sysdeo.fr .
(Select this button : Preferences->Tomcat->JVM Settings->Dump configuration to .log file, and include in your email the corresponding lines of your .log file, it is in <%Your_Workspace_dir%>/.metadata)



]]>
[TOMCAT]用web.xml控制Web应用的行?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/simie/archive/2007/07/02/127520.html</guid><wfw:comment>http://www.aygfsteel.com/simie/comments/127520.html</wfw:comment><comments>http://www.aygfsteel.com/simie/archive/2007/07/02/127520.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/simie/comments/commentRss/127520.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/simie/services/trackbacks/127520.html</trackback:ping><description><![CDATA[1 定义头和根元?br><br>部v描述W文件就像所有XML文g一P必须以一个XML头开始。这个头声明可以使用的XML版本q给出文件的字符~码?br>DOCYTPE声明必须立即出现在此头之后。这个声明告诉服务器适用的servlet规范的版本(?.2?.3Qƈ指定理此文件其余部分内容的语法的DTD(Document Type DefinitionQ文档类型定??br>所有部|描q符文g的顶层(根)元素为web-app。请注意QXML元素不像HTMLQ他们是大小写敏感的。因此,web-App和WEB-APP都是不合法的Qweb-app必须用小写?br><br>1 定义头和根元?br><br>XML 元素不仅是大写敏感的,而且它们q对出现在其他元素中的次序敏感。例如,XML头必L文g中的W一,DOCTYPE声明必须是第二项Q而web- app元素必须是第三项。在web-app元素内,元素的次序也很重要。服务器不一定强制要求这U次序,但它们允许(实际上有些服务器是q样做的Q完?nbsp;拒绝执行含有ơ序不正的元素的Web应用。这表示使用非标准元素次序的web.xml文g是不可移植的?br>下面的列表给Z所有可直接出现在web-app元素内的合法元素所必需的次序。例如,此列表说明servlet元素必须出现在所有servlet-mapping元素之前。请注意Q所有这些元素都是可选的。因此,可以省略掉某一元素Q但不能把它放于不正的位置?br>l icon icon元素指出IDE和GUI工具用来表示Web应用的一个和两个囑փ文g的位|?br>l display-name display-name元素提供GUI工具可能会用来标记这个特定的Web应用的一个名U?br>l description description元素l出与此有关的说明性文本?br>l context-param context-param元素声明应用范围内的初始化参数?br>l filter qo器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联?br>l filter-mapping 一旦命名了一个过滤器Q就要利用filter-mapping元素把它与一个或多个servlet或JSP面相关联?br>l listener servlet API的版?.3增加了对事g监听E序的支持,事g监听E序在徏立、修改和删除会话或servlet环境时得到通知。Listener元素指出事g监听E序cR?br>l servlet 在向servlet或JSP面制定初始化参数或定制URLӞ必须首先命名servlet或JSP面。Servlet元素是用来完成此项d的?br>l servlet-mapping 服务器一般ؓservlet提供一个缺省的URLQ?a href="http://host/webAppPrefix/servlet/ServletName"><u><font color=#0000ff>http://host/webAppPrefix/servlet/ServletName</font></u></a>。但是,常常会更改这个URLQ以便servlet可以讉K初始化参数或更容易地处理相对URL。在更改~省URLӞ使用servlet-mapping元素?br>l session-config 如果某个会话在一定时间内未被讉KQ服务器可以抛弃它以节省内存。可通过使用HttpSession的setMaxInactiveIntervalҎ 明确讄单个会话对象的超时|或者可利用session-config元素制定~省时倹{?br>l mime-mapping 如果Web应用h惛_Ҏ的文Ӟ希望能保证给他们分配特定的MIMEcdQ则mime-mapping元素提供q种保证?br>l welcom-file-list welcome-file-list元素指示服务器在收到引用一个目录名而不是文件名的URLӞ使用哪个文g?br>l error-page error-page元素使得在返回特定HTTP状态代码时Q或者特定类型的异常被抛出时Q能够制定将要显C的面?br>l taglib taglib元素Ҏ记库描述W文ӞTag Libraryu Descriptor fileQ指定别名。此功能使你能够更改TLD文g的位|,而不用编辑用这些文件的JSP面?br>l resource-env-ref resource-env-ref元素声明与资源相关的一个管理对象?br>l resource-ref resource-ref元素声明一个资源工厂用的外部资源?br>l security-constraint security-constraint元素制定应该保护的URL。它与login-config元素联合使用<br>l login-config 用login-config元素来指定服务器应该怎样l试图访问受保护面的用h权。它与sercurity-constraint元素联合使用?br>l security-role security-role元素l出安全角色的一个列表,q些角色出现在servlet元素内的security-role-ref元素的role-name子元素中。分别地声明角色可高IDE处理安全信息更ؓҎ?br>l env-entry env-entry元素声明Web应用的环境项?br>l ejb-ref ejb-ref元素声明一个EJB的主目录的引用?br>l ejb-local-ref ejb-local-ref元素声明一个EJB的本C目录的应用?br><br>3 分配名称和定制的UL<br><br>在web.xml中完成的一个最常见的Q务是对servlet或JSP面l出名称和定制的URL。用servlet元素分配名称Q用servlet-mapping元素定制的URL与刚分配的名U相兌?br>3.1 分配名称<br>?nbsp;了提供初始化参数Q对servlet或JSP面定义一个定制URL或分配一个安全角Ԍ必须首先lservlet或JSP面一个名U。可通过 servlet元素分配一个名U。最常见的格式包括servlet-name和servlet-class子元素(在web-app元素内)Q如下所C:<br><servlet><br><servlet-name>Test</servlet-name><br><servlet-class>moreservlets.TestServlet</servlet-class><br></servlet> <br>q?nbsp;表示位于WEB-INF/classes/moreservlets/TestServlet的servlet已经得到了注册名Test。给 servlet一个名U具有两个主要的含义。首先,初始化参数、定制的URL模式以及其他定制通过此注册名而不是类名引用此servlet。其?可在 URL而不是类名中使用此名U。因此,利用刚才l出的定义,URL <a href="http://host/webAppPrefix/servlet/Test"><u><font color=#0000ff>http://host/webAppPrefix/servlet/Test</font></u></a> 可用?nbsp;<a href="http://host/webAppPrefix/servlet/moreservlets.TestServlet"><u><font color=#0000ff>http://host/webAppPrefix/servlet/moreservlets.TestServlet</font></u></a> 的场所?br>?nbsp;CQXML元素不仅是大写敏感的,而且定义它们的次序也很重要。例如,web-app元素内所有servlet元素必须位于所有servlet- mapping元素Q下一节介绍Q之前,而且q要位于5.6节和5.11节讨论的与过滤器或文档相关的元素Q如果有的话Q之前。类似地Qservlet 的servlet-name子元素也必须出现在servlet-class之前?.2?部v描述W文件内的元素次?详l介l这U必需的次序?br>?nbsp;如,E序清单5-1l出了一个名为TestServlet的简单servletQ它ȝ在moreservletsE序包中。因为此servlet是扎?nbsp;在一个名为deployDemo的目录中的Web应用的组成部分,所以TestServlet.class攑֜deployDemo/WEB- INF/classes/moreservlets中。程序清?-2l出放|在deployDemo/WEB-INF/内的web.xml文g的一?nbsp;分。此web.xml文g使用servlet-name和servlet-class元素名UTest与TestServlet.class相关联。图 5-1和图5-2分别昄利用~省URL和注册名调用TestServlet时的l果?br><br>E序清单5-1 TestServlet.java<br>package moreservlets;<br><br>import java.io.*;<br>import javax.servlet.*;<br>import javax.servlet.http.*;<br><br>/** Simple servlet used to illustrate servlet naming<br>* and custom URLs.<br>* <P><br>* Taken from More Servlets and JavaServer Pages<br>* from Prentice Hall and Sun Microsystems Press,<br>* <a ><u><font color=#0000ff>http://www.moreservlets.com/</font></u></a>.<br>* © 2002 Marty Hall; may be freely used or adapted.<br>*/<br><br>public class TestServlet extends HttpServlet {<br>public void doGet(HttpServletRequest request,<br>HttpServletResponse response)<br>throws ServletException, IOException {<br>response.setContentType("text/html");<br>PrintWriter out = response.getWriter();<br>String uri = request.getRequestURI();<br>out.println(ServletUtilities.headWithTitle("Test Servlet") +<br>"<BODY BGCOLOR=\"#FDF5E6\">\n" +<br>"<H2>URI: " + uri + "</H2>\n" +<br>"</BODY></HTML>");<br>}<br>}<br><br><br>E序清单5-2 web.xmlQ说明servlet名称的摘录)<br><?xml version="1.0" encoding="ISO-8859-1"?><br><!DOCTYPE web-app<br>PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br>"http://java.sun.com/dtd/web-app_2_3.dtd"><br><br><web-app><br><!-- … --><br><servlet><br><servlet-name>Test</servlet-name><br><servlet-class>moreservlets.TestServlet</servlet-class><br></servlet><br><!-- … --><br></web-app><br><br>3.2 定义定制的URL<br>大多数服务器h一个缺省的serlvet URLQ?br>http://host/webAppPrefix/servlet/packageName.ServletName?nbsp;虽然在开发中使用q个URL很方便,但是我们常常会希望另一个URL用于部v。例如,可能会需要一个出现在Web应用层的URLQ如Qhttp: //host/webAppPrefix/AnynameQ,q且在此URL中没有servletV位于顶层的URL化了相对URL的用。此外,?nbsp;许多开发h员来_层URL看上L更长更麻烦的~省URL更简短?br>事实上,有时需要用定制的URL。比如,你可能想关闭~省URL映射Q以便更好地强制实施安全限制或防止用h外地讉K无初始化参数的servlet。如果你止了缺省的URLQ那么你怎样讉Kservlet呢?q时只有使用定制的URL了?br>?nbsp;了分配一个定制的URLQ可使用servlet-mapping元素及其servlet-name和url-pattern子元素。Servlet- name元素提供了一个Q意名Uͼ可利用此名称引用相应的servletQurl-pattern描述了相对于Web应用的根目录的URL。url- pattern元素的值必M斜杠Q?Qv始?br>下面l出一个简单的web.xml摘录Q它允许使用URL http://host/webAppPrefix/UrlTest而不是http://host/webAppPrefix/servlet/Test?br>http: //host/webAppPrefix/servlet/moreservlets.TestServlet。请注意Q仍焉要XML头?nbsp;DOCTYPE声明以及web-app闭元素。此外,可回忆一下,XML元素出现地次序不是随意的。特别是Q需要把所有servlet元素攑֜所?nbsp;servlet-mapping元素之前?br><servlet><br><servlet-name>Test</servlet-name><br><servlet-class>moreservlets.TestServlet</servlet-class><br></servlet><br><!-- ... --><br><servlet-mapping><br><servlet-name>Test</servlet-name><br><url-pattern>/UrlTest</url-pattern><br></servlet-mapping><br>URL模式q可以包含通配W。例如,下面的小E序指示服务器发送所有以Web应用的URL前缀开始,?.aspl束的请求到名ؓBashMS的servlet?br><servlet><br><servlet-name>BashMS</servlet-name><br><servlet-class>msUtils.ASPTranslator</servlet-class><br></servlet><br><!-- ... --><br><servlet-mapping><br><servlet-name>BashMS</servlet-name><br><url-pattern>/*.asp</url-pattern><br></servlet-mapping><br>3.3 命名JSP面<br>?nbsp;为JSP面要{换成sevletQ自然希望就像命名servlet一样命名JSP面。毕竟,JSP面可能会从初始化参数、安全设|或定制的URL?nbsp;受益Q正如普通的serlvet那样。虽然JSP面的后台实际上是servletq句话是正确的,但存在一个关键的猜疑Q即Q你不知道JSP面的实?nbsp;cdQ因为系l自己挑选这个名字)。因此,Z命名JSP面Q可jsp-file元素替换为servlet-calss元素Q如下所C:<br><servlet><br><servlet-name>Test</servlet-name><br><jsp-file>/TestPage.jsp</jsp-file><br></servlet><br>?nbsp;名JSP面的原因与命名servlet的原因完全相同:即ؓ了提供一个与定制讄Q如Q初始化参数和安全设|)一起用的名称Qƈ且,以便能更Ҏz?nbsp;JSP面的URLQ比方说Q以便多个URL通过相同面得以处理Q或者从URL中去?jsp扩展名)。但是,在设|初始化参数Ӟ应该注意QJSP?nbsp;面是利用jspInitҎQ而不是initҎd初始化参数的?br>例如Q程序清?-3l出一个名为TestPage.jsp的简单JSP面Q它的工作只是打印出用来Ȁzd的URL的本地部分。TestPage.jsp攄在deployDemo应用的顶层。程序清?-4l出了用来分配一个注册名PageNameQ然后将此注册名与http://host/webAppPrefix/UrlTest2/anything 形式的URL相关联的web.xml文gQ即QdeployDemo/WEB-INF/web.xmlQ的一部分?br><br>E序清单5-3 TestPage.jsp<br><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><br><HTML><br><HEAD><br><TITLE><br>JSP Test Page<br></TITLE><br></HEAD><br><BODY BGCOLOR="#FDF5E6"><br><H2>URI: <%= request.getRequestURI() %></H2><br></BODY><br></HTML><br><br><br>E序清单5-4 web.xmlQ说明JSP命名的摘录Q?br><?xml version="1.0" encoding="ISO-8859-1"?><br><!DOCTYPE web-app<br>PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br>"http://java.sun.com/dtd/web-app_2_3.dtd"><br><br><web-app><br><!-- ... --><br><servlet><br><servlet-name>PageName</servlet-name><br><jsp-file>/TestPage.jsp</jsp-file><br></servlet><br><!-- ... --><br><servlet-mapping><br><servlet-name> PageName </servlet-name><br><url-pattern>/UrlTest2/*</url-pattern><br></servlet-mapping><br><!-- ... --><br></web-app><br><br><br>4 止Ȁzdservlet<br><br>对servlet 或JSP面建立定制URL的一个原因是Q这样做可以注册?nbsp;initQservletQ或jspInitQJSP面Q方法中d得初始化参数。但是,初始化参数只在是利用定制URL模式或注册名讉K servlet或JSP面时可以用,用缺省URL http://host/webAppPrefix/servlet/ServletName 讉K时不能用。因此,你可能会希望关闭~省URLQ这样就不会有h意外地调用初始化servlet了。这个过E有时称为禁止激zdservletQ因?nbsp;多数服务器具有一个用~省的servlet URL注册的标准servletQƈȀzȝ省的URL应用的实际servlet?br>有两U禁止此~省URL的主要方法:<br>l 在每个Web应用中重新映?servlet/模式?br>l 全局关闭Ȁzdservlet?br>?nbsp;要的是应该注意到Q虽焉新映每个Web应用中的/servlet/模式比彻底禁止激zservlet所做的工作更多Q但重新映射可以用一U完全可UL 的方式来完成。相反,全局止Ȁzdservlet完全是针对具体机器的Q事实上有的服务器(如ServletExecQ没有这L选择。下面的讨论Ҏ 个Web应用重新映射/servlet/ URL模式的策略。后面提供在Tomcat中全局止Ȁzdservlet的详l内宏V?br>4.1 重新映射/servlet/URL模式<br>在一个特定的Web应用中禁止以http://host/webAppPrefix/servlet/ 开始的URL的处理非常简单。所需做的事情是建立一个错误消息servletQƈ使用前一节讨论的url-pattern元素所有匹配请求{向该 servlet。只要简单地使用Q?br><url-pattern>/servlet/*</url-pattern><br>作ؓservlet-mapping元素中的模式卛_?br>例如Q程序清?-5l出了将SorryServlet servletQ程序清?-6Q与所有以http://host/webAppPrefix/servlet/ 开头的URL相关联的部v描述W文件的一部分?br><br>E序清单5-5 web.xmlQ说明JSP命名的摘录Q?br><?xml version="1.0" encoding="ISO-8859-1"?><br><!DOCTYPE web-app<br>PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br>"http://java.sun.com/dtd/web-app_2_3.dtd"><br><br><web-app><br><!-- ... --><br><servlet><br><servlet-name>Sorry</servlet-name><br><servlet-class>moreservlets.SorryServlet</servlet-class><br></servlet><br><!-- ... --><br><servlet-mapping><br><servlet-name> Sorry </servlet-name><br><url-pattern>/servlet/*</url-pattern><br></servlet-mapping><br><!-- ... --><br></web-app><br><br><br>E序清单5-6 SorryServlet.java<br>package moreservlets;<br><br>import java.io.*;<br>import javax.servlet.*;<br>import javax.servlet.http.*;<br><br>/** Simple servlet used to give error messages to<br>* users who try to access default servlet URLs<br>* (i.e., http://host/webAppPrefix/servlet/ServletName)<br>* in Web applications that have disabled this<br>* behavior.<br>* <P><br>* Taken from More Servlets and JavaServer Pages<br>* from Prentice Hall and Sun Microsystems Press,<br>* http://www.moreservlets.com/.<br>* © 2002 Marty Hall; may be freely used or adapted.<br>*/<br><br>public class SorryServlet extends HttpServlet {<br>public void doGet(HttpServletRequest request,<br>HttpServletResponse response)<br>throws ServletException, IOException {<br>response.setContentType("text/html");<br>PrintWriter out = response.getWriter();<br>String title = "Invoker Servlet Disabled.";<br>out.println(ServletUtilities.headWithTitle(title) +<br>"<BODY BGCOLOR=\"#FDF5E6\">\n" +<br>"<H2>" + title + "</H2>\n" +<br>"Sorry, access to servlets by means of\n" +<br>"URLs that begin with\n" +<br>"http://host/webAppPrefix/servlet/\n" +<br>"has been disabled.\n" + <br>"</BODY></HTML>");<br>}<br><br>public void doPost(HttpServletRequest request,<br>HttpServletResponse response)<br>throws ServletException, IOException {<br>doGet(request, response);<br>}<br>}<br><br><br>4.2 全局止ȀzdQTomcat<br>Tomcat 4中用来关闭缺省URL的方法与Tomcat 3中所用的很不相同。下面介l这两种ҎQ?br>1Q禁止激zdQ?nbsp;Tomcat 4<br>Tomcat 4用与前面相同的方法关闭激zdservletQ即利用web.xml中的url-mapping元素q行关闭。不同之处在于Tomcat使用了放?nbsp;install_dir/conf中的一个服务器专用的全局web.xml文gQ而前面用的是存攑֜每个Web应用的WEB-INF目录中的标准 web.xml文g?br>因此Qؓ了在Tomcat 4中关闭激zdservletQ只需在install_dir/conf/web.xml中简单地注释?servlet/* URL映射即可,如下所C:<br><!-- <br><servlet-mapping><br><servlet-name>invoker</servlet-name><br><url-pattern>/servlet/*</url-pattern><br></servlet-mapping><br>--><br>再次提醒Q应该注意这个项是位于存攑֜install_dir/conf的Tomcat专用的web.xml文g中的Q此文g不是存放在每个Web应用的WEB-INF目录中的标准web.xml?br>2Q禁止激zdQTomcat3<br>在Apache Tomcat的版?中,通过在install_dir/conf/server.xml中注释出InvokerInterceptor全局止~省 servlet URL。例如,下面是禁止用缺省servlet URL的server.xml文g的一部分?br><!-- <br><RequsetInterceptor <br>className="org.apache.tomcat.request.InvokerInterceptor"<br>debug="0" prefix="/servlet/" /><br>--><br><br>5 初始化和预装载servlet与JSP面<br><br>q里讨论控制servlet和JSP面的启动行为的Ҏ。特别是Q说明了怎样分配初始化参C及怎样更改服务器生存期中装载servlet和JSP面的时刅R?br>5.1 分配servlet初始化参?br>?nbsp;用init-param元素向servlet提供初始化参敎ͼinit-param元素hparam-name和param-value子元素。例如, 在下面的例子中,如果initServlet servlet是利用它的注册名QInitTestQ访问的Q它能够从其方法中调用getServletConfig(). getInitParameter("param1")获得"Value 1"Q调用getServletConfig().getInitParameter("param2")获得"2"?br><servlet><br><servlet-name>InitTest</servlet-name><br><servlet-class>moreservlets.InitServlet</servlet-class><br><init-param><br><param-name>param1</param-name><br><param-value>value1</param-value><br></init-param><br><init-param><br><param-name>param2</param-name><br><param-value>2</param-value><br></init-param><br></servlet><br>在涉及初始化参数Ӟ有几炚w要注意:<br>l q回倹{GetInitParameter的返回值L一个String。因此,在前一个例子中Q可对param2使用Integer.parseInt获得一个int?br>l JSP中的初始化。JSP面使用jspInit而不是init。JSP面q需要用jsp-file元素代替servlet-class?br>l ~省URL。初始化参数只在通过它们的注册名或与它们注册名相关的定制URL模式讉KServlet时可以用。因此,在这个例子中Qparam1?nbsp;param2初始化参数将能够在用URL http://host/webAppPrefix/servlet/InitTest 时可用,但在使用URL http://host/webAppPrefix/servlet/myPackage.InitServlet 时不能用?br>例如Q程序清?-7l出一个名为InitServlet的简单servletQ它使用initҎ讄firstName和emailAddress字段。程序清?-8l出分配名称InitTestlservlet的web.xml文g?br>E序清单5-7 InitServlet.java<br>package moreservlets;<br><br>import java.io.*;<br>import javax.servlet.*;<br>import javax.servlet.http.*;<br><br>/** Simple servlet used to illustrate servlet<br>* initialization parameters.<br>* <P><br>* Taken from More Servlets and JavaServer Pages<br>* from Prentice Hall and Sun Microsystems Press,<br>* http://www.moreservlets.com/.<br>* © 2002 Marty Hall; may be freely used or adapted.<br>*/<br><br>public class InitServlet extends HttpServlet {<br>private String firstName, emailAddress;<br><br>public void init() {<br>ServletConfig config = getServletConfig();<br>firstName = config.getInitParameter("firstName");<br>emailAddress = config.getInitParameter("emailAddress");<br>}<br><br>public void doGet(HttpServletRequest request,<br>HttpServletResponse response)<br>throws ServletException, IOException {<br>response.setContentType("text/html");<br>PrintWriter out = response.getWriter();<br>String uri = request.getRequestURI();<br>out.println(ServletUtilities.headWithTitle("Init Servlet") +<br>"<BODY BGCOLOR=\"#FDF5E6\">\n" +<br>"<H2>Init Parameters:</H2>\n" +<br>"<UL>\n" +<br>"<LI>First name: " + firstName + "\n" +<br>"<LI>Email address: " + emailAddress + "\n" +<br>"</UL>\n" + <br>"</BODY></HTML>");<br>}<br>}<br><br><br>E序清单5-8 web.xmlQ说明初始化参数的摘录)<br><?xml version="1.0" encoding="ISO-8859-1"?><br><!DOCTYPE web-app<br>PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br>"http://java.sun.com/dtd/web-app_2_3.dtd"><br><br><web-app><br><!-- ... --><br><servlet><br><servlet-name>InitTest</servlet-name><br><servlet-class>moreservlets.InitServlet</servlet-class><br><init-param><br><param-name>firstName</param-name><br><param-value>Larry</param-value><br></init-param><br><init-param><br><param-name>emailAddress</param-name><br><param-value>Ellison@Microsoft.com</param-value><br></init-param><br></servlet><br><!-- ... --><br></web-app><br><br>5.2 分配JSP初始化参?br>lJSP面提供初始化参数在三个斚w不同于给servlet提供初始化参数?br>1Q用jsp-file而不是servlet-class。因此,WEB-INF/web.xml文g的servlet元素如下所C:<br><servlet><br><servlet-name>PageName</servlet-name><br><jsp-file>/RealPage.jsp</jsp-file><br><init-param><br><param-name>...</param-name><br><param-value>...</param-value><br></init-param><br>...<br></servlet><br>2) 几乎L分配一个明的URL模式。对servletQ一般相应地使用以http://host/webAppPrefix/servlet/ 开始的~省URL。只需CQ用注册名而不是原名称卛_。这对于JSP面在技术上也是合法的。例如,在上面给出的例子中,可用URL http://host/webAppPrefix/servlet/PageName 讉KRealPage.jsp的对初始化参数具有访问权的版本。但在用于JSP面Ӟ许多用户g不喜Ƣ应用常规的servlet的URL。此外,如果 JSP面位于服务器ؓ其提供了目录清单的目录中Q如Q一个既没有index.html也没有index.jsp文g的目录)Q则用户可能会连接到?nbsp;JSP面Q单dQ从而意外地ȀzL初始化的面。因此,好的办法是用url-patternQ?.3节)JSP面的原URL与注册的 servlet名相兌。这P客户机可使用JSP面的普通名Uͼ但仍然激zd制的版本。例如,l定来自目1的servlet定义Q可使用下面?nbsp;servlet-mapping定义Q?br><servlet-mapping><br><servlet-name>PageName</servlet-name><br><url-pattern>/RealPage.jsp</url-pattern><br></servlet-mapping><br>3QJSP用jspInit而不是init。自动从JSP面建立的servlet或许已经使用了intiҎ。因此,使用JSP声明提供一个initҎ是不合法的,必须制定jspInitҎ?br>Z说明初始化JSP面的过E,E序清单5-9l出了一个名为InitPage.jsp的JSP面Q它包含一个jspInitҎ且放|于 deployDemo Web应用层次l构的顶层。一般,http://host/deployDemo/InitPage.jsp 形式的URL激zL面的不h初始化参数访问权的版本,从而将对firstName和emailAddress变量昄null。但是, web.xml文gQ程序清?-10Q分配了一个注册名Q然后将该注册名与URL模式/InitPage.jsp相关联?br><br>E序清单5-9 InitPage.jsp<br><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><br><HTML><br><HEAD><TITLE>JSP Init Test</TITLE></HEAD><br><BODY BGCOLOR="#FDF5E6"><br><H2>Init Parameters:</H2><br><UL><br><LI>First name: <%= firstName %><br><LI>Email address: <%= emailAddress %><br></UL><br></BODY></HTML><br><%!<br>private String firstName, emailAddress;<br><br>public void jspInit() {<br>ServletConfig config = getServletConfig();<br>firstName = config.getInitParameter("firstName");<br>emailAddress = config.getInitParameter("emailAddress");<br>}<br>%><br><br><br>E序清单5-10 web.xmlQ说明JSP面的init参数的摘录)<br><?xml version="1.0" encoding="ISO-8859-1"?><br><!DOCTYPE web-app<br>PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br>"http://java.sun.com/dtd/web-app_2_3.dtd"><br><br><web-app><br><!-- ... --><br><servlet><br><servlet-name>InitPage</servlet-name><br><jsp-file>/InitPage.jsp</jsp-file><br><init-param><br><param-name>firstName</param-name><br><param-value>Bill</param-value><br></init-param><br><init-param><br><param-name>emailAddress</param-name><br><param-value>gates@oracle.com</param-value><br></init-param><br></servlet><br><!-- ... --> <br><servlet-mapping><br><servlet-name> InitPage</servlet-name><br><url-pattern>/InitPage.jsp</url-pattern><br></servlet-mapping><br><!-- ... --><br></web-app><br><br><br>5.3 提供应用范围内的初始化参?br>一 般,对单个地servlet或JSP面分配初始化参数。指定的servlet或JSP面利用ServletConfig?nbsp;getInitParameterҎdq些参数。但是,在某些情形下Q希望提供可׃Q意servlet或JSP面借助ServletContext 的getInitParameterҎd的系l范围内的初始化参数?br>可利用context-param元素声明q些pȝ范围内的初始化倹{context-param元素应该包含param-name、param-value以及可选的description子元素,如下所C:<br><context-param><br><param-name>support-email</param-name><br><param-value>blackhole@mycompany.com</param-value><br></context-param><br>?nbsp;回忆一下,Z保证可移植性,web.xml内的元素必须以正的ơ序声明。但q里应该注意Qcontext-param元素必须出现L与文档有关的?nbsp;素(icon、display-name或descriptionQ之后及filter、filter-mapping、listener?nbsp;servlet元素之前?br>5.4 在服务器启动时装载servlet<br>假如servlet或JSP面有一个要花很长时间执行的init QservletQ或jspInitQJSPQ方法。例如,假如init或jspInitҎ从某个数据库或ResourceBundle查找产量。这U?nbsp;情况下,在第一个客hh时装载servlet的缺省行为将对第一个客h产生较长旉的gq。因此,可利用servlet的load-on- startup元素规定服务器在W一ơ启动时装蝲servlet。下面是一个例子?br><servlet><br><servlet-name> … </servlet-name><br><servlet-class> … </servlet-class> <!-- Or jsp-file --><br><load-on-startup/><br></servlet><br>?nbsp;以ؓ此元素体提供一个整数而不是用一个空的load-on-startup。想法是服务器应该在装蝲较大数目的servlet或JSP面之前装蝲较少 数目的servlet或JSP面。例如,下面的servlet(攄在Web应用的WEB-INF目录下的web.xml文g中的web-app元素 内)指C服务器首先装蝲和初始化SearchServletQ然后装载和初始化由位于Web应用的result目录中的index.jsp文g产生?nbsp;servlet?br><servlet><br><servlet-name>Search</servlet-name><br><servlet-class>myPackage.SearchServlet</servlet-class> <!-- Or jsp-file --><br><load-on-startup>1</load-on-startup><br></servlet><br><servlet><br><servlet-name>Results</servlet-name><br><servlet-class>/results/index.jsp</servlet-class> <!-- Or jsp-file --><br><load-on-startup>2</load-on-startup><br></servlet><br><br>6 声明qo?br><br>servlet版本2.3引入了过滤器的概c虽然所有支持servlet API版本2.3的服务器都支持过滤器Q但Z使用与过滤器有关的元素,必须在web.xml中用版?.3的DTD?br>q?nbsp;滤器可截取和修改q入一个servlet或JSP面的请求或从一个servlet或JSP面发出的相应。在执行一个servlet或JSP面之前Q?nbsp;必须执行W一个相关的qo器的doFilterҎ。在该过滤器对其FilterChain对象调用doFilterӞ执行链中的下一个过滤器。如果没 有其他过滤器Qservlet或JSP面被执行。过滤器h对到来的ServletRequest对象的全部访问权Q因此,它们可以查看客户机名、查?nbsp;到来的cookie{。ؓ了访问servlet或JSP面的输出,qo器可响应对象包裹在一个替w对象(stand-in objectQ中Q比方说把输出篏加到一个缓冲区。在调用FilterChain对象的doFilterҎ之后Q过滤器可检查缓冲区Q如有必要,对?nbsp;q行修改Q然后传送到客户机?br>例如Q程序清?-11帝国难以了一个简单的qo器,只要讉K相关的servlet或JSP面Q它截取请求ƈ在标准输Z打印一个报告(开发过E中在桌面系l上q行Ӟ大多数服务器都可以用这个过滤器Q?br><br>E序清单5-11 ReportFilter.java<br>package moreservlets;<br><br>import java.io.*;<br>import javax.servlet.*;<br>import javax.servlet.http.*;<br>import java.util.*;<br><br>/** Simple filter that prints a report on the standard output <br>* whenever the associated servlet or JSP page is accessed.<br>* <P><br>* Taken from More Servlets and JavaServer Pages<br>* from Prentice Hall and Sun Microsystems Press,<br>* http://www.moreservlets.com/.<br>* © 2002 Marty Hall; may be freely used or adapted.<br>*/<br><br>public class ReportFilter implements Filter {<br>public void doFilter(ServletRequest request,<br>ServletResponse response,<br>FilterChain chain)<br>throws ServletException, IOException {<br>HttpServletRequest req = (HttpServletRequest)request;<br>System.out.println(req.getRemoteHost() +<br>" tried to access " +<br>req.getRequestURL() +<br>" on " + new Date() + ".");<br>chain.doFilter(request,response);<br>}<br><br>public void init(FilterConfig config)<br>throws ServletException {<br>}<br><br>public void destroy() {}<br>}<br><br>一 旦徏立了一个过滤器Q可以在web.xml中利用filter元素以及filter-nameQQ意名Uͼ、file-classQ完全限定的cdQ和 Q可选的Qinit-params子元素声明它。请注意Q元素在web.xml的web-app元素中出现的ơ序不是L的;允许服务器(但不是必需的) 强制所需的次序,q且实际中有些服务器也是q样做的。但q里要注意,所有filter元素必须出现在Q意filter-mapping元素之前Q?nbsp;filter-mapping元素又必d现在所有servlet或servlet-mapping元素之前?br>例如Q给定上q的ReportFilterc,可在web.xml中作Z面的filter声明。它把名UReporter与实际的cReportFilterQ位于moreservletsE序包中Q相兌?br><filter><br><filter-name>Reporter</filter-name><br><filter-class>moresevlets.ReportFilter</filter-class><br></filter><br>一旦命名了一个过滤器Q可利用filter-mapping元素把它与一个或多个servlet或JSP面相关联。关于此工作有两种选择?br>?nbsp;先,可用filter-name和servlet-name子元素把此过滤器与一个特定的servlet名(此servlet名必ȝ后在相同?nbsp;web.xml文g中用servlet元素声明Q关联。例如,下面的程序片断指C系l只要利用一个定制的URL讉K名ؓSomeServletName 的servlet或JSP面Q就q行名ؓReporter的过滤器?br><filter-mapping><br><filter-name>Reporter</filter-name><br><servlet-name>SomeServletName</servlet-name><br></filter-mapping><br>其次Q可利用filter-name和url-pattern子元素将qo器与一lservlet、JSP面或静态内容相兌。例如,盔R的程序片D|C系l只要访问Web应用中的LURLQ就q行名ؓReporter的过滤器?br><filter-mapping><br><filter-name>Reporter</filter-name><br><url-pattern>/*</url-pattern><br></filter-mapping><br>?nbsp;如,E序清单5-12l出了将ReportFilterqo器与名ؓPageName的servlet相关联的web.xml文g的一部分。名?nbsp;PageName依次又与一个名为TestPage.jsp的JSP面以及以模式http: //host/webAppPrefix/UrlTest2/ 开头的URL相关联。TestPage.jsp的源代码已经JSP面命名的谈论在前面??分配名称和定制的URL"中给出。事实上Q程序清?- 12中的servlet和servlet-name从该节原封不动地拿q来的。给定这些web.xml,可看C面的标准输出形式的调试报告(换行?nbsp;ZҎ阅读Q?br>audit.irs.gov tried to access <br>http://mycompany.com/deployDemo/UrlTest2/business/tax-plan.html<br>on Tue Dec 25 13:12:29 EDT 2001.<br><br>E序清单5-12 Web.xmlQ说明filter用法的摘录)<br><?xml version="1.0" encoding="ISO-8859-1"?><br><!DOCTYPE web-app<br>PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br>"http://java.sun.com/dtd/web-app_2_3.dtd"><br><br><web-app><br><filter><br><filter-name>Reporter</filter-name><br><filter-class>moresevlets.ReportFilter</filter-class><br></filter><br><!-- ... --><br><filter-mapping><br><filter-name>Reporter</filter-name><br><servlet-name>PageName</servlet-name><br></filter-mapping><br><!-- ... --><br><servlet><br><servlet-name>PageName</servlet-name><br><jsp-file>/RealPage.jsp</jsp-file><br></servlet><br><!-- ... --><br><servlet-mapping><br><servlet-name> PageName </servlet-name><br><url-pattern>/UrlTest2/*</url-pattern><br></servlet-mapping><br><!-- ... --><br></web-app><br><br><br>7 指定Ƣ迎?br><br>?nbsp;如用h供了一个像http: //host/webAppPrefix/directoryName/ q样的包含一个目录名但没有包含文件名的URLQ会发生什么事情呢Q用戯得到一个目录表Q一个错误?q是标准文g的内容?如果得到标准文g内容Q是 index.html、index.jsp、default.html、default.htm或别的什么东西呢Q?br>Welcome-file-list 元素及其辅助的welcome-file元素解决了这个模p的问题。例如,下面的web.xmlҎ出,如果一个URLl出一个目录名但未l出文g名,?nbsp;务器应该首先试用index.jspQ然后再试用index.html。如果两者都没有扑ֈQ则l果有赖于所用的服务器(如一个目录列表)?br><welcome-file-list><br><welcome-file>index.jsp</welcome-file><br><welcome-file>index.html</welcome-file><br></welcome-file-list><br>虽然许多服务器缺省遵循这U行为,但不一定必这栗因此,明确C用welcom-file-list保证可移植性是一U良好的习惯?br><br>8 指定处理错误的页?br><br>?nbsp;在我了解刎ͼ你在开发servlet和JSP面时从不会犯错误,而且你的所有页面是那样的清晎ͼ一般的E序员都不会被它们的搞糊涂。但是,是hM犯错 误的Q用户可能会提供不合规定的参敎ͼ使用不正的URL或者不能提供必需的表单字D倹{除此之外,其它开发h员可能不那么l心Q他们应该有些工h克服 自己的不?br>error-page元素是用来克服q些问题的。它有两个可能的子元素,分别是:error-code和exception- type。第一个子元素error-code指出在给定的HTTP错误代码出现时用的URL。第二个子元素excpetion-type指出在出现某?nbsp;l定的Java异常但未捕捉到时使用的URL。error-code和exception-type都利用location元素指出相应的URL。此 URL必须?开始。location所指出的位|处的页面可通过查找HttpServletRequest对象的两个专门的属性来讉K关于错误的信息, q两个属性分别是Qjavax.servlet.error.status_code和javax.servlet.error.message?br>可回忆一下,在web.xml内以正确的次序声明web-app的子元素很重要。这里只要记住,error-page出现在web.xml文g的末Nq,servlet、servlet-name和welcome-file-list之后卛_?br><br>8.1 error-code元素<br>Z更好C解error-code元素的|可考虑一下如果不正确地输入文件名Q大多数站点会作Z么反映。这样做一般会出现一?04错误信息Q它表示不能扑ֈ该文Ӟ但几乎没提供更多有用的信息。另一斚wQ可以试一下在www.microsoft.com、www.ibm.com 处或者特别是在www.bea.com 处输出未知的文g名。这是会得出有用的消息,q些消息提供可选择的位|,以便查找感兴的面。提供这h用的错误面对于Web应用来说是很有h值得?nbsp;事实上rm-error-page子元素)。由form-login-pagel出的HTML表单必须h一个j_security_check?nbsp;ACTION属性、一个名为j_username的用户名文本字段以及一个名为j_password的口令字Dc?br>例如Q程序清?-19指示服务器用基于表单的验证。Web应用的顶层目录中的一个名为login.jsp的页面将攉用户名和口oQƈ且失败的登陆由相同目录中名为login-error.jsp的页面报告?br><br>E序清单5-19 web.xmlQ说明login-config的摘录)<br><?xml version="1.0" encoding="ISO-8859-1"?><br><!DOCTYPE web-app<br>PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br>"http://java.sun.com/dtd/web-app_2_3.dtd"><br><br><web-app><br><!-- ... --><br><security-constraint> ... </security-constraint><br><login-config><br><auth-method> FORM </auth-method><br><form-login-config><br><form-login-page>/login.jsp</form-login-page><br><form-error-page>/login-error.jsp</form-error-page><br></form-login-config><br></login-config><br><!-- ... --><br></web-app><br><br><br>9.2 限制对Web资源的访?br>?nbsp;在,可以指示服务器用何U验证方法了?了不P"你说道,"除非我能指定一个来收到保护?nbsp;URLQ否则没有多大用处?没错。指些URLq说明他们应该得CU保护正是security-constriaint元素的用途。此元素?nbsp;web.xml中应该出现在login-config的紧前面。它包含是个可能的子元素Q分别是Qweb-resource-collection?nbsp;auth-constraint、user-data-constraint和display-name。下面各节对它们进行介l?br>l web-resource-collection<br>?nbsp;元素定应该保护的资源。所有security-constraint元素都必d含至一个web-resource-collectionV此元素 ׃个给ZQ意标识名U的web-resource-name元素、一个确定应该保护的URL的url-pattern元素、一个指出此保护所适用?nbsp;HTTP命oQGET、POST{,~省为所有方法)的http-method元素和一个提供资料的可选description元素l成。例如,下面?nbsp;Web-resource-collection(在security-constratint元素内)指出Web应用的proprietary目录?nbsp;所有文档应该受C护?br><security-constraint><br><web-resource-coolection><br><web-resource-name>Proprietary</web-resource-name><br><url-pattern>/propritary/*</url-pattern><br></web-resource-coolection><br><!-- ... --><br></security-constraint><br>?nbsp;要的是应该注意到Qurl-pattern仅适用于直接访问这些资源的客户机。特别是Q它不适合于通过MVC体系l构利用 RequestDispatcher来访问的面Q或者不适合于利用类似jsp:forward的手D|讉K的页面。这U不匀U如果利用得当的话很有好 处。例如,servlet可利用MVC体系l构查找数据Q把它放到bean中,发送请求到从bean中提取数据的JSP面q显C它。我们希望保证决不直 接访问受保护的JSP面Q而只是通过建立该页面将使用的bean的servlet来访问它。url-pattern和auth-contraint元素 可通过声明不允怓Q何用L接访问JSP面来提供这U保证。但是,q种不匀U的行ؓ可能让开发h员放松警惕,使他们偶然对应受保护的资源提供不受限制的 讉K?nbsp;<br>l auth-constraint<br>管web-resource-collention元素质出了哪些URL应该受到保护Q?nbsp;但是auth-constraint元素却指出哪些用户应该具有受保护资源的访问权。此元素应该包含一个或多个标识h讉K权限的用L别role- name元素Q以及包含(可选)一个描q角色的description元素。例如,下面web.xml中的security-constraint元素?nbsp;门规定只有指定ؓAdministrator或Big KahunaQ或两者)的用户具有指定资源的讉K权?br><security-constraint><br><web-resource-coolection> ... </web-resource-coolection><br><auth-constraint><br><role-name>administrator</role-name><br><role-name>kahuna</role-name><br></auth-constraint><br></security-constraint><br>重要的是认识刎ͼ到此为止Q这个过E的可移植部分结束了。服务器怎样定哪些用户处于M角色以及它怎样存放用户的口令,完全有赖于具体的pȝ?br>例如QTomcat使用install_dir/conf/tomcat-users.xml用户名与角色名和口令相兌Q正如下面例子中所C,它指出用户joeQ口令bigshotQ和janeQ口令enajQ属于administrator和kahuna角色?br><tomcat-users><br><user name="joe" password="bigshot" roles="administrator,kahuna" /><br><user name="jane" password="enaj" roles="kahuna" /><br></tomcat-users><br>l user-data-constraint<br>q?nbsp;个可选的元素指出在访问相兌源时使用M传输层保护。它必须包含一个transport-guarantee子元素(合法gؓNONE?nbsp;INTEGRAL或CONFIDENTIALQ,q且可选地包含一个description元素。transport-guarantee为NONE值将 Ҏ用的通讯协议不加限制。INTEGRALDC数据必M一U防止截取它的h阅读它的方式传送。虽然原理上Qƈ且在未来的HTTP版本中)Q在 INTEGRAL和CONFIDENTIAL之间可能会有差别Q但在当前实践中Q他们都只是单地要求用SSL。例如,下面指示服务器只允许对相兌源做 HTTPSq接Q?br><security-constraint><br><!-- ... --><br><user-data-constraint><br><transport-guarantee>CONFIDENTIAL</transport-guarantee><br></user-data-constraint><br></security-constraint><br>l display-name<br>security-constraint的这个很用的子元素给予可能由GUI工具使用的安全约束项一个名U?br>9.3 分配角色?br>q今为止Q讨论已l集中到完全由容器(服务器)处理的安全问题之上了。但servlet以及JSP面也能够处理它们自q安全问题?br>?nbsp;如,容器可能允许用户从bigwig或bigcheese角色讉K一个显CZh员额外紧贴的面Q但只允许bigwig用户修改此页面的参数。完成这U?nbsp;更细致的控制的一U常见方法是调用HttpServletRequset的isUserInRoleҎQƈ据此修改讉K?br>Servlet?nbsp;security-role-ref子元素提供出现在服务器专用口令文件中的安全角色名的一个别名。例如,假如~写了一个调?nbsp;request.isUserInRoleQ?boss"Q的servletQ但后来该servlet被用在了一个其口o文g调用角色manager而不 是boss的服务器中。下面的E序D该servlet能够使用q两个名UC的Q何一个?br><servlet><br><!-- ... --><br><security-role-ref><br><role-name>boss</role-name> <!-- New alias --><br><role-link>manager</role-link> <!-- Real name --><br></security-role-ref><br></servlet><br>也可以在web-app内利用security-role元素提供出现在role-name元素中的所有安全角色的一个全局列表。分别地生命角色佉KUIDEҎ处理安全信息?br><br>10 控制会话时<br><br>?nbsp;果某个会话在一定的旉内未被访问,服务器可把它扔掉以节U内存。可利用HttpSession的setMaxInactiveIntervalҎ直接 讄个别会话对象的超时倹{如果不采用q种ҎQ则~省的超时值由具体的服务器军_。但可利用session-config和session- timeout元素来给Z个适用于所有服务器的明的时倹{超时值的单位为分钟,因此Q下面的例子讄~省会话时gؓ三个时Q?80分钟Q?br><session-config><br><session-timeout>180</session-timeout><br></session-config><br><br>11 Web应用的文档化<br><br>?nbsp;来越多的开发环境开始提供servlet和JSP的直接支持。例子有Borland Jbuilder Enterprise Edition、Macromedia UltraDev、Allaire JRun StudioQ写此文Ӟ已被Macromedia收购Q以及IBM VisuaAge for Java{?br>大量的web.xml元素不仅是ؓ服务器设计的Q而且q是为可视开发环境设计的。它们包括icon、display-name和discription{?br>可回忆一下,在web.xml内以适当地次序声明web-app子元素很重要。不q,q里只要Cicon、display-name和description是web.xml的web-app元素内的前三个合法元素即可?br>l icon<br>icon元素指出GUI工具可用来代表Web应用的一个和两个囑փ文g。可利用small-icon元素指定一q?6 x 16的GIF或JPEG囑փQ用large-icon元素指定一q?2 x 32的图像。下面D一个例子: <br><icon><br><small-icon>/images/small-book.gif</small-icon><br><large-icon>/images/tome.jpg</large-icon><br></icon><br>l display-name<br>display-name元素提供GUI工具可能会用来标记此Web应用的一个名U。下面是个例子?br><display-name>Rare Books</display-name><br>l description<br>description元素提供解释性文本,如下所C:<br><description><br>This Web application represents the store developed for<br>rare-books.com, an online bookstore specializing in rare<br>and limited-edition books.<br></description> <img src ="http://www.aygfsteel.com/simie/aggbug/127520.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/simie/" target="_blank">和田?/a> 2007-07-02 13:05 <a href="http://www.aygfsteel.com/simie/archive/2007/07/02/127520.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP中web配置:web.xml http://www.aygfsteel.com/simie/archive/2007/07/02/127501.html和田?/dc:creator>和田?/author>Mon, 02 Jul 2007 04:22:00 GMThttp://www.aygfsteel.com/simie/archive/2007/07/02/127501.htmlhttp://www.aygfsteel.com/simie/comments/127501.htmlhttp://www.aygfsteel.com/simie/archive/2007/07/02/127501.html#Feedback1http://www.aygfsteel.com/simie/comments/commentRss/127501.htmlhttp://www.aygfsteel.com/simie/services/trackbacks/127501.htmlhttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd
XML声明Q定义XML的版本、编码格式。还有最重要的schema的来?/font>
<?xml version="1.0" encoding="UTF-8"?>
<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">
  .......
</web-app>
 
<description>
当servlet的URL定义为其他文件类型的扩展?该文件类型将不能讉K,而访问了servlet
<?xml version="1.0" encoding="UTF-8"?>
<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">
  <display-name>myweb</display-name><!--站点名称-->
  <description>q里是站Ҏq?lt;/description>
  <icon>
    <small-icon>/images/small.gif</small-icon><!--图标的路径16*16,必须为gif jpge格式-->
    <large-icon>/images/large.gif</large-icon><!--大图标的路径32*32,必须为gif jpge格式-->
  </icon>
  <!--如果存在<distributable/>则代表该站点能在多个JSP Container之间分散执行(分布?-->
  <distributable/>




  <context-param><!--环境参数,讄帔R,取得帔R  this.getInitParameter("context");-->
    <param-name>context</param-name>
    <param-value>10000</param-value>
  </context-param>
  <filter><!--声明filter-->

    <filter-name>filterName</filter-name>
    <filter-class>filter.filterName</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping><!--定义filter所对应的URL-->
  <filter-name>filterName</filter-name>
  <url-pattern>/filterName</url-pattern>
  <dispatcher>REQUEST|INCLUDE|FORWARD|ERROR</dispatcher><!--filter对应的请求方??U方?默认REQUEST-->
  </filter-mapping>
  <listener><!--讑֮Listener接口-->
    <listener-class>listener.ListenerClassName</listener-class>
  </listener>
  <servlet><!--声明servlet的数?->
  <servlet-name>servletName</servlet-name>
  <servlet-class>servlet.servletName</servlet-class>
  <init-param><!--初始化参?可以在init()中用ServletConfig().getInitParamenter("name")取得-->
    <param-name>name</param-name>
    <param-value>123</param-value>
  </init-param>
  <load-on-startup>n</load-on-startup><!--站点启动?此servlet会被自动加蝲执行,1表示最?2,3...-->

  </servlet>
  <servlet-mapping><!--定义servlet所对应的URL-->

    <servlet-name>name</servlet-name>
    <url-pattern>/name</url-pattern>
  </servlet-mapping>
  <session-config><!--讄session时旉Q?0分钟Q默认按服务器配|?->
    <session-timeout>20</session-timeout>
  </session-config>
  <mime-mapping><!--定义某个扩展名和某个MIME Type做映?->
    <extension>doc</extension>
    <mime-type>application/vnd.ms-word</mime-type>
  </mime-mapping>
  <welcome-file-list><!--讄首页列表-->
  <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <error-page><!--错误代码对应到WEB站点的资源\?->
  <error-code>错误代码</error-code>Exception
  <location>/路径/</location>

  </error-page>
  <error-page><!--异常的U类对应到WEB站点的资源\?->
  <exception-type>Exception</exception-type>
  <location>/路径/</location>

  </error-page>

  <jsp-config><!--JSP的相关配|?->
    <taglib><!--JSP所用到的Tag Library-->
      <taglib-uri>URI</taglib-uri>
      <taglib-location>/WEB-INF/lib/xxx.tld</taglib-location>
    </taglib>
    <jsp-property-group>
      <description>此设定的说明</description>
      <display-name>Name</display-name>
      <url-pattern>URL</url-pattern><!--此设定媄响的范围-->
      <el-ignored>true|false</el-ignored><!--true表示不支持EL语法-->
      <scripting-invalid>encoding</scripting-invalid><!--jsp的编?->
      <include-coda>...jspf</include-coda><!--JSP的结?扩展?jspf-->
    </jsp-property-group>
  </jsp-config>
  <resource-ref><!--利用JNDI取得站点可利用的资源-->
    <description>资源说明</description>
    <res-ref-name>资源名称</res-ref-name>
    <res-type>资源U类</res-type>
    <res-auth>Application|Container</res-auth><!--资源l由什么许?->
    <res-sharing-scope>Shareable|Unshareable</res-sharing-scope><!--资源是否可以׃n,默认为Shareable-->
  </resource-ref>
</web-app>


]]>
վ֩ģ壺 | | | | ޶| | | | | ʼ| | | | | | | | ɳ| | | | | | ʲ| | | | ̺| | ӽ| Ԫ| Ƥ| | | | | | ȫ| ʯ| | ʯɽ|