﻿<?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-愚人码头-随笔分类-Web开发</title><link>http://www.blogjava.net/wangyugod/category/6050.html</link><description>知耻而后勇，知不足而进</description><language>zh-cn</language><lastBuildDate>Wed, 26 Dec 2007 14:28:55 GMT</lastBuildDate><pubDate>Wed, 26 Dec 2007 14:28:55 GMT</pubDate><ttl>60</ttl><item><title>转:Javascript事件处理</title><link>http://www.blogjava.net/wangyugod/archive/2007/12/26/170562.html</link><dc:creator>船夫</dc:creator><author>船夫</author><pubDate>Wed, 26 Dec 2007 05:00:00 GMT</pubDate><guid>http://www.blogjava.net/wangyugod/archive/2007/12/26/170562.html</guid><wfw:comment>http://www.blogjava.net/wangyugod/comments/170562.html</wfw:comment><comments>http://www.blogjava.net/wangyugod/archive/2007/12/26/170562.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangyugod/comments/commentRss/170562.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangyugod/services/trackbacks/170562.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/wangyugod/archive/2007/12/26/170562.html'>阅读全文</a><img src ="http://www.blogjava.net/wangyugod/aggbug/170562.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangyugod/" target="_blank">船夫</a> 2007-12-26 13:00 <a href="http://www.blogjava.net/wangyugod/archive/2007/12/26/170562.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTML中Target的四个保留字</title><link>http://www.blogjava.net/wangyugod/archive/2005/12/21/24913.html</link><dc:creator>船夫</dc:creator><author>船夫</author><pubDate>Wed, 21 Dec 2005 01:40:00 GMT</pubDate><guid>http://www.blogjava.net/wangyugod/archive/2005/12/21/24913.html</guid><wfw:comment>http://www.blogjava.net/wangyugod/comments/24913.html</wfw:comment><comments>http://www.blogjava.net/wangyugod/archive/2005/12/21/24913.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangyugod/comments/commentRss/24913.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangyugod/services/trackbacks/24913.html</trackback:ping><description><![CDATA[_parent：在当前FRAMESET位置显示新href。&nbsp;&nbsp;<BR>_top：在当前整个窗口位置显示新href，比如本身FRAMESET位于另一个FRAMESET中。&nbsp;&nbsp;<BR>_self：强制在当前FRAME中显示新href。&nbsp;&nbsp;<BR>_blank：在新窗口中显示href<img src ="http://www.blogjava.net/wangyugod/aggbug/24913.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangyugod/" target="_blank">船夫</a> 2005-12-21 09:40 <a href="http://www.blogjava.net/wangyugod/archive/2005/12/21/24913.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Document 和 Document.all 分别什么时候用</title><link>http://www.blogjava.net/wangyugod/archive/2005/12/20/24720.html</link><dc:creator>船夫</dc:creator><author>船夫</author><pubDate>Tue, 20 Dec 2005 02:24:00 GMT</pubDate><guid>http://www.blogjava.net/wangyugod/archive/2005/12/20/24720.html</guid><wfw:comment>http://www.blogjava.net/wangyugod/comments/24720.html</wfw:comment><comments>http://www.blogjava.net/wangyugod/archive/2005/12/20/24720.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangyugod/comments/commentRss/24720.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangyugod/services/trackbacks/24720.html</trackback:ping><description><![CDATA[如果与a,form对象，image对象，applet对象相对应的html标记中设定了name性质，它的值将被用作document对象的属性名，用来引用相应的对象，其他的对象则不可以。 
<P>　　另外,input等如果作为form的子元素,则直接用inputName或者document.inputName来引用此对象就是错误的,必须使用formName.inputName引用,否则就可以使用inputName来引用. </P>
<P>　　另外应该注意到有很多平时用的元素都没有name. </P>
<P>　　如果想引用一个有id的元素,只能用Id或者document.getElementById,document.all.id来引用 <BR>但是象这样的元素,所以象&lt;a href="......" name="linkname" id="linkid"&gt;......&lt;/a&gt;这样的 <BR>可以用 </P>
<P>linkid.href; <BR>linkname.href; <BR>document.all.linkid.href; <BR>document.all.linkname.href; <BR>document.getElementById("linkid").href; <BR>document.getElementsByName("linkname")[0].href来引用 </P>
<P>　　all是一个集合，包含所有html对像的集合，写一个程式，可以存取到所有的对像。像这样：</P>
<P>&lt;script language="javascript"&gt; <BR>var obj=""; <BR>for(i=0;i&lt;document.all.length;i++) <BR>obj+=document.all[i].tagName+";"; <BR>alert(obj); <BR>&lt;/script&gt; </P>
<P>　　注意要把程式放到&lt;/html&gt;之后哦。</P>
<DIV align=right>作者：<FONT color=#ff0000></FONT>&nbsp;&nbsp;来源：<FONT color=#ff0000>CSDN</FONT> </DIV><img src ="http://www.blogjava.net/wangyugod/aggbug/24720.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangyugod/" target="_blank">船夫</a> 2005-12-20 10:24 <a href="http://www.blogjava.net/wangyugod/archive/2005/12/20/24720.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>  一篇关于web.xml配置的详细说明</title><link>http://www.blogjava.net/wangyugod/archive/2005/11/29/21854.html</link><dc:creator>船夫</dc:creator><author>船夫</author><pubDate>Tue, 29 Nov 2005 09:38:00 GMT</pubDate><guid>http://www.blogjava.net/wangyugod/archive/2005/11/29/21854.html</guid><wfw:comment>http://www.blogjava.net/wangyugod/comments/21854.html</wfw:comment><comments>http://www.blogjava.net/wangyugod/archive/2005/11/29/21854.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangyugod/comments/commentRss/21854.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangyugod/services/trackbacks/21854.html</trackback:ping><description><![CDATA[<P><FONT size=2>1 定义头和根元素<BR><BR>部署描述符文件就像所有XML文件一样，必须以一个XML头开始。这个头声明可以使用的XML版本并给出文件的字符编码。<BR>DOCYTPE声明必须立即出现在此头之后。这个声明告诉服务器适用的servlet规范的版本（如2.2或2.3）并指定管理此文件其余部分内容的语法的DTD(Document Type Definition，文档类型定义)。<BR>所有部署描述符文件的顶层（根）元素为web-app。请注意，XML元素不像HTML，他们是大小写敏感的。因此，web-App和WEB-APP都是不合法的，web-app必须用小写。<BR><BR>2 部署描述符文件内的元素次序<BR><BR>XML 元素不仅是大小写敏感的，而且它们还对出现在其他元素中的次序敏感。例如，XML头必须是文件中的第一项，DOCTYPE声明必须是第二项，而web- app元素必须是第三项。在web-app元素内，元素的次序也很重要。服务器不一定强制要求这种次序，但它们允许（实际上有些服务器就是这样做的）完全拒绝执行含有次序不正确的元素的Web应用。这表示使用非标准元素次序的web.xml文件是不可移植的。<BR>下面的列表给出了所有可直接出现在web-app元素内的合法元素所必需的次序。例如，此列表说明servlet元素必须出现在所有servlet-mapping元素之前。请注意，所有这些元素都是可选的。因此，可以省略掉某一元素，但不能把它放于不正确的位置。<BR>l icon icon元素指出IDE和GUI工具用来表示Web应用的一个和两个图像文件的位置。<BR>l display-name display-name元素提供GUI工具可能会用来标记这个特定的Web应用的一个名称。<BR>l description description元素给出与此有关的说明性文本。<BR>l context-param context-param元素声明应用范围内的初始化参数。<BR>l filter 过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。<BR>l filter-mapping 一旦命名了一个过滤器，就要利用filter-mapping元素把它与一个或多个servlet或JSP页面相关联。<BR>l listener servlet API的版本2.3增加了对事件监听程序的支持，事件监听程序在建立、修改和删除会话或servlet环境时得到通知。Listener元素指出事件监听程序类。<BR>l servlet 在向servlet或JSP页面制定初始化参数或定制URL时，必须首先命名servlet或JSP页面。Servlet元素就是用来完成此项任务的。<BR>l servlet-mapping 服务器一般为servlet提供一个缺省的URL：</FONT><A href="http://host/webAppPrefix/servlet/ServletName" target=_blank><FONT size=2>http://host/webAppPrefix/servlet/ServletName</FONT></A><FONT size=2>。但是，常常会更改这个URL，以便servlet可以访问初始化参数或更容易地处理相对URL。在更改缺省URL时，使用servlet-mapping元素。<BR>l session-config 如果某个会话在一定时间内未被访问，服务器可以抛弃它以节省内存。可通过使用HttpSession的setMaxInactiveInterval方法明确设置单个会话对象的超时值，或者可利用session-config元素制定缺省超时值。<BR>l mime-mapping 如果Web应用具有想到特殊的文件，希望能保证给他们分配特定的MIME类型，则mime-mapping元素提供这种保证。<BR>l welcom-file-list welcome-file-list元素指示服务器在收到引用一个目录名而不是文件名的URL时，使用哪个文件。<BR>l error-page error-page元素使得在返回特定HTTP状态代码时，或者特定类型的异常被抛出时，能够制定将要显示的页面。<BR>l taglib taglib元素对标记库描述符文件（Tag Libraryu Descriptor file）指定别名。此功能使你能够更改TLD文件的位置，而不用编辑使用这些文件的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元素来指定服务器应该怎样给试图访问受保护页面的用户授权。它与sercurity-constraint元素联合使用。<BR>l security-role security-role元素给出安全角色的一个列表，这些角色将出现在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的本地主目录的应用。<BR><BR>3 分配名称和定制的UL<BR><BR>在web.xml中完成的一个最常见的任务是对servlet或JSP页面给出名称和定制的URL。用servlet元素分配名称，使用servlet-mapping元素将定制的URL与刚分配的名称相关联。<BR>3.1 分配名称<BR>为了提供初始化参数，对servlet或JSP页面定义一个定制URL或分配一个安全角色，必须首先给servlet或JSP页面一个名称。可通过 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; <BR>这表示位于WEB-INF/classes/moreservlets/TestServlet的servlet已经得到了注册名Test。给 servlet一个名称具有两个主要的含义。首先，初始化参数、定制的URL模式以及其他定制通过此注册名而不是类名引用此servlet。其次,可在 URL而不是类名中使用此名称。因此，利用刚才给出的定义，URL </FONT><A href="http://host/webAppPrefix/servlet/Test" target=_blank><FONT size=2>http://host/webAppPrefix/servlet/Test</FONT></A><FONT size=2> 可用于 </FONT><A href="http://host/webAppPrefix/servlet/moreservlets.TestServlet" target=_blank><FONT size=2>http://host/webAppPrefix/servlet/moreservlets.TestServlet</FONT></A><FONT size=2> 的场所。<BR>请记住：XML元素不仅是大小写敏感的，而且定义它们的次序也很重要。例如，web-app元素内所有servlet元素必须位于所有servlet- mapping元素（下一小节介绍）之前，而且还要位于5.6节和5.11节讨论的与过滤器或文档相关的元素（如果有的话）之前。类似地，servlet 的servlet-name子元素也必须出现在servlet-class之前。5.2节"部署描述符文件内的元素次序"将详细介绍这种必需的次序。<BR>例如，程序清单5-1给出了一个名为TestServlet的简单servlet，它驻留在moreservlets程序包中。因为此servlet是扎根在一个名为deployDemo的目录中的Web应用的组成部分，所以TestServlet.class放在deployDemo/WEB- INF/classes/moreservlets中。程序清单5-2给出将放置在deployDemo/WEB-INF/内的web.xml文件的一部分。此web.xml文件使用servlet-name和servlet-class元素将名称Test与TestServlet.class相关联。图 5-1和图5-2分别显示利用缺省URL和注册名调用TestServlet时的结果。<BR><BR>程序清单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>* &lt;P&gt;<BR>* Taken from More Servlets and JavaServer Pages<BR>* from Prentice Hall and Sun Microsystems Press,<BR>* </FONT><A href="http://www.moreservlets.com/." target=_blank><FONT size=2>http://www.moreservlets.com/.</FONT></A><BR><FONT size=2>* © 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>"&lt;BODY BGCOLOR=\"#FDF5E6\"&gt;\n" +<BR>"&lt;H2&gt;URI: " + uri + "&lt;/H2&gt;\n" +<BR>"&lt;/BODY&gt;&lt;/HTML&gt;");<BR>}<BR>}<BR><BR><BR>程序清单5-2 web.xml（说明servlet名称的摘录）<BR>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<BR>&lt;!DOCTYPE web-app<BR>PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<BR>"</FONT><A href="http://java.sun.com/dtd/web-app_2_3.dtd" target=_blank><FONT size=2>http://java.sun.com/dtd/web-app_2_3.dtd</FONT></A><FONT size=2>"&gt;<BR><BR>&lt;web-app&gt;<BR>&lt;!-- … --&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;!-- … --&gt;<BR>&lt;/web-app&gt;<BR><BR>3.2 定义定制的URL<BR>大多数服务器具有一个缺省的serlvet URL：<BR></FONT><A href="http://host/webAppPrefix/servlet/packageName.ServletName" target=_blank><FONT size=2>http://host/webAppPrefix/servlet/packageName.ServletName</FONT></A><FONT size=2>。虽然在开发中使用这个URL很方便，但是我们常常会希望另一个URL用于部署。例如，可能会需要一个出现在Web应用顶层的URL（如，http: //host/webAppPrefix/Anyname），并且在此URL中没有servlet项。位于顶层的URL简化了相对URL的使用。此外，对许多开发人员来说，顶层URL看上去比更长更麻烦的缺省URL更简短。<BR>事实上，有时需要使用定制的URL。比如，你可能想关闭缺省URL映射，以便更好地强制实施安全限制或防止用户意外地访问无初始化参数的servlet。如果你禁止了缺省的URL，那么你怎样访问servlet呢？这时只有使用定制的URL了。<BR>为了分配一个定制的URL，可使用servlet-mapping元素及其servlet-name和url-pattern子元素。Servlet- name元素提供了一个任意名称，可利用此名称引用相应的servlet；url-pattern描述了相对于Web应用的根目录的URL。url- pattern元素的值必须以斜杠（/）起始。<BR>下面给出一个简单的web.xml摘录，它允许使用URL </FONT><A href="http://host/webAppPrefix/UrlTest" target=_blank><FONT size=2>http://host/webAppPrefix/UrlTest</FONT></A><FONT size=2>而不是</FONT><A href="http://host/webAppPrefix/servlet/Test" target=_blank><FONT size=2>http://host/webAppPrefix/servlet/Test</FONT></A><FONT size=2>或<BR>http: //host/webAppPrefix/servlet/moreservlets.TestServlet。请注意，仍然需要XML头、 DOCTYPE声明以及web-app封闭元素。此外，可回忆一下，XML元素出现地次序不是随意的。特别是，需要把所有servlet元素放在所有 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;!-- ... --&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;!-- ... --&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 命名JSP页面<BR>因为JSP页面要转换成sevlet，自然希望就像命名servlet一样命名JSP页面。毕竟，JSP页面可能会从初始化参数、安全设置或定制的URL中受益，正如普通的serlvet那样。虽然JSP页面的后台实际上是servlet这句话是正确的，但存在一个关键的猜疑：即，你不知道JSP页面的实际类名（因为系统自己挑选这个名字）。因此，为了命名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>命名JSP页面的原因与命名servlet的原因完全相同：即为了提供一个与定制设置（如，初始化参数和安全设置）一起使用的名称，并且，以便能更改激活 JSP页面的URL（比方说，以便多个URL通过相同页面得以处理，或者从URL中去掉.jsp扩展名）。但是，在设置初始化参数时，应该注意，JSP页面是利用jspInit方法，而不是init方法读取初始化参数的。<BR>例如，程序清单5-3给出一个名为TestPage.jsp的简单JSP页面，它的工作只是打印出用来激活它的URL的本地部分。TestPage.jsp放置在deployDemo应用的顶层。程序清单5-4给出了用来分配一个注册名PageName，然后将此注册名与</FONT><A href="http://host/webAppPrefix/UrlTest2/anything" target=_blank><FONT size=2>http://host/webAppPrefix/UrlTest2/anything</FONT></A><FONT size=2> 形式的URL相关联的web.xml文件（即，deployDemo/WEB-INF/web.xml）的一部分。<BR><BR>程序清单5-3 TestPage.jsp<BR>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;<BR>&lt;HTML&gt;<BR>&lt;HEAD&gt;<BR>&lt;TITLE&gt;<BR>JSP Test Page<BR>&lt;/TITLE&gt;<BR>&lt;/HEAD&gt;<BR>&lt;BODY BGCOLOR="#FDF5E6"&gt;<BR>&lt;H2&gt;URI: &lt;%= request.getRequestURI() %&gt;&lt;/H2&gt;<BR>&lt;/BODY&gt;<BR>&lt;/HTML&gt;<BR><BR><BR>程序清单5-4 web.xml（说明JSP页命名的摘录）<BR>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<BR>&lt;!DOCTYPE web-app<BR>PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<BR>"</FONT><A href="http://java.sun.com/dtd/web-app_2_3.dtd" target=_blank><FONT size=2>http://java.sun.com/dtd/web-app_2_3.dtd</FONT></A><FONT size=2>"&gt;<BR><BR>&lt;web-app&gt;<BR>&lt;!-- ... --&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;!-- ... --&gt;<BR>&lt;servlet-mapping&gt;<BR>&lt;servlet-name&gt; PageName &lt;/servlet-name&gt;<BR>&lt;url-pattern&gt;/UrlTest2/*&lt;/url-pattern&gt;<BR>&lt;/servlet-mapping&gt;<BR>&lt;!-- ... --&gt;<BR>&lt;/web-app&gt;<BR><BR><BR>4 禁止激活器servlet<BR><BR>对servlet或JSP页面建立定制URL的一个原因是，这样做可以注册从 init（servlet）或jspInit（JSP页面）方法中读取得初始化参数。但是，初始化参数只在是利用定制URL模式或注册名访问 servlet或JSP页面时可以使用，用缺省URL </FONT><A href="http://host/webAppPrefix/servlet/ServletName" target=_blank><FONT size=2>http://host/webAppPrefix/servlet/ServletName</FONT></A><FONT size=2> 访问时不能使用。因此，你可能会希望关闭缺省URL，这样就不会有人意外地调用初始化servlet了。这个过程有时称为禁止激活器servlet，因为多数服务器具有一个用缺省的servlet URL注册的标准servlet，并激活缺省的URL应用的实际servlet。<BR>有两种禁止此缺省URL的主要方法：<BR>l 在每个Web应用中重新映射/servlet/模式。<BR>l 全局关闭激活器servlet。<BR>重要的是应该注意到，虽然重新映射每个Web应用中的/servlet/模式比彻底禁止激活servlet所做的工作更多，但重新映射可以用一种完全可移植的方式来完成。相反，全局禁止激活器servlet完全是针对具体机器的，事实上有的服务器（如ServletExec）没有这样的选择。下面的讨论对每个Web应用重新映射/servlet/ URL模式的策略。后面提供在Tomcat中全局禁止激活器servlet的详细内容。<BR>4.1 重新映射/servlet/URL模式<BR>在一个特定的Web应用中禁止以</FONT><A href="http://host/webAppPrefix/servlet/" target=_blank><FONT size=2>http://host/webAppPrefix/servlet/</FONT></A><FONT size=2> 开始的URL的处理非常简单。所需做的事情就是建立一个错误消息servlet，并使用前一节讨论的url-pattern元素将所有匹配请求转向该 servlet。只要简单地使用：<BR>&lt;url-pattern&gt;/servlet/*&lt;/url-pattern&gt;<BR>作为servlet-mapping元素中的模式即可。<BR>例如，程序清单5-5给出了将SorryServlet servlet（程序清单5-6）与所有以</FONT><A href="http://host/webAppPrefix/servlet/" target=_blank><FONT size=2>http://host/webAppPrefix/servlet/</FONT></A><FONT size=2> 开头的URL相关联的部署描述符文件的一部分。<BR><BR>程序清单5-5 web.xml（说明JSP页命名的摘录）<BR>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<BR>&lt;!DOCTYPE web-app<BR>PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<BR>"</FONT><A href="http://java.sun.com/dtd/web-app_2_3.dtd" target=_blank><FONT size=2>http://java.sun.com/dtd/web-app_2_3.dtd</FONT></A><FONT size=2>"&gt;<BR><BR>&lt;web-app&gt;<BR>&lt;!-- ... --&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;!-- ... --&gt;<BR>&lt;servlet-mapping&gt;<BR>&lt;servlet-name&gt; Sorry &lt;/servlet-name&gt;<BR>&lt;url-pattern&gt;/servlet/*&lt;/url-pattern&gt;<BR>&lt;/servlet-mapping&gt;<BR>&lt;!-- ... --&gt;<BR>&lt;/web-app&gt;<BR><BR><BR>程序清单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., </FONT><A href="http://host/webAppPrefix/servlet/ServletName" target=_blank><FONT size=2>http://host/webAppPrefix/servlet/ServletName</FONT></A><FONT size=2>)<BR>* in Web applications that have disabled this<BR>* behavior.<BR>* &lt;P&gt;<BR>* Taken from More Servlets and JavaServer Pages<BR>* from Prentice Hall and Sun Microsystems Press,<BR>* </FONT><A href="http://www.moreservlets.com/." target=_blank><FONT size=2>http://www.moreservlets.com/.</FONT></A><BR><FONT size=2>* © 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>"&lt;BODY BGCOLOR=\"#FDF5E6\"&gt;\n" +<BR>"&lt;H2&gt;" + title + "&lt;/H2&gt;\n" +<BR>"Sorry, access to servlets by means of\n" +<BR>"URLs that begin with\n" +<BR>"</FONT><A href="http://host/webAppPrefix/servlet/" target=_blank><FONT size=2>http://host/webAppPrefix/servlet/</FONT></A><FONT size=2>\n" +<BR>"has been disabled.\n" + <BR>"&lt;/BODY&gt;&lt;/HTML&gt;");<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 全局禁止激活器：Tomcat<BR>Tomcat 4中用来关闭缺省URL的方法与Tomcat 3中所用的很不相同。下面介绍这两种方法：<BR>1．禁止激活器： Tomcat 4<BR>Tomcat 4用与前面相同的方法关闭激活器servlet，即利用web.xml中的url-mapping元素进行关闭。不同之处在于Tomcat使用了放在 install_dir/conf中的一个服务器专用的全局web.xml文件，而前面使用的是存放在每个Web应用的WEB-INF目录中的标准 web.xml文件。<BR>因此，为了在Tomcat 4中关闭激活器servlet，只需在install_dir/conf/web.xml中简单地注释出/servlet/* URL映射项即可，如下所示：<BR>&lt;!-- <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 Tomcat的版本3中，通过在install_dir/conf/server.xml中注释出InvokerInterceptor项全局禁止缺省 servlet URL。例如，下面是禁止使用缺省servlet URL的server.xml文件的一部分。<BR>&lt;!-- <BR>&lt;RequsetInterceptor <BR>className="org.apache.tomcat.request.InvokerInterceptor"<BR>debug="0" prefix="/servlet/" /&gt;<BR>--&gt;<BR><BR>5 初始化和预装载servlet与JSP页面<BR><BR>这里讨论控制servlet和JSP页面的启动行为的方法。特别是，说明了怎样分配初始化参数以及怎样更改服务器生存期中装载servlet和JSP页面的时刻。<BR>5.1 分配servlet初始化参数<BR>利用init-param元素向servlet提供初始化参数，init-param元素具有param-name和param-value子元素。例如，在下面的例子中，如果initServlet servlet是利用它的注册名（InitTest）访问的，它将能够从其方法中调用getServletConfig(). getInitParameter("param1")获得"Value 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 返回值。GetInitParameter的返回值总是一个String。因此，在前一个例子中，可对param2使用Integer.parseInt获得一个int。<BR>l JSP中的初始化。JSP页面使用jspInit而不是init。JSP页面还需要使用jsp-file元素代替servlet-class。<BR>l 缺省URL。初始化参数只在通过它们的注册名或与它们注册名相关的定制URL模式访问Servlet时可以使用。因此，在这个例子中，param1和 param2初始化参数将能够在使用URL </FONT><A href="http://host/webAppPrefix/servlet/InitTest" target=_blank><FONT size=2>http://host/webAppPrefix/servlet/InitTest</FONT></A><FONT size=2> 时可用，但在使用URL </FONT><A href="http://host/webAppPrefix/servlet/myPackage.InitServlet" target=_blank><FONT size=2>http://host/webAppPrefix/servlet/myPackage.InitServlet</FONT></A><FONT size=2> 时不能使用。<BR>例如，程序清单5-7给出一个名为InitServlet的简单servlet，它使用init方法设置firstName和emailAddress字段。程序清单5-8给出分配名称InitTest给servlet的web.xml文件。<BR>程序清单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>* &lt;P&gt;<BR>* Taken from More Servlets and JavaServer Pages<BR>* from Prentice Hall and Sun Microsystems Press,<BR>* </FONT><A href="http://www.moreservlets.com/." target=_blank><FONT size=2>http://www.moreservlets.com/.</FONT></A><BR><FONT size=2>* © 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>"&lt;BODY BGCOLOR=\"#FDF5E6\"&gt;\n" +<BR>"&lt;H2&gt;Init Parameters:&lt;/H2&gt;\n" +<BR>"&lt;UL&gt;\n" +<BR>"&lt;LI&gt;First name: " + firstName + "\n" +<BR>"&lt;LI&gt;Email address: " + emailAddress + "\n" +<BR>"&lt;/UL&gt;\n" + <BR>"&lt;/BODY&gt;&lt;/HTML&gt;");<BR>}<BR>}<BR><BR><BR>程序清单5-8 web.xml（说明初始化参数的摘录）<BR>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<BR>&lt;!DOCTYPE web-app<BR>PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<BR>"</FONT><A href="http://java.sun.com/dtd/web-app_2_3.dtd" target=_blank><FONT size=2>http://java.sun.com/dtd/web-app_2_3.dtd</FONT></A><FONT size=2>"&gt;<BR><BR>&lt;web-app&gt;<BR>&lt;!-- ... --&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;</FONT><A href="mailto:Ellison@Microsoft.com"><FONT size=2>Ellison@Microsoft.com</FONT></A><FONT size=2>&lt;/param-value&gt;<BR>&lt;/init-param&gt;<BR>&lt;/servlet&gt;<BR>&lt;!-- ... --&gt;<BR>&lt;/web-app&gt;<BR><BR>5.2 分配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) 几乎总是分配一个明确的URL模式。对servlet，一般相应地使用以</FONT><A href="http://host/webAppPrefix/servlet/" target=_blank><FONT size=2>http://host/webAppPrefix/servlet/</FONT></A><FONT size=2> 开始的缺省URL。只需记住，使用注册名而不是原名称即可。这对于JSP页面在技术上也是合法的。例如，在上面给出的例子中，可用URL </FONT><A href="http://host/webAppPrefix/servlet/PageName" target=_blank><FONT size=2>http://host/webAppPrefix/servlet/PageName</FONT></A><FONT size=2> 访问RealPage.jsp的对初始化参数具有访问权的版本。但在用于JSP页面时，许多用户似乎不喜欢应用常规的servlet的URL。此外，如果 JSP页面位于服务器为其提供了目录清单的目录中（如，一个既没有index.html也没有index.jsp文件的目录），则用户可能会连接到此 JSP页面，单击它，从而意外地激活未初始化的页面。因此，好的办法是使用url-pattern（5.3节）将JSP页面的原URL与注册的 servlet名相关联。这样，客户机可使用JSP页面的普通名称，但仍然激活定制的版本。例如，给定来自项目1的servlet定义，可使用下面的 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方法且放置于 deployDemo Web应用层次结构的顶层。一般，</FONT><A href="http://host/deployDemo/InitPage.jsp" target=_blank><FONT size=2>http://host/deployDemo/InitPage.jsp</FONT></A><FONT size=2> 形式的URL将激活此页面的不具有初始化参数访问权的版本，从而将对firstName和emailAddress变量显示null。但是， web.xml文件（程序清单5-10）分配了一个注册名，然后将该注册名与URL模式/InitPage.jsp相关联。<BR><BR>程序清单5-9 InitPage.jsp<BR>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;<BR>&lt;HTML&gt;<BR>&lt;HEAD&gt;&lt;TITLE&gt;JSP Init Test&lt;/TITLE&gt;&lt;/HEAD&gt;<BR>&lt;BODY BGCOLOR="#FDF5E6"&gt;<BR>&lt;H2&gt;Init Parameters:&lt;/H2&gt;<BR>&lt;UL&gt;<BR>&lt;LI&gt;First name: &lt;%= firstName %&gt;<BR>&lt;LI&gt;Email address: &lt;%= emailAddress %&gt;<BR>&lt;/UL&gt;<BR>&lt;/BODY&gt;&lt;/HTML&gt;<BR>&lt;%!<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>%&gt;<BR><BR><BR>程序清单5-10 web.xml（说明JSP页面的init参数的摘录）<BR>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<BR>&lt;!DOCTYPE web-app<BR>PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<BR>"</FONT><A href="http://java.sun.com/dtd/web-app_2_3.dtd" target=_blank><FONT size=2>http://java.sun.com/dtd/web-app_2_3.dtd</FONT></A><FONT size=2>"&gt;<BR><BR>&lt;web-app&gt;<BR>&lt;!-- ... --&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;</FONT><A href="mailto:gates@oracle.com"><FONT size=2>gates@oracle.com</FONT></A><FONT size=2>&lt;/param-value&gt;<BR>&lt;/init-param&gt;<BR>&lt;/servlet&gt;<BR>&lt;!-- ... --&gt; <BR>&lt;servlet-mapping&gt;<BR>&lt;servlet-name&gt; InitPage&lt;/servlet-name&gt;<BR>&lt;url-pattern&gt;/InitPage.jsp&lt;/url-pattern&gt;<BR>&lt;/servlet-mapping&gt;<BR>&lt;!-- ... --&gt;<BR>&lt;/web-app&gt;<BR><BR><BR>5.3 提供应用范围内的初始化参数<BR>一般，对单个地servlet或JSP页面分配初始化参数。指定的servlet或JSP页面利用ServletConfig的getInitParameter方法读取这些参数。但是，在某些情形下，希望提供可由任意servlet或JSP页面借助ServletContext的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;</FONT><A href="mailto:blackhole@mycompany.com"><FONT size=2>blackhole@mycompany.com</FONT></A><FONT size=2>&lt;/param-value&gt;<BR>&lt;/context-param&gt;<BR>可回忆一下，为了保证可移植性，web.xml内的元素必须以正确的次序声明。但这里应该注意，context-param元素必须出现任意与文档有关的元素（icon、display-name或description）之后及filter、filter-mapping、listener或 servlet元素之前。<BR>5.4 在服务器启动时装载servlet<BR>假如servlet或JSP页面有一个要花很长时间执行的init （servlet）或jspInit（JSP）方法。例如，假如init或jspInit方法从某个数据库或ResourceBundle查找产量。这种情况下，在第一个客户机请求时装载servlet的缺省行为将对第一个客户机产生较长时间的延迟。因此，可利用servlet的load-on- startup元素规定服务器在第一次启动时装载servlet。下面是一个例子。<BR>&lt;servlet&gt;<BR>&lt;servlet-name&gt; … &lt;/servlet-name&gt;<BR>&lt;servlet-class&gt; … &lt;/servlet-class&gt; &lt;!-- Or jsp-file --&gt;<BR>&lt;load-on-startup/&gt;<BR>&lt;/servlet&gt;<BR>可以为此元素体提供一个整数而不是使用一个空的load-on-startup。想法是服务器应该在装载较大数目的servlet或JSP页面之前装载较少数目的servlet或JSP页面。例如，下面的servlet项（放置在Web应用的WEB-INF目录下的web.xml文件中的web-app元素内）将指示服务器首先装载和初始化SearchServlet，然后装载和初始化由位于Web应用的result目录中的index.jsp文件产生的 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; &lt;!-- Or jsp-file --&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; &lt;!-- Or jsp-file --&gt;<BR>&lt;load-on-startup&gt;2&lt;/load-on-startup&gt;<BR>&lt;/servlet&gt;<BR><BR>6 声明过滤器<BR><BR>servlet版本2.3引入了过滤器的概念。虽然所有支持servlet API版本2.3的服务器都支持过滤器，但为了使用与过滤器有关的元素，必须在web.xml中使用版本2.3的DTD。<BR>过滤器可截取和修改进入一个servlet或JSP页面的请求或从一个servlet或JSP页面发出的相应。在执行一个servlet或JSP页面之前，必须执行第一个相关的过滤器的doFilter方法。在该过滤器对其FilterChain对象调用doFilter时，执行链中的下一个过滤器。如果没有其他过滤器，servlet或JSP页面被执行。过滤器具有对到来的ServletRequest对象的全部访问权，因此，它们可以查看客户机名、查找到来的cookie等。为了访问servlet或JSP页面的输出，过滤器可将响应对象包裹在一个替身对象（stand-in object）中，比方说把输出累加到一个缓冲区。在调用FilterChain对象的doFilter方法之后，过滤器可检查缓冲区，如有必要，就对它进行修改，然后传送到客户机。<BR>例如，程序清单5-11帝国难以了一个简单的过滤器，只要访问相关的servlet或JSP页面，它就截取请求并在标准输出上打印一个报告（开发过程中在桌面系统上运行时，大多数服务器都可以使用这个过滤器）。<BR><BR>程序清单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>* &lt;P&gt;<BR>* Taken from More Servlets and JavaServer Pages<BR>* from Prentice Hall and Sun Microsystems Press,<BR>* </FONT><A href="http://www.moreservlets.com/." target=_blank><FONT size=2>http://www.moreservlets.com/.</FONT></A><BR><FONT size=2>* © 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>一旦建立了一个过滤器，可以在web.xml中利用filter元素以及filter-name（任意名称）、file-class（完全限定的类名）和（可选的）init-params子元素声明它。请注意，元素在web.xml的web-app元素中出现的次序不是任意的；允许服务器（但不是必需的）强制所需的次序，并且实际中有些服务器也是这样做的。但这里要注意，所有filter元素必须出现在任意filter-mapping元素之前， 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>首先，可使用filter-name和servlet-name子元素把此过滤器与一个特定的servlet名（此servlet名必须稍后在相同的 web.xml文件中使用servlet元素声明）关联。例如，下面的程序片断指示系统只要利用一个定制的URL访问名为SomeServletName 的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>例如，程序清单5-12给出了将ReportFilter过滤器与名为PageName的servlet相关联的web.xml文件的一部分。名字 PageName依次又与一个名为TestPage.jsp的JSP页面以及以模式http: //host/webAppPrefix/UrlTest2/ 开头的URL相关联。TestPage.jsp的源代码已经JSP页面命名的谈论在前面的3节"分配名称和定制的URL"中给出。事实上，程序清单5- 12中的servlet和servlet-name项从该节原封不动地拿过来的。给定这些web.xml项，可看到下面的标准输出形式的调试报告（换行是为了容易阅读）。<BR>audit.irs.gov tried to access <BR></FONT><A href="http://mycompany.com/deployDemo/UrlTest2/business/tax-plan.html" target=_blank><FONT size=2>http://mycompany.com/deployDemo/UrlTest2/business/tax-plan.html</FONT></A><BR><FONT size=2>on Tue Dec 25 13:12:29 EDT 2001.<BR><BR>程序清单5-12 Web.xml（说明filter用法的摘录）<BR>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<BR>&lt;!DOCTYPE web-app<BR>PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<BR>"</FONT><A href="http://java.sun.com/dtd/web-app_2_3.dtd" target=_blank><FONT size=2>http://java.sun.com/dtd/web-app_2_3.dtd</FONT></A><FONT size=2>"&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;!-- ... --&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;!-- ... --&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;!-- ... --&gt;<BR>&lt;servlet-mapping&gt;<BR>&lt;servlet-name&gt; PageName &lt;/servlet-name&gt;<BR>&lt;url-pattern&gt;/UrlTest2/*&lt;/url-pattern&gt;<BR>&lt;/servlet-mapping&gt;<BR>&lt;!-- ... --&gt;<BR>&lt;/web-app&gt;<BR><BR><BR>7 指定欢迎页<BR><BR>假如用户提供了一个像http: //host/webAppPrefix/directoryName/ 这样的包含一个目录名但没有包含文件名的URL，会发生什么事情呢？用户能得到一个目录表？一个错误？还是标准文件的内容？如果得到标准文件内容，是 index.html、index.jsp、default.html、default.htm或别的什么东西呢？<BR>Welcome-file-list 元素及其辅助的welcome-file元素解决了这个模糊的问题。例如，下面的web.xml项指出，如果一个URL给出一个目录名但未给出文件名，服务器应该首先试用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 指定处理错误的页面<BR><BR>现在我了解到，你在开发servlet和JSP页面时从不会犯错误，而且你的所有页面是那样的清晰，一般的程序员都不会被它们的搞糊涂。但是，是人总会犯错误的，用户可能会提供不合规定的参数，使用不正确的URL或者不能提供必需的表单字段值。除此之外，其它开发人员可能不那么细心，他们应该有些工具来克服自己的不足。<BR>error-page元素就是用来克服这些问题的。它有两个可能的子元素，分别是：error-code和exception- type。第一个子元素error-code指出在给定的HTTP错误代码出现时使用的URL。第二个子元素excpetion-type指出在出现某个给定的Java异常但未捕捉到时使用的URL。error-code和exception-type都利用location元素指出相应的URL。此 URL必须以/开始。location所指出的位置处的页面可通过查找HttpServletRequest对象的两个专门的属性来访问关于错误的信息，这两个属性分别是：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 error-code元素<BR>为了更好地了解error-code元素的值，可考虑一下如果不正确地输入文件名，大多数站点会作出什么反映。这样做一般会出现一个404错误信息，它表示不能找到该文件，但几乎没提供更多有用的信息。另一方面，可以试一下在</FONT><A href="http://www.microsoft.com/" target=_blank><FONT size=2>www.microsoft.com</FONT></A><FONT size=2>、</FONT><A href="http://www.ibm.com/" target=_blank><FONT size=2>www.ibm.com</FONT></A><FONT size=2> 处或者特别是在</FONT><A href="http://www.bea.com/" target=_blank><FONT size=2>www.bea.com</FONT></A><FONT size=2> 处输出未知的文件名。这是会得出有用的消息，这些消息提供可选择的位置，以便查找感兴趣的页面。提供这样有用的错误页面对于Web应用来说是很有价值得。事实上rm-error-page子元素）。由form-login-page给出的HTML表单必须具有一个j_security_check的 ACTION属性、一个名为j_username的用户名文本字段以及一个名为j_password的口令字段。<BR>例如，程序清单5-19指示服务器使用基于表单的验证。Web应用的顶层目录中的一个名为login.jsp的页面将收集用户名和口令，并且失败的登陆将由相同目录中名为login-error.jsp的页面报告。<BR><BR>程序清单5-19 web.xml（说明login-config的摘录）<BR>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<BR>&lt;!DOCTYPE web-app<BR>PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<BR>"</FONT><A href="http://java.sun.com/dtd/web-app_2_3.dtd" target=_blank><FONT size=2>http://java.sun.com/dtd/web-app_2_3.dtd</FONT></A><FONT size=2>"&gt;<BR><BR>&lt;web-app&gt;<BR>&lt;!-- ... --&gt;<BR>&lt;security-constraint&gt; ... &lt;/security-constraint&gt;<BR>&lt;login-config&gt;<BR>&lt;auth-method&gt; FORM &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;!-- ... --&gt;<BR>&lt;/web-app&gt;<BR><BR><BR>9.2 限制对Web资源的访问<BR>现在，可以指示服务器使用何种验证方法了。"了不起，"你说道，"除非我能指定一个来收到保护的 URL，否则没有多大用处。"没错。指出这些URL并说明他们应该得到何种保护正是security-constriaint元素的用途。此元素在 web.xml中应该出现在login-config的紧前面。它包含是个可能的子元素，分别是：web-resource-collection、 auth-constraint、user-data-constraint和display-name。下面各小节对它们进行介绍。<BR>l web-resource-collection<BR>此元素确定应该保护的资源。所有security-constraint元素都必须包含至少一个web-resource-collection项。此元素由一个给出任意标识名称的web-resource-name元素、一个确定应该保护的URL的url-pattern元素、一个指出此保护所适用的 HTTP命令（GET、POST等，缺省为所有方法）的http-method元素和一个提供资料的可选description元素组成。例如，下面的 Web-resource-collection项（在security-constratint元素内）指出Web应用的proprietary目录中所有文档应该受到保护。<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;!-- ... --&gt;<BR>&lt;/security-constraint&gt;<BR>重要的是应该注意到，url-pattern仅适用于直接访问这些资源的客户机。特别是，它不适合于通过MVC体系结构利用 RequestDispatcher来访问的页面，或者不适合于利用类似jsp:forward的手段来访问的页面。这种不匀称如果利用得当的话很有好处。例如，servlet可利用MVC体系结构查找数据，把它放到bean中，发送请求到从bean中提取数据的JSP页面并显示它。我们希望保证决不直接访问受保护的JSP页面，而只是通过建立该页面将使用的bean的servlet来访问它。url-pattern和auth-contraint元素可通过声明不允许任何用户直接访问JSP页面来提供这种保证。但是，这种不匀称的行为可能让开发人员放松警惕，使他们偶然对应受保护的资源提供不受限制的访问。 <BR>l auth-constraint<BR>尽管web-resource-collention元素质出了哪些URL应该受到保护，但是auth-constraint元素却指出哪些用户应该具有受保护资源的访问权。此元素应该包含一个或多个标识具有访问权限的用户类别role- name元素，以及包含（可选）一个描述角色的description元素。例如，下面web.xml中的security-constraint元素部门规定只有指定为Administrator或Big Kahuna（或两者）的用户具有指定资源的访问权。<BR>&lt;security-constraint&gt;<BR>&lt;web-resource-coolection&gt; ... &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 name="joe" password="bigshot" roles="administrator,kahuna" /&gt;<BR>&lt;user name="jane" password="enaj" roles="kahuna" /&gt;<BR>&lt;/tomcat-users&gt;<BR>l user-data-constraint<BR>这个可选的元素指出在访问相关资源时使用任何传输层保护。它必须包含一个transport-guarantee子元素（合法值为NONE、 INTEGRAL或CONFIDENTIAL），并且可选地包含一个description元素。transport-guarantee为NONE值将对所用的通讯协议不加限制。INTEGRAL值表示数据必须以一种防止截取它的人阅读它的方式传送。虽然原理上（并且在未来的HTTP版本中），在 INTEGRAL和CONFIDENTIAL之间可能会有差别，但在当前实践中，他们都只是简单地要求用SSL。例如，下面指示服务器只允许对相关资源做 HTTPS连接：<BR>&lt;security-constraint&gt;<BR>&lt;!-- ... --&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 display-name<BR>security-constraint的这个很少使用的子元素给予可能由GUI工具使用的安全约束项一个名称。<BR>9.3 分配角色名<BR>迄今为止，讨论已经集中到完全由容器（服务器）处理的安全问题之上了。但servlet以及JSP页面也能够处理它们自己的安全问题。<BR>例如，容器可能允许用户从bigwig或bigcheese角色访问一个显示主管人员额外紧贴的页面，但只允许bigwig用户修改此页面的参数。完成这种更细致的控制的一种常见方法是调用HttpServletRequset的isUserInRole方法，并据此修改访问。<BR>Servlet的 security-role-ref子元素提供出现在服务器专用口令文件中的安全角色名的一个别名。例如，假如编写了一个调用 request.isUserInRole（"boss"）的servlet，但后来该servlet被用在了一个其口令文件调用角色manager而不是boss的服务器中。下面的程序段使该servlet能够使用这两个名称中的任何一个。<BR>&lt;servlet&gt;<BR>&lt;!-- ... --&gt;<BR>&lt;security-role-ref&gt;<BR>&lt;role-name&gt;boss&lt;/role-name&gt; &lt;!-- New alias --&gt;<BR>&lt;role-link&gt;manager&lt;/role-link&gt; &lt;!-- Real name --&gt;<BR>&lt;/security-role-ref&gt;<BR>&lt;/servlet&gt;<BR>也可以在web-app内利用security-role元素提供将出现在role-name元素中的所有安全角色的一个全局列表。分别地生命角色使高级IDE容易处理安全信息。<BR><BR>10 控制会话超时<BR><BR>如果某个会话在一定的时间内未被访问，服务器可把它扔掉以节约内存。可利用HttpSession的setMaxInactiveInterval方法直接设置个别会话对象的超时值。如果不采用这种方法，则缺省的超时值由具体的服务器决定。但可利用session-config和session- 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 Web应用的文档化<BR><BR>越来越多的开发环境开始提供servlet和JSP的直接支持。例子有Borland Jbuilder Enterprise Edition、Macromedia UltraDev、Allaire JRun Studio（写此文时，已被Macromedia收购）以及IBM VisuaAge for Java等。<BR>大量的web.xml元素不仅是为服务器设计的，而且还是为可视开发环境设计的。它们包括icon、display-name和discription等。<BR>可回忆一下，在web.xml内以适当地次序声明web-app子元素很重要。不过，这里只要记住icon、display-name和description是web.xml的web-app元素内的前三个合法元素即可。<BR>l icon<BR>icon元素指出GUI工具可用来代表Web应用的一个和两个图像文件。可利用small-icon元素指定一幅16 x 16的GIF或JPEG图像，用large-icon元素指定一幅32 x 32的图像。下面举一个例子： <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 display-name<BR>display-name元素提供GUI工具可能会用来标记此Web应用的一个名称。下面是个例子。<BR>&lt;display-name&gt;Rare Books&lt;/display-name&gt;<BR>l description<BR>description元素提供解释性文本，如下所示：<BR>&lt;description&gt;<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>&lt;/description&gt;<BR><BR>12 关联文件与MIME类型<BR><BR>服务器一般都具有一种让Web站点管理员将文件扩展名与媒体相关联的方法。例如，将会自动给予名为mom.jpg的文件一个image/jpeg的MIME 类型。但是，假如你的Web应用具有几个不寻常的文件，你希望保证它们在发送到客户机时分配为某种MIME类型。mime-mapping元素（具有 extension和mime-type子元素）可提供这种保证。例如，下面的代码指示服务器将application/x-fubar的MIME类型分配给所有以.foo结尾的文件。<BR>&lt;mime-mapping&gt;<BR>&lt;extension&gt;foo&lt;/extension&gt;<BR>&lt;mime-type&gt;application/x-fubar&lt;/mime-type&gt;<BR>&lt;/mime-mapping&gt;<BR>或许，你的Web应用希望重载（override）标准的映射。例如，下面的代码将告诉服务器在发送到客户机时指定.ps文件作为纯文本（text/plain）而不是作为PostScript（application/postscript）。<BR>&lt;mime-mapping&gt;<BR>&lt;extension&gt;ps&lt;/extension&gt;<BR>&lt;mime-type&gt;application/postscript&lt;/mime-type&gt;<BR>&lt;/mime-mapping&gt;<BR><BR><BR>13 定位TLD<BR><BR>JSP taglib元素具有一个必要的uri属性，它给出一个TLD（Tag Library Descriptor）文件相对于Web应用的根的位置。TLD文件的实际名称在发布新的标签库版本时可能会改变，但我们希望避免更改所有现有JSP页面。此外，可能还希望使用保持taglib元素的简练性的一个简短的uri。这就是部署描述符文件的taglib元素派用场的所在了。Taglib包含两个子元素：taglib-uri和taglib-location。taglib-uri元素应该与用于JSP taglib元素的uri属性的东西相匹配。Taglib-location元素给出TLD文件的实际位置。例如，假如你将文件chart-tags- 1.3beta.tld放在WebApp/WEB-INF/tlds中。现在，假如web.xml在web-app元素内包含下列内容。<BR>&lt;taglib&gt;<BR>&lt;taglib-uri&gt;/charts.tld&lt;/taglib-uri&gt;<BR>&lt;taglib-location&gt;<BR>/WEB-INF/tlds/chart-tags-1.3beta.tld<BR>&lt;/taglib-location&gt;<BR>&lt;/taglib&gt;<BR>给出这个说明后，JSP页面可通过下面的简化形式使用标签库。<BR>&lt;%@ taglib uri="/charts.tld" prefix="somePrefix" %&gt;<BR><BR>14 指定应用事件监听程序<BR><BR>应用事件监听器程序是建立或修改servlet环境或会话对象时通知的类。它们是servlet规范的版本2.3中的新内容。这里只简单地说明用来向Web应用注册一个监听程序的web.xml的用法。<BR>注册一个监听程序涉及在web.xml的web-app元素内放置一个listener元素。在listener元素内，listener-class元素列出监听程序的完整的限定类名，如下所示：<BR>&lt;listener&gt;<BR>&lt;listener-class&gt;package.ListenerClass&lt;/listener-class&gt;<BR>&lt;/listener&gt;<BR>虽然listener元素的结构很简单，但请不要忘记，必须正确地给出web-app元素内的子元素的次序。listener元素位于所有的servlet 元素之前以及所有filter-mapping元素之后。此外，因为应用生存期监听程序是serlvet规范的2.3版本中的新内容，所以必须使用 web.xml DTD的2.3版本，而不是2.2版本。<BR>例如，程序清单5-20给出一个名为ContextReporter的简单的监听程序，只要Web应用的Servlet-Context建立（如装载Web应用）或消除（如服务器关闭）时，它就在标准输出上显示一条消息。程序清单5-21给出此监听程序注册所需要的web.xml文件的一部分。<BR><BR>程序清单5-20 ContextReporterjava<BR>package moreservlets;<BR><BR>import javax.servlet.*;<BR>import java.util.*;<BR><BR>/** Simple listener that prints a report on the standard output <BR>* when the ServletContext is created or destroyed.<BR>* &lt;P&gt;<BR>* Taken from More Servlets and JavaServer Pages<BR>* from Prentice Hall and Sun Microsystems Press,<BR>* </FONT><A href="http://www.moreservlets.com/." target=_blank><FONT size=2>http://www.moreservlets.com/.</FONT></A><BR><FONT size=2>* © 2002 Marty Hall; may be freely used or adapted.<BR>*/<BR><BR>public class ContextReporter implements ServletContextListener {<BR>public void contextInitialized(ServletContextEvent event) {<BR>System.out.println("Context created on " +<BR>new Date() + ".");<BR>}<BR><BR>public void contextDestroyed(ServletContextEvent event) {<BR>System.out.println("Context destroyed on " +<BR>new Date() + ".");<BR>}<BR>}<BR><BR><BR>程序清单5-21 web.xml（声明一个监听程序的摘录）<BR>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<BR>&lt;!DOCTYPE web-app<BR>PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<BR>"</FONT><A href="http://java.sun.com/dtd/web-app_2_3.dtd" target=_blank><FONT size=2>http://java.sun.com/dtd/web-app_2_3.dtd</FONT></A><FONT size=2>"&gt;<BR><BR>&lt;web-app&gt;<BR>&lt;!-- ... --&gt;<BR>&lt;filter-mapping&gt; … &lt;/filter-mapping&gt;<BR>&lt;listener&gt;<BR>&lt;listener-class&gt;package.ListenerClass&lt;/listener-class&gt;<BR>&lt;/listener&gt;<BR>&lt;servlet&gt; ... &lt;/servlet&gt;<BR>&lt;!-- ... --&gt;<BR>&lt;/web-app&gt;<BR><BR><BR>15 J2EE元素<BR><BR>本节描述用作J2EE环境组成部分的Web应用的web.xml元素。这里将提供一个简明的介绍，详细内容可以参阅</FONT><A href="http://java.sun.com/j2ee/j2ee-1_3-fr-spec.pdf" target=_blank><FONT size=2>http://java.sun.com/j2ee/j2ee-1_3-fr-spec.pdf</FONT></A><FONT size=2>的Java 2 Plantform Enterprise Edition版本1.3规范的第5章。<BR>l distributable<BR>distributable 元素指出，Web应用是以这样的方式编程的：即，支持集群的服务器可安全地在多个服务器上分布Web应用。例如，一个可分布的应用必须只使用 Serializable对象作为其HttpSession对象的属性，而且必须避免用实例变量（字段）来实现持续性。distributable元素直接出现在discription元素之后，并且不包含子元素或数据，它只是一个如下的标志。<BR>&lt;distributable /&gt;<BR>l resource-env-ref<BR>resource -env-ref元素声明一个与某个资源有关的管理对象。此元素由一个可选的description元素、一个resource-env-ref- name元素（一个相对于java:comp/env环境的JNDI名）以及一个resource-env-type元素（指定资源类型的完全限定的类），如下所示：<BR>&lt;resource-env-ref&gt;<BR>&lt;resource-env-ref-name&gt;<BR>jms/StockQueue<BR>&lt;/resource-env-ref-name&gt;<BR>&lt;resource-env-ref-type&gt;<BR>javax.jms.Queue<BR>&lt;/resource-env-ref-type&gt;<BR>&lt;/resource-env-ref&gt;<BR>l env-entry<BR>env -entry元素声明Web应用的环境项。它由一个可选的description元素、一个env-entry-name元素（一个相对于java: comp/env环境JNDI名）、一个env-entry-value元素（项值）以及一个env-entry-type元素（java.lang程序包中一个类型的完全限定类名，java.lang.Boolean、java.lang.String等）组成。下面是一个例子：<BR>&lt;env-entry&gt;<BR>&lt;env-entry-name&gt;minAmout&lt;/env-entry-name&gt;<BR>&lt;env-entry-value&gt;100.00&lt;/env-entry-value&gt;<BR>&lt;env-entry-type&gt;minAmout&lt;/env-entry-type&gt;<BR>&lt;/env-entry&gt;<BR>l ejb-ref<BR>ejb -ref元素声明对一个EJB的主目录的应用。它由一个可选的description元素、一个ejb-ref-name元素（相对于java: comp/env的EJB应用）、一个ejb-ref-type元素（bean的类型，Entity或Session）、一个home元素（bean的主目录接口的完全限定名）、一个remote元素（bean的远程接口的完全限定名）以及一个可选的ejb-link元素（当前bean链接的另一个 bean的名称）组成。<BR>l ejb-local-ref<BR>ejb-local-ref元素声明一个EJB的本地主目录的引用。除了用local-home代替home外，此元素具有与ejb-ref元素相同的属性并以相同的方式使用。<BR></FONT></P><img src ="http://www.blogjava.net/wangyugod/aggbug/21854.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangyugod/" target="_blank">船夫</a> 2005-11-29 17:38 <a href="http://www.blogjava.net/wangyugod/archive/2005/11/29/21854.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>无法刷新include的jsp的问题</title><link>http://www.blogjava.net/wangyugod/archive/2005/11/23/21129.html</link><dc:creator>船夫</dc:creator><author>船夫</author><pubDate>Wed, 23 Nov 2005 07:26:00 GMT</pubDate><guid>http://www.blogjava.net/wangyugod/archive/2005/11/23/21129.html</guid><wfw:comment>http://www.blogjava.net/wangyugod/comments/21129.html</wfw:comment><comments>http://www.blogjava.net/wangyugod/archive/2005/11/23/21129.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangyugod/comments/commentRss/21129.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangyugod/services/trackbacks/21129.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这几天在写web表现层的东西，由于对jsp不是很熟悉，在使用include的时候就遇到了问题。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可能是用OOP久了，写什么都想封装起来，写jsp的时候就想使用include。我在一个parent.jsp中使用<BR>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">&lt;%</SPAN><SPAN style="COLOR: #000000">@include&nbsp;file</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">sub.jsp</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">%&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top></SPAN></DIV>include了一个sub.jsp，之后就发现我在刷新parent.jsp的时候不能同时刷新sub.jsp，百思不得其解，听高手说把IE的Cache禁用了就行了，但使用
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">META&nbsp;HTTP</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">EQUIV</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Cache-Control</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;CONTENT</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">no-cache</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN></DIV>这个禁了之后还是不行，最后到论坛上逛了一圈儿才发现原来是我的标签使用错了，应该使用jsp:include标签，@include file主要用于静态的内容引用，就相当于把被引用的文件代码（sub.jsp）直接copy到主页面（parent.jsp）中。而jsp:include可以随时更新sub.jsp的内容，只要把属性flush设为true。<BR>要详细了解的可以看看以下两篇文章：<BR><SPAN class=javascript id=text45472><A class=ilink href="http://www-900.ibm.com/developerWorks/cn/java/j-jsp04153/" target=_blank><FONT color=#004080>http://www-900.ibm.com/developerWorks/cn/java/j-jsp04153/</FONT></A><BR><A class=ilink href="http://www-900.ibm.com/developerWorks/cn/java/j-jsp04293/ " target=_blank><FONT color=#004080>http://www-900.ibm.com/developerWorks/cn/java/j-jsp04293/</FONT></A> </SPAN><img src ="http://www.blogjava.net/wangyugod/aggbug/21129.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangyugod/" target="_blank">船夫</a> 2005-11-23 15:26 <a href="http://www.blogjava.net/wangyugod/archive/2005/11/23/21129.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网页中META标签的使用</title><link>http://www.blogjava.net/wangyugod/archive/2005/11/17/20271.html</link><dc:creator>船夫</dc:creator><author>船夫</author><pubDate>Thu, 17 Nov 2005 09:05:00 GMT</pubDate><guid>http://www.blogjava.net/wangyugod/archive/2005/11/17/20271.html</guid><wfw:comment>http://www.blogjava.net/wangyugod/comments/20271.html</wfw:comment><comments>http://www.blogjava.net/wangyugod/archive/2005/11/17/20271.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangyugod/comments/commentRss/20271.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangyugod/services/trackbacks/20271.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 width=639 border=0>
<TBODY>
<TR>
<TD width=637><FONT size=4><FONT color=#800000>Meta 标签放在每个网页的&lt;head&gt;...&lt;/head&gt;中，我们大家比较熟悉的如：&nbsp;<BR><BR>&lt;meta name="GENERATOR" content="Microsoft FrontPage 3.0"&gt;说明编辑工具；<BR>&lt;meta name="KEYWORDS" content="..."&gt;说明关键词；<BR>&lt;meta name="DESCRIPTION" content="..."&gt;说明主页描述；<BR><BR>&lt;meta http-equiv="Content-Type" content="text/html; charset=gb_2312-80"&gt;和<BR>&lt;meta http-equiv="Content-Language" content="zh-CN"&gt;说明所用语言及文字...&nbsp;<BR><BR>可见META有两种，name和http-equiv。&nbsp;<BR><BR>name主要用于描述网页,对应于content,以便于搜索引擎机器人查找、分类（目 前几乎所有的搜索引擎都使用网上机器人自动查找META值来给你的网页分类）。这其中最重要的是DESCRIPTION（你的站点在引擎上的描述）和KEYWORDS（搜索引 擎籍以分类的关键词),应该给你的“每一页”都插入这两个META值。当然你也可以不要搜索引擎检索,可用:&nbsp;<BR>&lt;meta name="ROBOTS" content="all | none | index | noindex | follow | nofollow"&gt; 来确定:<BR>设定为"all"时文件将被检索，且页上链接可被查询;<BR>设定为"none"则表示文件不被检索，而且不查询页上的链接;<BR>设定为"index"时文件将被检索;<BR>设定为"follow"则可查询页上的链接;<BR>设定为"noindex"时文件不检索，但可被查询链接;<BR>设定为"nofollow"则表示文件不被检索，但可查询页上的链接.<BR><BR>http-equiv顾名思义相当于http文件头的作用，可以直接影响网页的传输。比较 直接的例子如:&nbsp;<BR><BR>1、自动刷新，并指向新网页<BR>&lt;meta http-equiv="Refresh" content="10; url= http://yourlink"&gt; 10秒后刷新到http://yourlink;<BR><BR>2、网页间转换时加入效果<BR>&lt;meta http-equiv="Page-Enter" content="revealTrans(duration=10, transition=50)"&gt;&nbsp;<BR>&lt;meta http-equiv="Page-Exit" content="revealTrans(duration=20, transition=6)"&gt;&nbsp;<BR>加在一个网页中，进出时有一些特殊效果，这个功能即FrontPage 98的Format/Page Transition.不过注意所加网页不能是一个Frame页;<BR><BR>3、强制网页不被存入Cache中<BR>&lt;meta http-equiv="pragma" content="no-cache"&gt;&nbsp;<BR>&lt;meta http-equiv="expires" content="wed, 26 Feb 1997 08:21:57 GMT"&gt;&nbsp;<BR>大家可以到http://www.internet.com上看看，它的首页当你断线后，就无法在cache中再调出。（本身是关于建站很棒的站点)<BR><BR>4、定义指向窗口<BR>&lt;meta http-equiv="window-target" content="_top"&gt;<BR>可以防止网页被别人作为一个Frame调用.(不过,我试了一下,似乎不灵)&nbsp;<BR><BR>Meta还有很多功能, 如大家关心的 "怎样在搜索引擎中，被放在搜索结果前面的 位置"( http://vancouver-webpages.com/VWbot/mk-metas.html). 你可以在以下站点进一步查询：http://webdeveloper.com/categories/html/ html_metatag_res.html<BR>http://vancouver-webpages.com/META/<BR>http://www.nlc-bnc.ca/ifla/II/metadata.htm</FONT> </FONT></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/wangyugod/aggbug/20271.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangyugod/" target="_blank">船夫</a> 2005-11-17 17:05 <a href="http://www.blogjava.net/wangyugod/archive/2005/11/17/20271.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTML标签详解</title><link>http://www.blogjava.net/wangyugod/archive/2005/11/17/20245.html</link><dc:creator>船夫</dc:creator><author>船夫</author><pubDate>Thu, 17 Nov 2005 07:21:00 GMT</pubDate><guid>http://www.blogjava.net/wangyugod/archive/2005/11/17/20245.html</guid><wfw:comment>http://www.blogjava.net/wangyugod/comments/20245.html</wfw:comment><comments>http://www.blogjava.net/wangyugod/archive/2005/11/17/20245.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/wangyugod/comments/commentRss/20245.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangyugod/services/trackbacks/20245.html</trackback:ping><description><![CDATA[<P>--&nbsp;&nbsp;HTML标签详解<BR>HTML指令详解<BR>结构<BR>＜html＞<BR>＜head＞<BR>＜title＞标题＜title＞<BR>＜/head＞<BR>＜body＞..........文件内容..........<BR>＜/body＞<BR>＜/html＞<BR>1.文件标题<BR>＜title＞..........＜/title＞<BR>2.文件更新--＜meta＞<BR>　【1】10秒后自动更新一次<BR>　　＜meta&nbsp;http-equiv="refresh"&nbsp;content=10＞<BR>　【2】10秒後自动连结到另一文件<BR>　　＜meta&nbsp;http-equiv="refresh"&nbsp;content="10；URL=欲连结文件之URL"＞<BR>3.查询用表单--＜isindex&gt;<BR>　　　若欲设定查询栏位前的提示文字：<BR>　　＜isindex&nbsp;prompt="提示文字"＞<BR>4.预设的基准路径--＜base&gt;<BR>&nbsp;&nbsp;&nbsp;＜base&nbsp;href="放置文件的主机之URL"＞<BR>版面<BR>1.标题文字&nbsp;＜h#＞..........＜/h#＞&nbsp;#=1~6；h1为最大字，h6为最小字<BR>2.字体变化&nbsp;＜font＞..........＜/font＞&nbsp;<BR>【1】字体大小&nbsp;＜font&nbsp;size=#＞..........＜/font＞&nbsp;#=1~7；数字愈大字也愈大&nbsp;<BR>【2】指定字型&nbsp;＜font&nbsp;face="字型名称"＞..........＜/font＞&nbsp;<BR>【3】文字颜色&nbsp;＜font&nbsp;color=#rrggbb＞..........＜/font＞&nbsp;rr：表红色（red）色码&nbsp;gg：表绿色（green）色码&nbsp;bb：表蓝色（blue）色码<BR>3.显示小字体&nbsp;＜small＞..........＜/small＞&nbsp;<BR>4.显示大字体&nbsp;＜big＞..........＜/big＞<BR>5.粗体字&nbsp;＜b＞..........＜/b＞<BR>6.斜体字&nbsp;＜i＞..........＜/i＞&nbsp;<BR>7.打字机字体&nbsp;＜tt＞..........＜/tt＞<BR>8.底线&nbsp;＜u＞..........＜/u＞<BR>9.删除线&nbsp;＜strike＞..........＜/strike＞<BR>10.下标字&nbsp;＜sub＞..........＜/sub＞<BR>11.上标字&nbsp;＜sup&gt;..........＜/sup＞<BR>12.文字闪烁效果&nbsp;＜blink＞..........＜/blink＞<BR>13.换行&nbsp;＜br＞<BR>14.分段&nbsp;＜p＞&nbsp;<BR>15.文字的对齐方向&nbsp;＜p&nbsp;align="#"＞&nbsp;#号可为&nbsp;left：表向左对齐（预设值）&nbsp;center：表向中对齐&nbsp;right：表向右对齐&nbsp;P.S.＜p&nbsp;align="#"＞之後的文字都会以所设的对齐方式显示，&nbsp;直到出现另一个＜p&nbsp;align="#"＞改变其对齐方向，或遇到&nbsp;＜hr＞ⅱ＜h#＞标签时会自动设回预设的向左对齐。<BR>16.分隔线&nbsp;＜hr＞&nbsp;<BR>【1】分隔线的粗细&nbsp;＜hr&nbsp;size=点数＞&nbsp;<BR>【2】分隔线的宽度&nbsp;＜hr&nbsp;size=点数或百分比＞&nbsp;<BR>【3】分隔线对齐方向&nbsp;＜hr&nbsp;align="#"＞&nbsp;#号可为&nbsp;left：表向左对齐（预设值）&nbsp;center：表向中对齐&nbsp;right：表向右对齐&nbsp;<BR>【4】分隔线的颜色&nbsp;＜hr&nbsp;color=#rrggbb＞&nbsp;<BR>【5】实心分隔线&nbsp;＜hr&nbsp;noshade＞<BR>17.向中对齐&nbsp;＜center＞..........＜/center＞<BR>18.依原始样式显示&nbsp;＜pre＞..........＜/pre＞<BR>19.＜body＞指令的属性&nbsp;<BR>【1】背景颜色&nbsp;--&nbsp;bgcolor&nbsp;＜body&nbsp;bgcolor=#rrggbb＞&nbsp;<BR>【2】背景图案&nbsp;--&nbsp;background&nbsp;＜body&nbsp;background="图形文件名"＞&nbsp;<BR>【3】设定背景图案不会卷动&nbsp;--&nbsp;bgproperties&nbsp;＜body&nbsp;bgproperties=fixed＞&nbsp;<BR>【4】文件内容文字的颜色&nbsp;--&nbsp;text&nbsp;＜body&nbsp;text=#rrggbb＞&nbsp;<BR>【5】超连结文字颜色&nbsp;--&nbsp;link&nbsp;＜body&nbsp;link=#rrggbb＞&nbsp;<BR>【6】正被选取的超连结文字颜色&nbsp;--&nbsp;vlink&nbsp;＜body&nbsp;vlink=#rrggbb＞&nbsp;<BR>【7】已连结过的超连结文字颜色&nbsp;--&nbsp;alink&nbsp;＜body&nbsp;alink=#rrggbb＞<BR>20.注解&nbsp;＜!--..........--＞21.特殊字元表示法&nbsp;<BR>符&nbsp;号&nbsp;　　语&nbsp;法&nbsp;&nbsp;<BR>＜&nbsp;&nbsp;　　　＆ｌｔ&nbsp;&nbsp;<BR>＞&nbsp;&nbsp;　　　＆ｇｔ&nbsp;&nbsp;<BR>&amp;&nbsp;　　&nbsp;　＆ａｍｐ&nbsp;&nbsp;<BR>"&nbsp;&nbsp;　　　＆ｑｕｏｔ&nbsp;&nbsp;<BR>空白&nbsp;&nbsp;　　＆ｎｂｓｐ&nbsp;&nbsp; </P>
<P>　</P>
<P>图片<BR>1.插入图片&nbsp;＜img&nbsp;src="图形文件名"＞<BR>2.设定图框&nbsp;--&nbsp;border&nbsp;＜img&nbsp;src="图形文件名"&nbsp;border=点数＞<BR>3.设定图形大小&nbsp;--&nbsp;widthⅱheight&nbsp;＜img&nbsp;src="图形文件名"&nbsp;width=宽度点数&nbsp;height=高度点数＞<BR>4.设定图形上下左右留空&nbsp;--&nbsp;vspaceⅱhspace&nbsp;＜img&nbsp;src="图形文件名"&nbsp;vspace=上下留空点数&nbsp;hspace=左右留空点数＞<BR>5.图形附注&nbsp;＜img&nbsp;src="图形文件名"&nbsp;alt="说明文字"＞<BR>6.预载图片<BR>＜img&nbsp;src="高解析度图形文件名"&nbsp;lowsrc="低解析度图形文件名"＞&nbsp;P.S.两个图的图形大小最好一致<BR>7.影像地图（Image&nbsp;Map）&nbsp;＜img&nbsp;src="图形文件名"&nbsp;usemap="#图的名称"＞&nbsp;＜map&nbsp;name="图的名称"＞<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;＜area&nbsp;shape=形状&nbsp;coords=区域座标列表&nbsp;href="连结点之URL"＞<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;＜area&nbsp;shape=形状&nbsp;coords=区域座标列表&nbsp;href="连结点之URL"＞<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;＜area&nbsp;shape=形状&nbsp;coords=区域座标列表&nbsp;href="连结点之URL"＞<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;＜area&nbsp;shape=形状&nbsp;coords=区域座标列表&nbsp;href="连结点之URL"＞&nbsp;&nbsp;&nbsp;&nbsp;＜/map＞&nbsp;&nbsp;&nbsp;&nbsp;<BR>【1】定义形状&nbsp;--&nbsp;shape<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shape=rect：矩形&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shape=circle：圆形&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shape=poly：多边形&nbsp;&nbsp;&nbsp;&nbsp;<BR>【2】定义区域&nbsp;--&nbsp;coords<BR>a.矩形：必须使用四个数字，前两个数字为左上角座标，后两个数字为右下角座标<BR>例：＜area&nbsp;shape=rect&nbsp;coords=100,50,200,75&nbsp;href="URL"＞<BR>b.圆形：必须使用三个数字，前两个数字为圆心的座标，最后一个数字为半径长度<BR>例：＜area&nbsp;shape=circle&nbsp;coords=85,155,30&nbsp;href="URL"＞<BR>c.任意图形（多边形）：将图形之每一转折点座标依序填入<BR>例：＜area&nbsp;shape=poly&nbsp;coords=232,70,285,70,300,90,250,90,200,78&nbsp;href="URL"＞<BR>表格<BR>1.定义表格&nbsp;＜table＞..........＜/table＞&nbsp;<BR>【1】设定边框的厚度&nbsp;--&nbsp;border<BR>＜table&nbsp;border=点数＞&nbsp;<BR>【2】设定格线的宽度&nbsp;--&nbsp;cellspacing<BR>＜table&nbsp;cellspacing=点数＞&nbsp;<BR>【3】设定资料与格线的距离&nbsp;--&nbsp;cellpadding<BR>＜table&nbsp;cellpadding=点数＞&nbsp;<BR>【4】调整表格宽度&nbsp;--&nbsp;width<BR>＜table&nbsp;width=点数或百分比＞&nbsp;<BR>【5】调整表格高度&nbsp;--&nbsp;height<BR>＜table&nbsp;height=点数或百分比＞&nbsp;<BR>【6】设定表格背景色彩&nbsp;--&nbsp;bgcolor<BR>＜table&nbsp;bgcolor=#rrggbb＞&nbsp;<BR>【7】设定表格边框色彩&nbsp;--&nbsp;bordercolor<BR>＜table&nbsp;bordercolor=#rrggbb＞<BR>2.显示格线&nbsp;＜table&nbsp;border＞<BR>3.表格标题<BR>＜caption＞..........＜/caption＞&nbsp;<BR>表格标题位置&nbsp;--&nbsp;align<BR>＜caption&nbsp;align="#"＞&nbsp;#号可为&nbsp;top：表标题置于表格上方（预设值）<BR>bottom：表标题置于表格下方<BR>4.定义列&nbsp;＜tr＞<BR>5.定义栏位&nbsp;《1》＜td＞：靠左对齐<BR>《2》＜th＞：靠中对齐ⅱ粗体&nbsp;<BR>【1】水平位置&nbsp;--&nbsp;align&nbsp;＜th&nbsp;align="#"＞<BR>#号可为&nbsp;left：向左对齐<BR>center：向中对齐&nbsp;right：向右对齐<BR>【2】垂直位置&nbsp;--&nbsp;align&nbsp;＜th&nbsp;align="#"＞&nbsp;#号可为<BR>top：向上对齐&nbsp;middle：向中对齐<BR>bottom：向下对齐&nbsp;<BR>【3】栏位宽度&nbsp;--&nbsp;width<BR>＜th&nbsp;width=点数或百分比＞&nbsp;<BR>【4】栏位垂直合并&nbsp;--&nbsp;rowspan<BR>＜th&nbsp;rowspan=欲合并栏位数＞&nbsp;<BR>【5】栏位横向合并&nbsp;--&nbsp;colspan<BR>＜th&nbsp;colspan=欲合并栏位数＞<BR>清单<BR>一、目录式清单&nbsp;<BR>＜dir＞&nbsp;＜li＞项目1&nbsp;＜li＞项目2&nbsp;＜li＞项目3&nbsp;＜/dir＞&nbsp;P.S.目录式清单每一个项目不能超过20个字元（即10个中文字）<BR>二、选项式清单&nbsp;＜menu＞&nbsp;＜li＞项目1&nbsp;＜li＞项目2&nbsp;＜li＞项目3&nbsp;＜/menu＞<BR>三、有序号的清单&nbsp;＜ol＞&nbsp;＜li＞项目1&nbsp;＜li＞项目2&nbsp;＜li＞项目3&nbsp;＜/ol＞&nbsp;<BR>【1】序号形式&nbsp;--&nbsp;type&nbsp;＜ol&nbsp;type=#＞或＜li&nbsp;type=#＞&nbsp;#号可为&nbsp;A：表以大写英文字母AⅱBⅱCⅱD...做为项目编号&nbsp;a：表以小写英文字母aⅱbⅱcⅱd...做为项目编号&nbsp;I：表以大写罗马数字做为项目编号&nbsp;i：表以小写罗马数字做为项目编号&nbsp;1：表以阿拉伯数字做为项目编号（预设值）&nbsp;<BR>【2】起始数字&nbsp;--&nbsp;start&nbsp;＜ol&nbsp;start=欲开始计数的序数＞&nbsp;<BR>【3】指定编号&nbsp;--&nbsp;<I>value</I>&nbsp;＜li&nbsp;<I>value</I>=欲指定的序数＞<BR>四、无序号的清单&nbsp;＜ul＞&nbsp;＜li＞项目1&nbsp;＜li＞项目2&nbsp;＜li＞项目3&nbsp;＜/ul＞&nbsp;<BR>【1】项目符号形式&nbsp;--&nbsp;type&nbsp;＜ul&nbsp;type=#＞或＜li&nbsp;type=#＞&nbsp;#号可为&nbsp;disc：实心圆点（预设值）&nbsp;circle：空心圆点&nbsp;square：实心方块&nbsp;<BR>【2】原始清单&nbsp;--&nbsp;plain&nbsp;＜ul&nbsp;plain＞&nbsp;<BR>【3】清单排列方式&nbsp;--&nbsp;warp&nbsp;《1》清单垂直排列&nbsp;＜ul&nbsp;warp&nbsp;=&nbsp;vert＞&nbsp;《2》清单水平排列&nbsp;＜ul&nbsp;warp&nbsp;=&nbsp;horiz＞<BR>五、定义式清单&nbsp;＜dl＞&nbsp;＜dt＞项目1&nbsp;＜dd＞项目1说明&nbsp;＜dt＞项目2&nbsp;＜dd＞项目2说明&nbsp;＜dt＞项目3&nbsp;＜dd＞项目3说明&nbsp;＜/dl＞&nbsp;<BR>紧密排列&nbsp;--&nbsp;compact&nbsp;＜dl&nbsp;compact＞&nbsp;P.S.如此可使＜dt＞的内容与＜dd＞的内容在同一行，仅&nbsp;以数格空白相隔而不换行，但若＜dt＞的文字超过一&nbsp;定的长度后，compact的作用就消失了！<BR>表单<BR>一、基本架构&nbsp;＜form&nbsp;action="处理资料用的CGI程式之URL"或"mailto:电子信箱的URL"&nbsp;method="get或post"＞&nbsp;..........&nbsp;..........&nbsp;..........&nbsp;＜/form＞&nbsp;<BR>二、输入文件型表单&nbsp;＜form&nbsp;action="URL"&nbsp;method="post"＞&nbsp;＜input＞&nbsp;＜input＞&nbsp;..........&nbsp;..........&nbsp;＜/form＞&nbsp;<BR>【1】栏位类型&nbsp;--&nbsp;type&nbsp;＜input&nbsp;type=#＞&nbsp;#号可为&nbsp;text：文字输入&nbsp;password：密码&nbsp;checkbox：多选钮&nbsp;radio：单选钮&nbsp;submit：接受按钮&nbsp;reset：重设按钮&nbsp;image：图形钮&nbsp;hidden：隐藏栏位&nbsp;<BR>【2】栏位名称&nbsp;--&nbsp;name&nbsp;＜input&nbsp;name="资料栏名"＞&nbsp;P.S.若type为submitⅱreset则name不必设定&nbsp;<BR>【3】文件上的预设值&nbsp;--&nbsp;<I>value</I>&nbsp;＜input&nbsp;<I>value</I>="预设之字串"＞&nbsp;<BR>【4】设定栏位的宽度&nbsp;--&nbsp;size&nbsp;＜input&nbsp;size=字元数＞&nbsp;<BR>【5】限制最大输入字串的长度&nbsp;--&nbsp;maxlength&nbsp;＜input&nbsp;maxlength=字元数＞&nbsp;<BR>【6】预设checkbox或radio的初值&nbsp;--&nbsp;checked&nbsp;＜input&nbsp;type=checkbox&nbsp;checked＞&nbsp;＜input&nbsp;type=radio&nbsp;checked＞&nbsp;<BR>【7】指定图形的URL&nbsp;--&nbsp;src&nbsp;＜input&nbsp;type=image&nbsp;src="图档名"＞&nbsp;<BR>【8】图文对齐&nbsp;--&nbsp;align&nbsp;＜input&nbsp;type=image&nbsp;align="#"＞&nbsp;#号可为&nbsp;top：文字对齐图片之顶端&nbsp;middle：文字对齐图片之中间&nbsp;buttom：文字对齐图片之底部<BR>三、选择式表单&nbsp;＜form&nbsp;action="URL"&nbsp;method="post"＞&nbsp;＜select＞&nbsp;＜option＞&nbsp;＜option＞&nbsp;..........&nbsp;..........&nbsp;＜/select＞&nbsp;＜/form＞&nbsp;<BR>A、＜select＞的属性&nbsp;<BR>【1】栏位名称&nbsp;--&nbsp;name&nbsp;＜select&nbsp;name="资料栏位名"＞&nbsp;<BR>【2】设定显示的选项数&nbsp;--&nbsp;size&nbsp;＜select&nbsp;size=个数＞&nbsp;<BR>【3】多重选项&nbsp;--&nbsp;multiple&nbsp;＜select&nbsp;multiple＞&nbsp;<BR>B、＜option＞的属性&nbsp;<BR>【1】定义选项的传回值&nbsp;--&nbsp;<I>value</I>&nbsp;＜option&nbsp;<I>value</I>="传回值"＞&nbsp;<BR>【2】预先选取的选项&nbsp;--&nbsp;selected&nbsp;＜option&nbsp;selected＞<BR>四、多列输入文字区表单&nbsp;＜form&nbsp;action="URL"&nbsp;method="post"＞&nbsp;＜textarea＞&nbsp;..........&nbsp;..........&nbsp;＜/textarea＞&nbsp;＜/form＞&nbsp;<BR>【1】文字区的变数名称&nbsp;--&nbsp;name&nbsp;＜textarea&nbsp;name=变数名称＞&nbsp;<BR>【2】设定文字输入区宽度&nbsp;--&nbsp;cols&nbsp;＜textarea&nbsp;cols=字元数＞&nbsp;<BR>【3】设定文字输入区高度&nbsp;--&nbsp;rows&nbsp;＜textarea&nbsp;rows=列数＞&nbsp;<BR>【4】输入区设定预设字串&nbsp;＜textarea＞&nbsp;预设文字&nbsp;＜/textarea＞&nbsp;<BR>【5】自动换行与否&nbsp;--&nbsp;wrap&nbsp;＜textarea&nbsp;wrap=#＞&nbsp;#号可为&nbsp;off：表输入的文字超过栏宽时，不会自动换行（预设值）&nbsp;virtual：表输入的文字在超过栏宽时会自动换行<BR>链接<BR>一、连结至其他文件&nbsp;＜a&nbsp;href="URL"＞说明文字或图片＜/a＞<BR>二、连结至文件内之某一处（外部连结）&nbsp;<BR>《1》起点<BR>＜a&nbsp;href="档名#名称"＞..........＜/a＞&nbsp;<BR>《2》终点&nbsp;＜a&nbsp;name="名称"＞<BR>三、frame的超连结&nbsp;<BR>【1】开启新的浏览器来显示连结文件&nbsp;--&nbsp;_blank&nbsp;＜a&nbsp;href="URL"&nbsp;target=_blank＞<BR>【2】显示连结文件於目前的frame&nbsp;--&nbsp;_self&nbsp;＜a&nbsp;href="URL"&nbsp;target=_self＞<BR>【3】以上一层的分割视窗显示连结文件&nbsp;--&nbsp;_parent&nbsp;＜a&nbsp;href="URL"&nbsp;target=_parent＞<BR>【4】以全视窗显示连结文件&nbsp;--&nbsp;_top&nbsp;＜a&nbsp;href="URL"&nbsp;target=_top＞&nbsp;<BR>【5】以特定视窗显示连结文件&nbsp;--＜a&nbsp;href="URL"&nbsp;target="特定视窗名称"＞<BR>FRAME<BR>一、分割视窗指令&nbsp;＜frameset＞..........＜/frameset＞&nbsp;<BR>【1】垂直（上下）分割&nbsp;--&nbsp;rows<BR>＜frameset&nbsp;rows=#＞&nbsp;#号可为点数：如欲分割为100,200,300三个视窗，则<BR>＜frameset&nbsp;rows=100,200,300＞；亦可以*号代表，如＜frameset&nbsp;rows=*,500,*＞<BR>百分比：如＜frameset&nbsp;rows=30%,70%＞，各&nbsp;项总和最好为100%<BR>【2】水平（左右）分割&nbsp;--&nbsp;cols&nbsp;＜frameset&nbsp;cols=点数或百分比＞<BR>二ⅱ指定视窗内容&nbsp;--&nbsp;＜frame＞<BR>＜frameset&nbsp;cols=30%,70%＞&nbsp;&nbsp;&nbsp;&nbsp;＜frame＞&nbsp;&nbsp;&nbsp;&nbsp;＜frame＞&nbsp;＜/frameset＞<BR>【1】指定视窗的文件名称&nbsp;--&nbsp;src&nbsp;＜frame&nbsp;src=HTML档名＞&nbsp;<BR>【2】定义视窗的名称&nbsp;--&nbsp;name<BR>＜frame&nbsp;name=视窗名称＞&nbsp;<BR>【3】设定文件与上下边框的距离&nbsp;--&nbsp;marginheight<BR>＜frame&nbsp;marginheight=点数＞&nbsp;<BR>【4】设定文件与左右边框的距离&nbsp;--&nbsp;marginwidth<BR>＜frame&nbsp;marginwidth=点数＞&nbsp;<BR>【5】设定分割视窗卷轴&nbsp;--&nbsp;scrolling<BR>＜frame&nbsp;scrolling=#＞&nbsp;#号可为&nbsp;yes：固定出现卷轴<BR>no：不出现卷轴&nbsp;auto：自动判断文件大小需不需要卷轴（预设值）<BR>【6】锁住分割视窗的大小&nbsp;--&nbsp;noresize&nbsp;＜frame&nbsp;noresize＞ </P><img src ="http://www.blogjava.net/wangyugod/aggbug/20245.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangyugod/" target="_blank">船夫</a> 2005-11-17 15:21 <a href="http://www.blogjava.net/wangyugod/archive/2005/11/17/20245.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>