﻿<?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-狂淘网-文章分类-jsp项目 传到服务器问题</title><link>http://www.blogjava.net/wangbbs2007/category/41342.html</link><description>www.kuangtao.net</description><language>zh-cn</language><lastBuildDate>Tue, 19 Jan 2010 09:55:31 GMT</lastBuildDate><pubDate>Tue, 19 Jan 2010 09:55:31 GMT</pubDate><ttl>60</ttl><item><title>从request获取各种路径总结</title><link>http://www.blogjava.net/wangbbs2007/articles/309890.html</link><dc:creator>狂淘网</dc:creator><author>狂淘网</author><pubDate>Sun, 17 Jan 2010 13:25:00 GMT</pubDate><guid>http://www.blogjava.net/wangbbs2007/articles/309890.html</guid><wfw:comment>http://www.blogjava.net/wangbbs2007/comments/309890.html</wfw:comment><comments>http://www.blogjava.net/wangbbs2007/articles/309890.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbbs2007/comments/commentRss/309890.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbbs2007/services/trackbacks/309890.html</trackback:ping><description><![CDATA[从request获取各种路径总结 <br />
request.getRealPath("url");//虚拟目录映射为实际目录 <br />
request.getRealPath("./");//网页所在的目录 <br />
request.getRealPath("../");//网页所在目录的上一层目录 <br />
<br />
request.getContextPath();//应用的web目录的名称 <br />
&nbsp;&nbsp; 如http://localhost:7001/bookStore/&nbsp; <br />
&nbsp;&nbsp;&nbsp; /bookStore/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt;&nbsp; [contextPath]&nbsp; (request.getContextPath()) <br />
<br />
获取Web项目的全路径 <br />
String strDirPath = request.getSession().getServletContext().getRealPath("/"); <br />
<a href="http://www.kuangtao.net">www.kuangtao.net</a>&nbsp; 狂涛购物网<img src ="http://www.blogjava.net/wangbbs2007/aggbug/309890.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbbs2007/" target="_blank">狂淘网</a> 2010-01-17 21:25 <a href="http://www.blogjava.net/wangbbs2007/articles/309890.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jsp生成静态页面 </title><link>http://www.blogjava.net/wangbbs2007/articles/299006.html</link><dc:creator>狂淘网</dc:creator><author>狂淘网</author><pubDate>Tue, 20 Oct 2009 04:25:00 GMT</pubDate><guid>http://www.blogjava.net/wangbbs2007/articles/299006.html</guid><wfw:comment>http://www.blogjava.net/wangbbs2007/comments/299006.html</wfw:comment><comments>http://www.blogjava.net/wangbbs2007/articles/299006.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbbs2007/comments/commentRss/299006.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbbs2007/services/trackbacks/299006.html</trackback:ping><description><![CDATA[<p>为了减轻服务器压力，将原来的文章管理系统由JSP文件的从数据库中取数据显示改为由jsp生成静态html文件后直接访问html文件。首先应创建一个模板文件，文件名和文件后缀可以随意，但我一般常用的还是 *.template ，因此，这里就以 template.template 为例( 将模板文件放入 /WEB-INF/templates/ 文件夹下 )：下面是一个简单的示例</p>
<p>1.buildhtml.jsp</p>
<p>Jsp代码 <br />
&lt;%@ page contentType="text/html; charset=gb2312" import="java.util.*,java.io.*"%&gt;&nbsp;&nbsp;&nbsp; <br />
&lt;%&nbsp;&nbsp;&nbsp; <br />
try{&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; //设置字符编码&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; request.setCharacterEncoding( "gb2312" );&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; response.setCharacterEncoding( "gb2312" );&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; String title="This is Title";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; String content="This is Content Area";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; String editer="LaoMao";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; String filePath = "";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; // 获得模板文件的路径&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; filePath = request.getRealPath("/")+"test/template.htm";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; //out.print(filePath+"&lt;br&gt;");&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; String templateContent="";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; //读取模块文件&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; FileInputStream fileinputstream = new FileInputStream(filePath);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; int lenght = fileinputstream.available();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; byte bytes[] = new byte[lenght];&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; fileinputstream.read(bytes);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; fileinputstream.close();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; templateContent = new String(bytes);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; //out.print(templateContent);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; templateContent=templateContent.replaceAll("###title###",title);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; templateContent=templateContent.replaceAll("###content###",content);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; templateContent=templateContent.replaceAll("###author###",editer);//替换掉模块中相应的地方&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; //out.print(templateContent);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; // 根据时间得文件名&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; Calendar calendar = Calendar.getInstance();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; String fileame = String.valueOf(calendar.getTimeInMillis()) +".html";&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; //生成的html文件保存路径&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; fileame = request.getRealPath("/")+fileame;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; //建立文件输出流&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; FileOutputStream fileoutputstream = new FileOutputStream(fileame);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; byte tag_bytes[] = templateContent.getBytes();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; fileoutputstream.write(tag_bytes);&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; fileoutputstream.close();&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
}catch(Exception e){&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; out.print(e.toString());&nbsp;&nbsp;&nbsp; <br />
}&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
%&gt;&nbsp;&nbsp; <br />
&lt;%@ page contentType="text/html; charset=gb2312" import="java.util.*,java.io.*"%&gt;<br />
&lt;%<br />
try{<br />
&nbsp;&nbsp;&nbsp;&nbsp; //设置字符编码 <br />
&nbsp;&nbsp;&nbsp;&nbsp; request.setCharacterEncoding( "gb2312" ); <br />
&nbsp;&nbsp;&nbsp;&nbsp; response.setCharacterEncoding( "gb2312" ); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; String title="This is Title";<br />
&nbsp;&nbsp;&nbsp;&nbsp; String content="This is Content Area";<br />
&nbsp;&nbsp;&nbsp;&nbsp; String editer="LaoMao";<br />
&nbsp;&nbsp;&nbsp;&nbsp; String filePath = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp; // 获得模板文件的路径<br />
&nbsp;&nbsp;&nbsp;&nbsp; filePath = request.getRealPath("/")+"test/template.htm";<br />
&nbsp;&nbsp;&nbsp;&nbsp; //out.print(filePath+"&lt;br&gt;");<br />
&nbsp;&nbsp;&nbsp;&nbsp; String templateContent="";<br />
&nbsp;&nbsp;&nbsp;&nbsp; //读取模块文件<br />
&nbsp;&nbsp; FileInputStream fileinputstream = new FileInputStream(filePath);<br />
&nbsp;&nbsp;&nbsp;&nbsp; int lenght = fileinputstream.available();<br />
&nbsp;&nbsp;&nbsp;&nbsp; byte bytes[] = new byte[lenght];<br />
&nbsp;&nbsp;&nbsp;&nbsp; fileinputstream.read(bytes);<br />
&nbsp;&nbsp;&nbsp;&nbsp; fileinputstream.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp; templateContent = new String(bytes);<br />
&nbsp;&nbsp;&nbsp;&nbsp; //out.print(templateContent);<br />
&nbsp;&nbsp;&nbsp;&nbsp; templateContent=templateContent.replaceAll("###title###",title);<br />
&nbsp;&nbsp;&nbsp;&nbsp; templateContent=templateContent.replaceAll("###content###",content);<br />
&nbsp;&nbsp;&nbsp;&nbsp; templateContent=templateContent.replaceAll("###author###",editer);//替换掉模块中相应的地方<br />
&nbsp;&nbsp; //out.print(templateContent);<br />
&nbsp;&nbsp;&nbsp;&nbsp; // 根据时间得文件名<br />
&nbsp;&nbsp; Calendar calendar = Calendar.getInstance();<br />
&nbsp;&nbsp;&nbsp;&nbsp; String fileame = String.valueOf(calendar.getTimeInMillis()) +".html";<br />
&nbsp;&nbsp;&nbsp;&nbsp; //生成的html文件保存路径<br />
&nbsp;&nbsp; fileame = request.getRealPath("/")+fileame;<br />
&nbsp;&nbsp;&nbsp;&nbsp; //建立文件输出流<br />
&nbsp;&nbsp;&nbsp;&nbsp; FileOutputStream fileoutputstream = new FileOutputStream(fileame);<br />
&nbsp;&nbsp; byte tag_bytes[] = templateContent.getBytes();<br />
&nbsp;&nbsp;&nbsp;&nbsp; fileoutputstream.write(tag_bytes);<br />
&nbsp;&nbsp;&nbsp;&nbsp; fileoutputstream.close();</p>
<p>}catch(Exception e){<br />
&nbsp;&nbsp;&nbsp;&nbsp; out.print(e.toString());<br />
}</p>
<p><br />
%&gt;<br />
2. template.template</p>
<p>Html代码 <br />
&lt;html&gt;&nbsp;&nbsp; <br />
&lt;head&gt;&nbsp;&nbsp; <br />
&lt;title&gt;###title###&lt;/title&gt;&nbsp;&nbsp; <br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;&nbsp;&nbsp; <br />
&lt;LINK href="../css.css" rel=stylesheet type=text/css&gt;&nbsp;&nbsp; <br />
&lt;/head&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
&lt;body&gt;&nbsp;&nbsp; <br />
&lt;table width="500" border="0" align="center" cellpadding="0" cellspacing="2"&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;tr&gt;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;td align="center"&gt;###title###&lt;/td&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/tr&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;tr&gt;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;td align="center"&gt;author：###author###&amp;nbsp;&amp;nbsp;&lt;/td&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/tr&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;tr&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;td&gt;###content###&nbsp;&nbsp;&nbsp; <br />
&nbsp;&lt;/td&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; &lt;/tr&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
&lt;/table&gt;&nbsp;&nbsp; <br />
&lt;/body&gt;&nbsp;&nbsp; <br />
&lt;/html&gt;&nbsp;&nbsp; <br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;###title###&lt;/title&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br />
&lt;LINK href="../css.css" rel=stylesheet type=text/css&gt;<br />
&lt;/head&gt;</p>
<p><br />
&lt;body&gt;<br />
&lt;table width="500" border="0" align="center" cellpadding="0" cellspacing="2"&gt;<br />
&nbsp; &lt;tr&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;td align="center"&gt;###title###&lt;/td&gt;<br />
&nbsp; &lt;/tr&gt;<br />
&nbsp; &lt;tr&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;td align="center"&gt;author：###author###&amp;nbsp;&amp;nbsp;&lt;/td&gt;<br />
&nbsp; &lt;/tr&gt;<br />
&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;td&gt;###content###<br />
&nbsp;&lt;/td&gt;<br />
&nbsp;<br />
&nbsp; &lt;/tr&gt;</p>
<p>&lt;/table&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
&nbsp;为了将应用进行国际化，可以将页面的编码设为 UTF-8 </p>
<p>1.buildhtml.jsp</p>
<p>&lt;%@ page contentType="text/html; charset=gb2312" import="java.util.*,java.io.*"%&gt;<br />
&lt;%<br />
try{<br />
&nbsp;String title="This is Title";<br />
&nbsp;String content="This is Content Area";<br />
&nbsp;String editer="LaoMao";<br />
&nbsp;String filePath = "";<br />
&nbsp;filePath = request.getRealPath("/")+"test/template.htm";<br />
&nbsp;//out.print(filePath+"&lt;br&gt;");<br />
&nbsp;String templateContent="";<br />
&nbsp;FileInputStream fileinputstream = new FileInputStream(filePath);//读取模块文件<br />
&nbsp;int lenght = fileinputstream.available();<br />
&nbsp;byte bytes[] = new byte[lenght];<br />
&nbsp;fileinputstream.read(bytes);<br />
&nbsp;fileinputstream.close();<br />
&nbsp;templateContent = new String(bytes);<br />
&nbsp;//out.print(templateContent);<br />
&nbsp;templateContent=templateContent.replaceAll("###title###",title);<br />
&nbsp;templateContent=templateContent.replaceAll("###content###",content);<br />
&nbsp;templateContent=templateContent.replaceAll("###author###",editer);//替换掉模块中相应的地方<br />
&nbsp;//out.print(templateContent);<br />
&nbsp;// 根据时间得文件名<br />
&nbsp;Calendar calendar = Calendar.getInstance();<br />
&nbsp;String fileame = String.valueOf(calendar.getTimeInMillis()) +".html";<br />
&nbsp;fileame = request.getRealPath("/")+fileame;//生成的html文件保存路径<br />
&nbsp;FileOutputStream fileoutputstream = new FileOutputStream(fileame);//建立文件输出流<br />
&nbsp;byte tag_bytes[] = templateContent.getBytes();<br />
&nbsp;fileoutputstream.write(tag_bytes);<br />
&nbsp;fileoutputstream.close();<br />
}<br />
catch(Exception e){<br />
&nbsp;out.print(e.toString());<br />
}</p>
<p>%&gt;</p>
<p>2. template.htm</p>
<p>&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;###title###&lt;/title&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br />
&lt;LINK href="../css.css" rel=stylesheet type=text/css&gt;<br />
&lt;/head&gt;</p>
<p>&lt;body&gt;<br />
&lt;table width="500" border="0" align="center" cellpadding="0" cellspacing="2"&gt;<br />
&nbsp; &lt;tr&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;td align="center"&gt;###title###&lt;/td&gt;<br />
&nbsp; &lt;/tr&gt;<br />
&nbsp; &lt;tr&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;td align="center"&gt;author：###author###&amp;nbsp;&amp;nbsp;&lt;/td&gt;<br />
&nbsp; &lt;/tr&gt;<br />
&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;td&gt;###content###<br />
&nbsp;&lt;/td&gt;<br />
&nbsp;<br />
&nbsp; &lt;/tr&gt;</p>
<p>&lt;/table&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/fbysss/archive/2006/03/07/618041.aspx</p>
<p><br />
本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/hitop0609/archive/2009/09/16/4555758.aspx</p><img src ="http://www.blogjava.net/wangbbs2007/aggbug/299006.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbbs2007/" target="_blank">狂淘网</a> 2009-10-20 12:25 <a href="http://www.blogjava.net/wangbbs2007/articles/299006.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java jsp tomcat6 mysql 连接池配置</title><link>http://www.blogjava.net/wangbbs2007/articles/297504.html</link><dc:creator>狂淘网</dc:creator><author>狂淘网</author><pubDate>Fri, 09 Oct 2009 02:13:00 GMT</pubDate><guid>http://www.blogjava.net/wangbbs2007/articles/297504.html</guid><wfw:comment>http://www.blogjava.net/wangbbs2007/comments/297504.html</wfw:comment><comments>http://www.blogjava.net/wangbbs2007/articles/297504.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbbs2007/comments/commentRss/297504.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbbs2007/services/trackbacks/297504.html</trackback:ping><description><![CDATA[最近在网上看到的<font size="+0">java+<span class="hilite1">jsp</span>+ tomcat6+ mysql 连接池大多数是tomcat5 的,很多都说得不详细<br />
<br />
1.需要的文件:<font size="+0">mysql-5.0.27-win32.zip(安装文件),<font size="+0">mysql-connector-java-5.0.4-bin.jar(连接驱动程序),<font size="+0">apache-tomcat-6.0.10.exe</font>(安装文件)</font></font>
<p>2.配置tomcat下的conf下的<font size="+0">context.xml文件,在&lt;context&gt;&lt;/context&gt;之间添加连接池如下:</font> </p>
<p class="alt"><span><span class="tag">&lt;</span><span class="tag-name">Resource</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">"jdbc/mysql"</span><span>&nbsp;&nbsp;</span></span> </p>
<p class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">auth</span><span>=</span><span class="attribute-value">"Container"</span><span>&nbsp;&nbsp;</span> </p>
<p class="alt"><span>&nbsp;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">"javax.sql.DataSource"</span><span>&nbsp;&nbsp;</span> </p>
<p class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span class="attribute">driverClassName</span><span>=</span><span class="attribute-value">"com.mysql.jdbc.Driver"</span><span>&nbsp;&nbsp;</span>&nbsp;<br />
<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">url</span><span>=</span><span class="attribute-value">"jdbc:mysql://localhost/test"</span><span>&nbsp;&nbsp;</span> </p>
<p class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">username</span><span>=</span><span class="attribute-value">"root"</span><span>&nbsp;&nbsp;</span> </p>
<p class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">password</span><span>=</span><span class="attribute-value">"root"</span><span>&nbsp;&nbsp;</span> </p>
<p class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">maxActive</span><span>=</span><span class="attribute-value">"100"</span><span>&nbsp;&nbsp;</span> </p>
<p class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">maxIdle</span><span>=</span><span class="attribute-value">"30"</span><span>&nbsp;&nbsp;</span> </p>
<p class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">maxWait</span><span>=</span><span class="attribute-value">"10000"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </p>
<p class="alt">3.配置你的应用下的web.xml中的<font size="+0">&lt;web-app&gt;<font size="+0">&lt;/web-app&gt;之间</font></font>加入:&nbsp; xml 代码<br />
<br />
</p>
<p class="alt"><span><span class="tag">&lt;</span><span class="tag-name">resource-ref</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </p>
<p class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">description</span><span class="tag">&gt;</span><span>DB&nbsp;Connection</span><span class="tag">&lt;/</span><span class="tag-name">description</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </p>
<p class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">res-ref-name</span><span class="tag">&gt;</span><span>jdbc/mysqlx</span><span class="tag">&lt;/</span><span class="tag-name">res-ref-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </p>
<p class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">res-type</span><span class="tag">&gt;</span><span>javax.sql.DataSource</span><span class="tag">&lt;/</span><span class="tag-name">res-type</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </p>
<p class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">res-auth</span><span class="tag">&gt;</span><span>Container</span><span class="tag">&lt;/</span><span class="tag-name">res-auth</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </p>
<p class=""><span>&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">resource-ref</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></p>
<span>
<p>4.大功告成,不用在原来的server.xml里面配置了,下面就可以编写测试程序了,这个网上就很多了,主要的就上面,当然要把连接驱动程序都放到<span style="color: #ff0000">tomcat6下的lib</span>下面.测试代码如下:<br />
</p>
<div class="code_title"><br />
java 代码<br />
<br />
<br />
<li class="alt"><span><span>&lt;!doctype&nbsp;html&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="string">"-//w3c//dtd&nbsp;html&nbsp;4.0&nbsp;transitional//en"</span><span>&nbsp; &nbsp;&nbsp;</span></span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span><span class="string">"http://www.w3.org/TR/REC-html40/strict.dtd"</span><span>&gt; &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&lt;%@&nbsp;page&nbsp;</span><span class="keyword">import</span><span>=</span><span class="string">"java.sql.*"</span><span>%&gt; &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&lt;%@&nbsp;page&nbsp;</span><span class="keyword">import</span><span>=</span><span class="string">"javax.sql.*"</span><span>%&gt; &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&lt;%@&nbsp;page&nbsp;</span><span class="keyword">import</span><span>=</span><span class="string">"javax.naming.*"</span><span>%&gt; &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&lt;%@&nbsp;page&nbsp;session=</span><span class="string">"false"</span><span>&nbsp;%&gt; &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&lt;html&gt; &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&lt;head&gt; &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&lt;meta&nbsp;http-equiv=</span><span class="string">"Content-Type"</span><span>&nbsp;content=</span><span class="string">"text/html;&nbsp;charset=gb2312"</span><span>&gt; &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&lt;title&gt;&lt;/title&gt; &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&lt;%&nbsp; &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;out.print(</span><span class="string">"我的测试开始"</span><span>); &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;DataSource&nbsp;ds&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>{ &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;InitialContext&nbsp;ctx=</span><span class="keyword">new</span><span>&nbsp;InitialContext(); &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;ds=(DataSource)ctx.lookup(</span><span class="string">"java:comp/env/jdbc/mysql"</span><span>); &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;Connection&nbsp;conn&nbsp;=&nbsp;ds.getConnection(); &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;Statement&nbsp;stmt&nbsp;=&nbsp;conn.createStatement(); &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//提示：users必须是数据库已有的表， </span><span>&nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span><span class="comment">//这里的数据库前文提及的Data&nbsp;Source&nbsp;URL配置里包含的数据库。 </span><span>&nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;String&nbsp;strSql&nbsp;=&nbsp;</span><span class="string">"&nbsp;select&nbsp;*&nbsp;from&nbsp;users"</span><span>; &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;ResultSet&nbsp;rs&nbsp;=&nbsp;stmt.executeQuery(strSql); &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>(rs.next()){ &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print(rs.getString(</span><span class="number">1</span><span>));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>out.print(</span><span class="string">"我的测试结束"</span><span>); &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="keyword">catch</span><span>(Exception&nbsp;ex){ &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print(&#8220;出现例外，信息是:&#8221;+ex.getMessage()); &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace(); &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>%&gt; &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&lt;/head&gt; &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&lt;body&gt; &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&lt;/body&gt; &nbsp;&nbsp;</span>
<li class=""><span>&nbsp;&nbsp;</span>
<li class="alt"><span>&lt;/html&gt; &nbsp;&nbsp;</span> </li>
</span></span></div>
</span></font><img src ="http://www.blogjava.net/wangbbs2007/aggbug/297504.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbbs2007/" target="_blank">狂淘网</a> 2009-10-09 10:13 <a href="http://www.blogjava.net/wangbbs2007/articles/297504.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HashMap和Hashtable的区别 </title><link>http://www.blogjava.net/wangbbs2007/articles/295800.html</link><dc:creator>狂淘网</dc:creator><author>狂淘网</author><pubDate>Mon, 21 Sep 2009 02:23:00 GMT</pubDate><guid>http://www.blogjava.net/wangbbs2007/articles/295800.html</guid><wfw:comment>http://www.blogjava.net/wangbbs2007/comments/295800.html</wfw:comment><comments>http://www.blogjava.net/wangbbs2007/articles/295800.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbbs2007/comments/commentRss/295800.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbbs2007/services/trackbacks/295800.html</trackback:ping><description><![CDATA[<p>1 HashMap不是线程安全的 </p>
<br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hastmap是一个接口 是map接口的子接口，是将键映射到值的对象，其中键和值都是对象，并且不能包含重复键，但可以包含重复值。HashMap允许null key和null value，而hashtable不允许。</p>
<br />
<p>2&nbsp;&nbsp; HashTable是线程安全的一个Collection。</p>
<br />
<p>HashMap是Hashtable的轻量级实现（非线程安全的实现），他们都完成了Map接口，主要区别在于HashMap允许空（null）键值（key）,由于非线程安全，效率上可能高于Hashtable。<br />
HashMap允许将null作为一个entry的key或者value，而Hashtable不允许。<br />
HashMap把Hashtable的contains方法去掉了，改成containsvalue和containsKey。因为contains方法容易让人引起误解。 <br />
Hashtable继承自Dictionary类，而HashMap是Java1.2引进的Map interface的一个实现。<br />
最大的不同是，Hashtable的方法是Synchronize的，而HashMap不是，在多个线程访问Hashtable时，不需要自己为它的方法实现同步，而HashMap 就必须为之提供外同步。 <br />
Hashtable和HashMap采用的hash/rehash算法都大概一样，所以性能不会有很大的差异。</p>
<br />
<p>public static void main(String args[])<br />
{<br />
HashTable h=new HashTable();<br />
h.put("用户1",new Integer(90));<br />
h.put("用户2",new Integer(50));<br />
h.put("用户3",new Integer(60));<br />
h.put("用户4",new Integer(70));<br />
h.put("用户5",new Integer(80));<br />
Enumeration e=h.elements();<br />
while(e.hasMoreElements()){<br />
System.out.println(e.nextElement());<br />
}</p>
<br />
<p>map 的方法：</p>
<br />
<p style="text-indent: 2em">clear()从 Map 中删除所有映射</p>
<br />
<p style="text-indent: 2em">remove(Object key)从 Map 中删除键和关联的值</p>
<br />
<p style="text-indent: 2em"></p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; put(Object key, Object value)将指定值与指定键相关联 <br />
<p style="text-indent: 2em">get(Object key)返回与指定键关联的值</p>
<br />
<p style="text-indent: 2em"></p>
containsKey(Object key)如果 Map 包含指定键的映射，则返回 true <br />
<p>&nbsp;</p>
<br />
<p>&nbsp;</p>
<br />
<p style="text-indent: 2em">containsValue(Object value)如果此 Map 将一个或多个键映射到指定值，则返回 true</p>
<br />
<p style="text-indent: 2em">isEmpty()如果 Map 不包含键-值映射，则返回 true size()返回 Map 中的键-值映射的数目</p>
<br />
<br />
<p style="text-indent: 2em"></p>
<br />
<br />
<p style="margin: 0cm 0cm 0pt"><font size="3"><span twffan="done">这些都代表了</span><span twffan="done"><font face="Times New Roman">Java</font></span><span twffan="done">中的集合，这里主要从其元素是否有序，是否可重复来进行区别记忆，以便恰当地使用，当然还存在同步方面的差异，见上一篇相关文章。</span></font></p>
<br />
<p style="margin: 0cm 0cm 0pt"></p>
<br />
<table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 110.15pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="147" colspan="2"><br />
            <p style="margin: 0cm 0cm 0pt"></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; border-left-color: rgb(212,208,200); padding-bottom: 0cm; width: 183.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="245"><br />
            <p style="margin: 0cm 0cm 0pt"><span twffan="done"><font size="3">有序否</font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; border-left-color: rgb(212,208,200); padding-bottom: 0cm; width: 132.25pt; padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="176"><br />
            <p style="margin: 0cm 0cm 0pt"><span twffan="done"><font size="3">允许元素重复否</font></span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 110.15pt; border-top-color: rgb(212,208,200); padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="147" colspan="2"><br />
            <p style="margin: 0cm 0cm 0pt"><span twffan="done"><font face="Times New Roman" size="3">Collection</font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: rgb(212,208,200); padding-bottom: 0cm; width: 183.7pt; border-top-color: rgb(212,208,200); padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="245"><br />
            <p style="margin: 0cm 0cm 0pt"><span twffan="done"><font size="3">否</font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: rgb(212,208,200); padding-bottom: 0cm; width: 132.25pt; border-top-color: rgb(212,208,200); padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="176"><br />
            <p style="margin: 0cm 0cm 0pt"><span twffan="done"><font size="3">是</font></span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 110.15pt; border-top-color: rgb(212,208,200); padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="147" colspan="2"><br />
            <p style="margin: 0cm 0cm 0pt"><span twffan="done"><font face="Times New Roman" size="3">List</font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: rgb(212,208,200); padding-bottom: 0cm; width: 183.7pt; border-top-color: rgb(212,208,200); padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="245"><br />
            <p style="margin: 0cm 0cm 0pt"><span twffan="done"><font size="3">是</font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: rgb(212,208,200); padding-bottom: 0cm; width: 132.25pt; border-top-color: rgb(212,208,200); padding-top: 0cm; border-bottom: windowtext 1pt solid; background-color: transparent" valign="top" width="176"><br />
            <p style="margin: 0cm 0cm 0pt"><span twffan="done"><font size="3">是</font></span></p>
            </td>
        </tr>
        <tr style="height: 5.25pt">
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 41.75pt; border-top-color: rgb(212,208,200); padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 5.25pt; background-color: transparent" width="56" rowspan="3"><br />
            <p style="margin: 0cm 0cm 0pt"><span twffan="done"><font face="Times New Roman" size="3">Set</font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: rgb(212,208,200); padding-bottom: 0cm; width: 68.4pt; border-top-color: rgb(212,208,200); padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 5.25pt; background-color: transparent" valign="top" width="91"><br />
            <p style="margin: 0cm 0cm 0pt"><span twffan="done"><font face="Times New Roman" size="3">AbstractSet</font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: rgb(212,208,200); padding-bottom: 0cm; width: 183.7pt; border-top-color: rgb(212,208,200); padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 5.25pt; background-color: transparent" width="245" rowspan="2"><br />
            <p style="margin: 0cm 0cm 0pt"><span twffan="done"><font size="3">否</font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: rgb(212,208,200); padding-bottom: 0cm; width: 132.25pt; border-top-color: rgb(212,208,200); padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 5.25pt; background-color: transparent" width="176" rowspan="3"><br />
            <p style="margin: 0cm 0cm 0pt"><span twffan="done"><font size="3">否</font></span></p>
            </td>
        </tr>
        <tr style="height: 5.25pt">
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: rgb(212,208,200); padding-bottom: 0cm; width: 68.4pt; border-top-color: rgb(212,208,200); padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 5.25pt; background-color: transparent" valign="top" width="91"><br />
            <p style="margin: 0cm 0cm 0pt"><span twffan="done"><font face="Times New Roman" size="3">HashSet</font></span></p>
            </td>
        </tr>
        <tr style="height: 5.25pt">
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: rgb(212,208,200); padding-bottom: 0cm; width: 68.4pt; border-top-color: rgb(212,208,200); padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 5.25pt; background-color: transparent" valign="top" width="91"><br />
            <p style="margin: 0cm 0cm 0pt"><span twffan="done"><font face="Times New Roman" size="3">TreeSet</font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: rgb(212,208,200); padding-bottom: 0cm; width: 183.7pt; border-top-color: rgb(212,208,200); padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 5.25pt; background-color: transparent" valign="top" width="245"><br />
            <p style="margin: 0cm 0cm 0pt"><span twffan="done"><font size="3">是（用二叉树排序）</font></span></p>
            </td>
        </tr>
        <tr style="height: 5.25pt">
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 41.75pt; border-top-color: rgb(212,208,200); padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 5.25pt; background-color: transparent" valign="top" width="56" rowspan="3"><br />
            <p style="margin: 0cm 0cm 0pt"><span twffan="done"><font face="Times New Roman" size="3">Map</font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: rgb(212,208,200); padding-bottom: 0cm; width: 68.4pt; border-top-color: rgb(212,208,200); padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 5.25pt; background-color: transparent" valign="top" width="91"><br />
            <p style="margin: 0cm 0cm 0pt"><span twffan="done"><font face="Times New Roman" size="3">AbstractMap</font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: rgb(212,208,200); padding-bottom: 0cm; width: 183.7pt; border-top-color: rgb(212,208,200); padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 5.25pt; background-color: transparent" width="245" rowspan="2"><br />
            <p style="margin: 0cm 0cm 0pt"><span twffan="done"><font size="3">否</font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: rgb(212,208,200); padding-bottom: 0cm; width: 132.25pt; border-top-color: rgb(212,208,200); padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 5.25pt; background-color: transparent" valign="top" width="176" rowspan="3"><br />
            <p style="margin: 0cm 0cm 0pt"><font size="3"><span twffan="done">使用</span><span twffan="done"><font face="Times New Roman">key-value</font></span><span twffan="done">来映射和存储数据，</span><span twffan="done"><font face="Times New Roman">Key</font></span><span twffan="done">必须惟一，</span><span twffan="done"><font face="Times New Roman">value</font></span><span twffan="done">可以重复</span></font></p>
            </td>
        </tr>
        <tr style="height: 5.25pt">
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: rgb(212,208,200); padding-bottom: 0cm; width: 68.4pt; border-top-color: rgb(212,208,200); padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 5.25pt; background-color: transparent" valign="top" width="91"><br />
            <p style="margin: 0cm 0cm 0pt"><span twffan="done"><font face="Times New Roman" size="3">HashMap</font></span></p>
            </td>
        </tr>
        <tr style="height: 5.25pt">
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: rgb(212,208,200); padding-bottom: 0cm; width: 68.4pt; border-top-color: rgb(212,208,200); padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 5.25pt; background-color: transparent" valign="top" width="91"><br />
            <p style="margin: 0cm 0cm 0pt"><span twffan="done"><font face="Times New Roman" size="3">TreeMap</font></span></p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: rgb(212,208,200); padding-bottom: 0cm; width: 183.7pt; border-top-color: rgb(212,208,200); padding-top: 0cm; border-bottom: windowtext 1pt solid; height: 5.25pt; background-color: transparent" valign="top" width="245"><br />
            <p style="margin: 0cm 0cm 0pt"><span twffan="done"><font size="3">是（用二叉树排序）</font></span></p>
            </td>
        </tr>
    </tbody>
</table>
<br />
<p>&nbsp;</p>
<p>&nbsp;</p>
<br />
<p>&nbsp;</p>
<br />
<p>List 接口对Collection进行了简单的扩充，它的具体实现类常用的有ArrayList和LinkedList。你可以将任何东西放到一个List容器中，并在需要时从中取出。ArrayList从其命名中可以看出它是一种类似数组的形式进行存储，因此它的随机访问速度极快，而LinkedList的内部实现是链表，它适合于在链表中间需要频繁进行插入和删除操作。在具体应用时可以根据需要自由选择。前面说的Iterator只能对容器进行向前遍历，而 ListIterator则继承了Iterator的思想，并提供了对List进行双向遍历的方法。 <br />
<br />
Set接口也是 Collection的一种扩展，而与List不同的时，在Set中的对象元素不能重复，也就是说你不能把同样的东西两次放入同一个Set容器中。它的常用具体实现有HashSet和TreeSet类。HashSet能快速定位一个元素，但是你放到HashSet中的对象需要实现hashCode()方法，它使用了前面说过的哈希码的算法。而TreeSet则将放入其中的元素按序存放，这就要求你放入其中的对象是可排序的，这就用到了集合框架提供的另外两个实用类Comparable和Comparator。一个类是可排序的，它就应该实现Comparable接口。有时多个类具有相同的排序算法，那就不需要在每分别重复定义相同的排序算法，只要实现Comparator接口即可。集合框架中还有两个很实用的公用类：Collections和 Arrays。Collections提供了对一个Collection容器进行诸如排序、复制、查找和填充等一些非常有用的方法，Arrays则是对一个数组进行类似的操作。 <br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map是一种把键对象和值对象进行关联的容器，而一个值对象又可以是一个Map，依次类推，这样就可形成一个多级映射。对于键对象来说，像Set一样，一个Map容器中的键对象不允许重复，这是为了保持查找结果的一致性;如果有两个键对象一样，那你想得到那个键对象所对应的值对象时就有问题了，可能你得到的并不是你想的那个值对象，结果会造成混乱，所以键的唯一性很重要，也是符合集合的性质的。当然在使用过程中，某个键所对应的值对象可能会发生变化，这时会按照最后一次修改的值对象与键对应。对于值对象则没有唯一性的要求。你可以将任意多个键都映射到一个值对象上，这不会发生任何问题（不过对你的使用却可能会造成不便，你不知道你得到的到底是那一个键所对应的值对象）。Map有两种比较常用的实现： HashMap和TreeMap。HashMap也用到了哈希码的算法，以便快速查找一个键，TreeMap则是对键按序存放，因此它便有一些扩展的方法，比如firstKey(),lastKey()等，你还可以从TreeMap中指定一个范围以取得其子Map。键和值的关联很简单，用pub (Object key,Object value)方法即可将一个键与一个值对象相关联。用get(Object key)可得到与此key对象所对应的值对象。</p>
<p>&nbsp;</p><img src ="http://www.blogjava.net/wangbbs2007/aggbug/295800.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbbs2007/" target="_blank">狂淘网</a> 2009-09-21 10:23 <a href="http://www.blogjava.net/wangbbs2007/articles/295800.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsp乱码问题</title><link>http://www.blogjava.net/wangbbs2007/articles/294918.html</link><dc:creator>狂淘网</dc:creator><author>狂淘网</author><pubDate>Sun, 13 Sep 2009 02:49:00 GMT</pubDate><guid>http://www.blogjava.net/wangbbs2007/articles/294918.html</guid><wfw:comment>http://www.blogjava.net/wangbbs2007/comments/294918.html</wfw:comment><comments>http://www.blogjava.net/wangbbs2007/articles/294918.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbbs2007/comments/commentRss/294918.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbbs2007/services/trackbacks/294918.html</trackback:ping><description><![CDATA[<p>1.JSP与页面参数之间的乱码 </p>
<p>　　JSP获取页面参数时一般采用系统默认的编码方式，如果页面参数的编码类型和系统默认的编码类型不一致，很可能就会出现乱码。解决这类乱码问题的基本方法是在页面获取参数之前，强制指定</p>
<p>request获取参数的编码方式：request.setCharacterEncoding("GBK")或request.setCharacterEncoding("gb2312")。 </p>
<p>　servlet 　如果在JSP将变量输出到页面时出现了乱码，可以通过设置response.setContentType("text/html;charset=GBK")或response.setContentType("text/html;charset=gb2312")解决。</p>
<p><br />
----------------------------------<br />
2、数据库乱码<br />
　　这种乱码会使你插入数据库的中文变成乱码，或者读出显示时也是乱码，解决方法如下：<br />
　　在数据库连接字符串中加入编码字符集<br />
　　String Url="jdbc:mysql://localhost/digitgulf?user=root&amp;password=root&amp;useUnicode=true&amp;characterEncoding=GB2312";<br />
　　并在页面中使用如下代码：<br />
　　response.setContentType("text/html;charset=gb2312");<br />
　　request.setCharacterEncoding("gb2312");</p>
<p>3.中文作为参数传递乱码<br />
　　当我们把一段中文字符作为参数传递个另一页面时，也会出现乱码情况，解决方法如下：<br />
　　在参数传递时对参数编码，比如<br />
　　RearshRes.jsp?keywords=" + java.net.URLEncoder.encode(keywords)<br />
　　然后在接收参数页面使用如下语句接收<br />
　　keywords=new String(request.getParameter("keywords").getBytes("8859_1"));</p>
<p>4.JSP中文乱码问题之四：Get方式表单传递和URI方式传递参数乱码</p>
<p>解决方案</p>
<p>apache-tomcat-6.0.18\conf\server.xml</p>
<p>在这个内加入一行</p>
<p>&lt; Connector port="8080" protocol="HTTP/1.1"&nbsp;&nbsp;&nbsp;&nbsp; connectionTimeout="20000"&nbsp;&nbsp;&nbsp;&nbsp; redirectPort="8443"&nbsp; URIEncoding="GBK" /&gt; </p>
<p>5.在b.jsp中把String name=request.getParameter("name");修改为</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String name=new String(request.getParameter("name").getBytes("ISO-8859-1"),"GB2312");</p>
<p>6.JSP中文乱码问题更好的解决方法是使用过滤器技术</p>
<p>Encoding过滤器</p>
<p>package com.htt;&nbsp;&nbsp; import java.io.IOException;&nbsp;&nbsp; import javax.servlet.Filter;&nbsp;&nbsp; import javax.servlet.FilterChain;&nbsp;&nbsp; import javax.servlet.FilterConfig;&nbsp;&nbsp; import </p>
<p>javax.servlet.ServletException;&nbsp;&nbsp; import javax.servlet.ServletRequest;&nbsp;&nbsp; import javax.servlet.ServletResponse;&nbsp;&nbsp; public class Encoding implements Filter {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void </p>
<p>destroy() {&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void doFilter(ServletRequest request, ServletResponse response,&nbsp;&nbsp; FilterChain chain) throws IOException, ServletException {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>request.setCharacterEncoding("GBK");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chain.doFilter(request, response);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void init(FilterConfig filterConfig) throws ServletException { }&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>Web.xml文件中的设置</p>
<p>&lt; filter&gt;&nbsp;&nbsp;&nbsp;&nbsp; &lt; filter-name&gt;encoding&lt; /filter-name&gt;&nbsp;&nbsp;&nbsp;&nbsp; &lt; filter-class&gt;com.htt.Encoding&lt; /filter-class&gt;&nbsp; &lt; /filter&gt;&nbsp; &lt; filter-mapping&gt;&nbsp;&nbsp;&nbsp;&nbsp; &lt; filter-name&gt;encoding&lt; /filter-name&gt;&nbsp; </p>
<p>&nbsp;&nbsp; &lt; url-pattern&gt;/ToCh_zn&lt; /url-pattern&gt;&nbsp; &lt; /filter-mapping&gt; </p><img src ="http://www.blogjava.net/wangbbs2007/aggbug/294918.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbbs2007/" target="_blank">狂淘网</a> 2009-09-13 10:49 <a href="http://www.blogjava.net/wangbbs2007/articles/294918.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>怎么用ONCLICK写提交表单表</title><link>http://www.blogjava.net/wangbbs2007/articles/293972.html</link><dc:creator>狂淘网</dc:creator><author>狂淘网</author><pubDate>Sat, 05 Sep 2009 02:29:00 GMT</pubDate><guid>http://www.blogjava.net/wangbbs2007/articles/293972.html</guid><wfw:comment>http://www.blogjava.net/wangbbs2007/comments/293972.html</wfw:comment><comments>http://www.blogjava.net/wangbbs2007/articles/293972.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbbs2007/comments/commentRss/293972.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbbs2007/services/trackbacks/293972.html</trackback:ping><description><![CDATA[1.&lt;a href="#" onclick="form1.submit();"&gt;ggy &lt;/a&gt;<br />
2.
<div class="t_msgfont" id="postmessage_1375751">如果是提交当前的form,直接写成onclick=submit()即可,如果是提交其他form,则用:<br />
document.forms[n].submit()或document.forms('formName').submit()都行</div><img src ="http://www.blogjava.net/wangbbs2007/aggbug/293972.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbbs2007/" target="_blank">狂淘网</a> 2009-09-05 10:29 <a href="http://www.blogjava.net/wangbbs2007/articles/293972.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>上传下载全攻略jspSmartUpload </title><link>http://www.blogjava.net/wangbbs2007/articles/293908.html</link><dc:creator>狂淘网</dc:creator><author>狂淘网</author><pubDate>Fri, 04 Sep 2009 09:04:00 GMT</pubDate><guid>http://www.blogjava.net/wangbbs2007/articles/293908.html</guid><wfw:comment>http://www.blogjava.net/wangbbs2007/comments/293908.html</wfw:comment><comments>http://www.blogjava.net/wangbbs2007/articles/293908.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbbs2007/comments/commentRss/293908.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbbs2007/services/trackbacks/293908.html</trackback:ping><description><![CDATA[<div class="postTitle">&nbsp;</div>
<div class="postText">一、安装篇&nbsp;<br />
<br />
　　jspSmartUpload是由www.jspsmart.com网站开发的一个可免费使用的全功能的文件上传下载组件，适于嵌入执行上传下载操作的JSP文件中。该组件有以下几个特点：&nbsp;<br />
<br />
1、使用简单。在JSP文件中仅仅书写三五行JAVA代码就可以搞定文件的上传或下载，方便。&nbsp;<br />
<br />
2、能全程控制上传。利用jspSmartUpload组件提供的对象及其操作方法，可以获得全部上传文件的信息（包括文件名，大小，类型，扩展名，文件数据等），方便存取。&nbsp;<br />
<br />
3、能对上传的文件在大小、类型等方面做出限制。如此可以滤掉不符合要求的文件。&nbsp;<br />
<br />
4、下载灵活。仅写两行代码，就能把Web服务器变成文件服务器。不管文件在Web服务器的目录下或在其它任何目录下，都可以利用jspSmartUpload进行下载。&nbsp;<br />
<br />
5、能将文件上传到数据库中，也能将数据库中的数据下载下来。这种功能针对的是MYSQL数据库，因为不具有通用性，所以本文不准备举例介绍这种用法。&nbsp;<br />
<br />
　　jspSmartUpload组件可以从www.jspsmart.com网站上自由下载，压缩包的名字是jspSmartUpload.zip。下载后，用WinZip或WinRAR将其解压到Tomcat的webapps目录下（本文以Tomcat服务器为例进行介绍）。解压后，将webapps/jspsmartupload目录下的子目录Web-inf名字改为全大写的WEB-INF，这样一改jspSmartUpload类才能使用。因为Tomcat对文件名大小写敏感，它要求Web应用程序相关的类所在目录为WEB-INF，且必须是大写。接着重新启动Tomcat，这样就可以在JSP文件中使用jspSmartUpload组件了。&nbsp;<br />
<br />
　　注意，按上述方法安装后，只有webapps/jspsmartupload目录下的程序可以使用jspSmartUpload组件，如果想让Tomcat服务器的所有Web应用程序都能用它，必须做如下工作：&nbsp;<br />
<br />
1．进入命令行状态，将目录切换到Tomcat的webapps/jspsmartupload/WEB-INF目录下。&nbsp;<br />
<br />
2．运行JAR打包命令：jar&nbsp;cvf&nbsp;jspSmartUpload.jar&nbsp;com&nbsp;<br />
<br />
（也可以打开资源管理器，切换到当前目录，用WinZip将com目录下的所有文件压缩成jspSmartUpload.zip，然后将jspSmartUpload.zip换名为jspSmartUpload.jar文件即可。）&nbsp;<br />
<br />
3．将jspSmartUpload.jar拷贝到Tomcat的shared/lib目录下。&nbsp;<br />
<br />
二、相关类说明篇&nbsp;<br />
<br />
㈠&nbsp;File类&nbsp;<br />
<br />
　　这个类包装了一个上传文件的所有信息。通过它，可以得到上传文件的文件名、文件大小、扩展名、文件数据等信息。&nbsp;<br />
<br />
　　File类主要提供以下方法：&nbsp;<br />
<br />
1、saveAs作用：将文件换名另存。&nbsp;<br />
<br />
原型：&nbsp;<br />
<br />
public&nbsp;void&nbsp;saveAs(java.lang.String&nbsp;destFilePathName)&nbsp;<br />
<br />
或&nbsp;<br />
<br />
public&nbsp;void&nbsp;saveAs(java.lang.String&nbsp;destFilePathName,&nbsp;int&nbsp;optionSaveAs)&nbsp;<br />
<br />
其中，destFilePathName是另存的文件名，optionSaveAs是另存的选项，该选项有三个值，分别是SAVEAS_PHYSICAL,SAVEAS_VIRTUAL，SAVEAS_AUTO。SAVEAS_PHYSICAL表明以操作系统的根目录为文件根目录另存文件，SAVEAS_VIRTUAL表明以Web应用程序的根目录为文件根目录另存文件，SAVEAS_AUTO则表示让组件决定，当Web应用程序的根目录存在另存文件的目录时，它会选择SAVEAS_VIRTUAL，否则会选择SAVEAS_PHYSICAL。&nbsp;<br />
<br />
例如，saveAs("/upload/sample.zip",SAVEAS_PHYSICAL)执行后若Web服务器安装在C盘，则另存的文件名实际是c:uploadsample.zip。而saveAs("/upload/sample.zip",SAVEAS_VIRTUAL)执行后若Web应用程序的根目录是webapps/jspsmartupload，则另存的文件名实际是webapps/jspsmartupload/upload/sample.zip。saveAs("/upload/sample.zip",SAVEAS_AUTO)执行时若Web应用程序根目录下存在upload目录，则其效果同saveAs("/upload/sample.zip",SAVEAS_VIRTUAL)，否则同saveAs("/upload/sample.zip",SAVEAS_PHYSICAL)。&nbsp;<br />
<br />
建议：对于Web程序的开发来说，最好使用SAVEAS_VIRTUAL，以便移植。&nbsp;<br />
<br />
2、isMissing&nbsp;<br />
<br />
作用：这个方法用于判断用户是否选择了文件，也即对应的表单项是否有值。选择了文件时，它返回false。未选文件时，它返回true。&nbsp;<br />
<br />
原型：public&nbsp;boolean&nbsp;isMissing()&nbsp;<br />
<br />
3、getFieldName&nbsp;<br />
<br />
作用：取HTML表单中对应于此上传文件的表单项的名字。&nbsp;<br />
<br />
原型：public&nbsp;String&nbsp;getFieldName()&nbsp;<br />
<br />
4、getFileName&nbsp;<br />
<br />
作用：取文件名（不含目录信息）&nbsp;<br />
<br />
原型：public&nbsp;String&nbsp;getFileName()&nbsp;<br />
<br />
5、getFilePathName&nbsp;<br />
<br />
作用：取文件全名（带目录）&nbsp;<br />
<br />
原型：public&nbsp;String&nbsp;getFilePathName&nbsp;<br />
<br />
6、getFileExt&nbsp;<br />
<br />
作用：取文件扩展名（后缀）&nbsp;<br />
<br />
原型：public&nbsp;String&nbsp;getFileExt()&nbsp;<br />
<br />
7、getSize&nbsp;<br />
<br />
作用：取文件长度（以字节计）&nbsp;<br />
<br />
原型：public&nbsp;int&nbsp;getSize()&nbsp;<br />
<br />
8、getBinaryData&nbsp;<br />
<br />
作用：取文件数据中指定位移处的一个字节，用于检测文件等处理。&nbsp;<br />
<br />
原型：public&nbsp;byte&nbsp;getBinaryData(int&nbsp;index)。其中，index表示位移，其值在0到getSize()-1之间。&nbsp;<br />
<br />
㈡&nbsp;Files类&nbsp;<br />
<br />
　　这个类表示所有上传文件的集合，通过它可以得到上传文件的数目、大小等信息。有以下方法：&nbsp;<br />
<br />
1、getCount&nbsp;<br />
<br />
作用：取得上传文件的数目。&nbsp;<br />
<br />
原型：public&nbsp;int&nbsp;getCount()&nbsp;<br />
<br />
2、getFile&nbsp;<br />
<br />
作用：取得指定位移处的文件对象File（这是com.jspsmart.upload.File，不是java.io.File，注意区分）。&nbsp;<br />
<br />
原型：public&nbsp;File&nbsp;getFile(int&nbsp;index)。其中，index为指定位移，其值在0到getCount()-1之间。&nbsp;<br />
<br />
3、getSize&nbsp;<br />
<br />
作用：取得上传文件的总长度，可用于限制一次性上传的数据量大小。&nbsp;<br />
<br />
原型：public&nbsp;long&nbsp;getSize()&nbsp;<br />
<br />
4、getCollection&nbsp;<br />
<br />
作用：将所有上传文件对象以Collection的形式返回，以便其它应用程序引用，浏览上传文件信息。&nbsp;<br />
<br />
原型：public&nbsp;Collection&nbsp;getCollection()&nbsp;<br />
<br />
5、getEnumeration&nbsp;<br />
<br />
作用：将所有上传文件对象以Enumeration（枚举）的形式返回，以便其它应用程序浏览上传文件信息。&nbsp;<br />
<br />
原型：public&nbsp;Enumeration&nbsp;getEnumeration()&nbsp;<br />
<br />
㈢&nbsp;Request类&nbsp;<br />
<br />
　　这个类的功能等同于JSP内置的对象request。只所以提供这个类，是因为对于文件上传表单，通过request对象无法获得表单项的值，必须通过jspSmartUpload组件提供的Request对象来获取。该类提供如下方法：&nbsp;<br />
<br />
1、getParameter&nbsp;<br />
<br />
作用：获取指定参数之值。当参数不存在时，返回值为null。&nbsp;<br />
<br />
原型：public&nbsp;String&nbsp;getParameter(String&nbsp;name)。其中，name为参数的名字。&nbsp;<br />
<br />
2、getParameterValues&nbsp;<br />
<br />
作用：当一个参数可以有多个值时，用此方法来取其值。它返回的是一个字符串数组。当参数不存在时，返回值为null。&nbsp;<br />
<br />
原型：public&nbsp;String[]&nbsp;getParameterValues(String&nbsp;name)。其中，name为参数的名字。&nbsp;<br />
<br />
3、getParameterNames&nbsp;<br />
<br />
作用：取得Request对象中所有参数的名字，用于遍历所有参数。它返回的是一个枚举型的对象。&nbsp;<br />
<br />
原型：public&nbsp;Enumeration&nbsp;getParameterNames()&nbsp;<br />
<br />
㈣&nbsp;SmartUpload类这个类完成上传下载工作。&nbsp;<br />
<br />
A．上传与下载共用的方法：&nbsp;<br />
<br />
只有一个：initialize。&nbsp;<br />
<br />
作用：执行上传下载的初始化工作，必须第一个执行。&nbsp;<br />
<br />
原型：有多个，主要使用下面这个：&nbsp;<br />
<br />
public&nbsp;final&nbsp;void&nbsp;initialize(javax.servlet.jsp.PageContext&nbsp;pageContext)&nbsp;<br />
<br />
其中，pageContext为JSP页面内置对象（页面上下文）。&nbsp;<br />
<br />
B．上传文件使用的方法：&nbsp;<br />
<br />
1、upload&nbsp;<br />
<br />
作用：上传文件数据。对于上传操作，第一步执行initialize方法，第二步就要执行这个方法。&nbsp;<br />
<br />
原型：public&nbsp;void&nbsp;upload()&nbsp;<br />
<br />
2、save&nbsp;<br />
<br />
作用：将全部上传文件保存到指定目录下，并返回保存的文件个数。&nbsp;<br />
<br />
原型：public&nbsp;int&nbsp;save(String&nbsp;destPathName)&nbsp;<br />
<br />
和public&nbsp;int&nbsp;save(String&nbsp;destPathName,int&nbsp;option)&nbsp;<br />
<br />
其中，destPathName为文件保存目录，option为保存选项，它有三个值，分别是SAVE_PHYSICAL,SAVE_VIRTUAL和SAVE_AUTO。（同File类的saveAs方法的选项之值类似）SAVE_PHYSICAL指示组件将文件保存到以操作系统根目录为文件根目录的目录下，SAVE_VIRTUAL指示组件将文件保存到以Web应用程序根目录为文件根目录的目录下，而SAVE_AUTO则表示由组件自动选择。&nbsp;<br />
<br />
注：save(destPathName)作用等同于save(destPathName,SAVE_AUTO)。&nbsp;<br />
<br />
3、getSize&nbsp;<br />
<br />
作用：取上传文件数据的总长度&nbsp;<br />
<br />
原型：public&nbsp;int&nbsp;getSize()&nbsp;<br />
<br />
4、getFiles&nbsp;<br />
<br />
作用：取全部上传文件，以Files对象形式返回，可以利用Files类的操作方法来获得上传文件的数目等信息。&nbsp;<br />
<br />
原型：public&nbsp;Files&nbsp;getFiles()&nbsp;<br />
<br />
5、getRequest&nbsp;<br />
<br />
作用：取得Request对象，以便由此对象获得上传表单参数之值。&nbsp;<br />
<br />
原型：public&nbsp;Request&nbsp;getRequest()&nbsp;<br />
<br />
6、setAllowedFilesList&nbsp;<br />
<br />
作用：设定允许上传带有指定扩展名的文件，当上传过程中有文件名不允许时，组件将抛出异常。&nbsp;<br />
<br />
原型：public&nbsp;void&nbsp;setAllowedFilesList(String&nbsp;allowedFilesList)&nbsp;<br />
<br />
其中，allowedFilesList为允许上传的文件扩展名列表，各个扩展名之间以逗号分隔。如果想允许上传那些没有扩展名的文件，可以用两个逗号表示。例如：setAllowedFilesList("doc,txt,,")将允许上传带doc和txt扩展名的文件以及没有扩展名的文件。&nbsp;<br />
<br />
7、setDeniedFilesList&nbsp;<br />
<br />
作用：用于限制上传那些带有指定扩展名的文件。若有文件扩展名被限制，则上传时组件将抛出异常。&nbsp;<br />
<br />
原型：public&nbsp;void&nbsp;setDeniedFilesList(String&nbsp;deniedFilesList)&nbsp;<br />
<br />
其中，deniedFilesList为禁止上传的文件扩展名列表，各个扩展名之间以逗号分隔。如果想禁止上传那些没有扩展名的文件，可以用两个逗号来表示。例如：setDeniedFilesList("exe,bat,,")将禁止上传带exe和bat扩展名的文件以及没有扩展名的文件。&nbsp;<br />
<br />
8、setMaxFileSize&nbsp;<br />
<br />
作用：设定每个文件允许上传的最大长度。&nbsp;<br />
<br />
原型：public&nbsp;void&nbsp;setMaxFileSize(long&nbsp;maxFileSize)&nbsp;<br />
<br />
其中，maxFileSize为为每个文件允许上传的最大长度，当文件超出此长度时，将不被上传。&nbsp;<br />
<br />
9、setTotalMaxFileSize&nbsp;<br />
<br />
作用：设定允许上传的文件的总长度，用于限制一次性上传的数据量大小。&nbsp;<br />
<br />
原型：public&nbsp;void&nbsp;setTotalMaxFileSize(long&nbsp;totalMaxFileSize)&nbsp;<br />
<br />
其中，totalMaxFileSize为允许上传的文件的总长度。<br />
<br />
<br />
<br />
1、setContentDisposition&nbsp;<br />
<br />
作用：将数据追加到MIME文件头的CONTENT-DISPOSITION域。jspSmartUpload组件会在返回下载的信息时自动填写MIME文件头的CONTENT-DISPOSITION域，如果用户需要添加额外信息，请用此方法。&nbsp;<br />
<br />
原型：public&nbsp;void&nbsp;setContentDisposition(String&nbsp;contentDisposition)&nbsp;<br />
<br />
其中，contentDisposition为要添加的数据。如果contentDisposition为null，则组件将自动添加"attachment;"，以表明将下载的文件作为附件，结果是IE浏览器将会提示另存文件，而不是自动打开这个文件（IE浏览器一般根据下载的文件扩展名决定执行什么操作，扩展名为doc的将用word程序打开，扩展名为pdf的将用acrobat程序打开，等等）。&nbsp;<br />
<br />
2、downloadFile&nbsp;<br />
<br />
作用：下载文件。&nbsp;<br />
<br />
原型：共有以下三个原型可用，第一个最常用，后两个用于特殊情况下的文件下载（如更改内容类型，更改另存的文件名）。&nbsp;<br />
<br />
①&nbsp;public&nbsp;void&nbsp;downloadFile(String&nbsp;sourceFilePathName)&nbsp;<br />
<br />
其中，sourceFilePathName为要下载的文件名（带目录的文件全名）&nbsp;<br />
<br />
②&nbsp;public&nbsp;void&nbsp;downloadFile(String&nbsp;sourceFilePathName,String&nbsp;contentType)&nbsp;<br />
<br />
其中，sourceFilePathName为要下载的文件名（带目录的文件全名）,contentType为内容类型（MIME格式的文件类型信息，可被浏览器识别）。&nbsp;<br />
<br />
③&nbsp;public&nbsp;void&nbsp;downloadFile(String&nbsp;sourceFilePathName,String&nbsp;contentType,String&nbsp;destFileName)&nbsp;<br />
<br />
其中，sourceFilePathName为要下载的文件名（带目录的文件全名）,contentType为内容类型（MIME格式的文件类型信息，可被浏览器识别）,destFileName为下载后默认的另存文件名。&nbsp;<br />
<br />
三、文件上传篇&nbsp;<br />
<br />
㈠&nbsp;表单要求&nbsp;<br />
<br />
对于上传文件的FORM表单，有两个要求：&nbsp;<br />
<br />
1、METHOD应用POST，即METHOD="POST"。&nbsp;<br />
<br />
2、增加属性：ENCTYPE="multipart/form-data"&nbsp;<br />
<br />
下面是一个用于上传文件的FORM表单的例子：&nbsp;<br />
<br />
<br />
<br />
&lt;FORM&nbsp;METHOD="POST"&nbsp;ENCTYPE="multipart/form-data"&nbsp;<br />
ACTION="/jspSmartUpload/upload.jsp"&gt;<br />
&lt;INPUT&nbsp;TYPE="FILE"&nbsp;NAME="MYFILE"&gt;<br />
&lt;INPUT&nbsp;TYPE="SUBMIT"&gt;<br />
&lt;/FORM&gt;<br />
&nbsp;<br />
<br />
<br />
㈡&nbsp;上传的例子&nbsp;<br />
<br />
1、上传页面upload.html&nbsp;<br />
<br />
本页面提供表单，让用户选择要上传的文件，点击"上传"按钮执行上传操作。&nbsp;<br />
<br />
页面源码如下：&nbsp;<br />
<br />
&lt;!--<br />
&nbsp;&nbsp;&nbsp;&nbsp;文件名：upload.html<br />
作&nbsp;&nbsp;者：纵横软件制作中心雨亦奇(zhsoft88@sohu.com)<br />
--&gt;<br />
&lt;!DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;文件上传&lt;/title&gt;<br />
&lt;meta&nbsp;http-equiv="Content-Type"&nbsp;content="text/html;&nbsp;charset=gb2312"&gt;<br />
&lt;/head&gt;<br />
<br />
&lt;body&gt;<br />
&lt;p&gt;&nbsp;&lt;/p&gt;<br />
&lt;p&nbsp;align="center"&gt;上传文件选择&lt;/p&gt;<br />
&lt;FORM&nbsp;METHOD="POST"&nbsp;ACTION="jsp/do_upload.jsp"<br />
ENCTYPE="multipart/form-data"&gt;<br />
&lt;input&nbsp;type="hidden"&nbsp;name="TEST"&nbsp;value="good"&gt;<br />
&nbsp;&nbsp;&lt;table&nbsp;width="75%"&nbsp;border="1"&nbsp;align="center"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;div&nbsp;align="center"&gt;1、&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input&nbsp;type="FILE"&nbsp;name="FILE1"&nbsp;size="30"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;div&nbsp;align="center"&gt;2、&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input&nbsp;type="FILE"&nbsp;name="FILE2"&nbsp;size="30"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;div&nbsp;align="center"&gt;3、&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input&nbsp;type="FILE"&nbsp;name="FILE3"&nbsp;size="30"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;div&nbsp;align="center"&gt;4、&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input&nbsp;type="FILE"&nbsp;name="FILE4"&nbsp;size="30"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;div&nbsp;align="center"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input&nbsp;type="submit"&nbsp;name="Submit"&nbsp;value="上传它！"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br />
&nbsp;&nbsp;&lt;/table&gt;<br />
&lt;/FORM&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
&nbsp;<br />
<br />
<br />
2、上传处理页面do_upload.jsp&nbsp;<br />
<br />
本页面执行文件上传操作。页面源码中详细介绍了上传方法的用法，在此不赘述了。&nbsp;<br />
<br />
页面源码如下：&nbsp;<br />
<br />
&lt;%--<br />
文件名：do_upload.jsp<br />
作&nbsp;&nbsp;者：纵横软件制作中心雨亦奇(zhsoft88@sohu.com)<br />
--%&gt;<br />
&lt;%@&nbsp;page&nbsp;contentType="text/html;&nbsp;charset=gb2312"&nbsp;language="java"&nbsp;<br />
import="java.util.*,com.jspsmart.upload.*"&nbsp;errorPage=""&nbsp;%&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;文件上传处理页面&lt;/title&gt;<br />
&lt;meta&nbsp;http-equiv="Content-Type"&nbsp;content="text/html;&nbsp;charset=gb2312"&gt;<br />
&lt;/head&gt;<br />
<br />
&lt;body&gt;<br />
&lt;%<br />
//&nbsp;新建一个SmartUpload对象<br />
SmartUpload&nbsp;su&nbsp;=&nbsp;new&nbsp;SmartUpload();<br />
//&nbsp;上传初始化<br />
su.initialize(pageContext);<br />
//&nbsp;设定上传限制<br />
//&nbsp;1.限制每个上传文件的最大长度。<br />
//&nbsp;su.setMaxFileSize(10000);<br />
//&nbsp;2.限制总上传数据的长度。<br />
//&nbsp;su.setTotalMaxFileSize(20000);<br />
//&nbsp;3.设定允许上传的文件（通过扩展名限制）,仅允许doc,txt文件。<br />
//&nbsp;su.setAllowedFilesList("doc,txt");<br />
//&nbsp;4.设定禁止上传的文件（通过扩展名限制）,禁止上传带有exe,bat,<br />
jsp,htm,html扩展名的文件和没有扩展名的文件。<br />
//&nbsp;su.setDeniedFilesList("exe,bat,jsp,htm,html,,");<br />
//&nbsp;上传文件<br />
su.upload();<br />
//&nbsp;将上传文件全部保存到指定目录<br />
int&nbsp;count&nbsp;=&nbsp;su.save("/upload");<br />
out.println(count+"个文件上传成功！&lt;br&gt;");<br />
<br />
//&nbsp;利用Request对象获取参数之值<br />
out.println("TEST="+su.getRequest().getParameter("TEST")<br />
+"&lt;BR&gt;&lt;BR&gt;");<br />
<br />
//&nbsp;逐一提取上传文件信息，同时可保存文件。<br />
for&nbsp;(int&nbsp;i=0;i&lt;su.getFiles().getCount();i++)<br />
{<br />
com.jspsmart.upload.File&nbsp;file&nbsp;=&nbsp;su.getFiles().getFile(i);<br />
<br />
//&nbsp;若文件不存在则继续<br />
if&nbsp;(file.isMissing())&nbsp;continue;<br />
<br />
//&nbsp;显示当前文件信息<br />
out.println("&lt;TABLE&nbsp;BORDER=1&gt;");<br />
out.println("&lt;TR&gt;&lt;TD&gt;表单项名（FieldName）&lt;/TD&gt;&lt;TD&gt;"<br />
+&nbsp;file.getFieldName()&nbsp;+&nbsp;"&lt;/TD&gt;&lt;/TR&gt;");<br />
out.println("&lt;TR&gt;&lt;TD&gt;文件长度（Size）&lt;/TD&gt;&lt;TD&gt;"&nbsp;+&nbsp;<br />
file.getSize()&nbsp;+&nbsp;"&lt;/TD&gt;&lt;/TR&gt;");<br />
out.println("&lt;TR&gt;&lt;TD&gt;文件名（FileName）&lt;/TD&gt;&lt;TD&gt;"&nbsp;<br />
+&nbsp;file.getFileName()&nbsp;+&nbsp;"&lt;/TD&gt;&lt;/TR&gt;");<br />
out.println("&lt;TR&gt;&lt;TD&gt;文件扩展名（FileExt）&lt;/TD&gt;&lt;TD&gt;"&nbsp;<br />
+&nbsp;file.getFileExt()&nbsp;+&nbsp;"&lt;/TD&gt;&lt;/TR&gt;");<br />
out.println("&lt;TR&gt;&lt;TD&gt;文件全名（FilePathName）&lt;/TD&gt;&lt;TD&gt;"<br />
+&nbsp;file.getFilePathName()&nbsp;+&nbsp;"&lt;/TD&gt;&lt;/TR&gt;");<br />
out.println("&lt;/TABLE&gt;&lt;BR&gt;");<br />
<br />
//&nbsp;将文件另存<br />
//&nbsp;file.saveAs("/upload/"&nbsp;+&nbsp;myFile.getFileName());<br />
//&nbsp;另存到以WEB应用程序的根目录为文件根目录的目录下<br />
//&nbsp;file.saveAs("/upload/"&nbsp;+&nbsp;myFile.getFileName(),&nbsp;<br />
su.SAVE_VIRTUAL);<br />
//&nbsp;另存到操作系统的根目录为文件根目录的目录下<br />
//&nbsp;file.saveAs("c:temp"&nbsp;+&nbsp;myFile.getFileName(),&nbsp;<br />
su.SAVE_PHYSICAL);<br />
<br />
}<br />
%&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
&nbsp;<br />
<br />
<br />
四、文件下载篇&nbsp;<br />
<br />
1、下载链接页面download.html&nbsp;<br />
<br />
页面源码如下：&nbsp;<br />
<br />
&lt;!--<br />
文件名：download.html<br />
作&nbsp;&nbsp;者：纵横软件制作中心雨亦奇(zhsoft88@sohu.com)<br />
--&gt;<br />
&lt;!DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;下载&lt;/title&gt;<br />
&lt;meta&nbsp;http-equiv="Content-Type"&nbsp;content="text/html;&nbsp;charset=gb2312"&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;a&nbsp;href="jsp/do_download.jsp"&gt;点击下载&lt;/a&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
&nbsp;<br />
<br />
<br />
2、下载处理页面do_download.jsp&nbsp;do_download.jsp展示了如何利用jspSmartUpload组件来下载文件，从下面的源码中就可以看到，下载何其简单。&nbsp;<br />
<br />
源码如下：&nbsp;<br />
<br />
&lt;%@&nbsp;page&nbsp;contentType="text/html;charset=gb2312"&nbsp;<br />
import="com.jspsmart.upload.*"&nbsp;%&gt;&lt;%<br />
//&nbsp;新建一个SmartUpload对象<br />
SmartUpload&nbsp;su&nbsp;=&nbsp;new&nbsp;SmartUpload();<br />
//&nbsp;初始化<br />
su.initialize(pageContext);<br />
//&nbsp;设定contentDisposition为null以禁止浏览器自动打开文件，<br />
//保证点击链接后是下载文件。若不设定，则下载的文件扩展名为<br />
//doc时，浏览器将自动用word打开它。扩展名为pdf时，<br />
//浏览器将用acrobat打开。<br />
su.setContentDisposition(null);<br />
//&nbsp;下载文件<br />
su.downloadFile("/upload/如何赚取我的第一桶金.doc");<br />
%&gt;<br />
&nbsp;<br />
<br />
<br />
注意，执行下载的页面，在Java脚本范围外（即&lt;%&nbsp;...&nbsp;%&gt;之外），不要包含HTML代码、空格、回车或换行等字符，有的话将不能正确下载。不信的话，可以在上述源码中%&gt;&lt;%之间加入一个换行符，再下载一下，保证出错。因为它影响了返回给浏览器的数据流，导致解析出错。&nbsp;<br />
<br />
3、如何下载中文文件&nbsp;<br />
<br />
jspSmartUpload虽然能下载文件，但对中文支持不足。若下载的文件名中有汉字，则浏览器在提示另存的文件名时，显示的是一堆乱码，很扫人兴。上面的例子就是这样。（这个问题也是众多下载组件所存在的问题，很少有人解决，搜索不到相关资料，可叹！）&nbsp;<br />
<br />
为了给jspSmartUpload组件增加下载中文文件的支持，我对该组件进行了研究，发现对返回给浏览器的另存文件名进行UTF-8编码后，浏览器便能正确显示中文名字了。这是一个令人高兴的发现。于是我对jspSmartUpload组件的SmartUpload类做了升级处理，增加了toUtf8String这个方法，改动部分源码如下：&nbsp;<br />
<br />
public&nbsp;void&nbsp;downloadFile(String&nbsp;s,&nbsp;String&nbsp;s1,&nbsp;String&nbsp;s2,&nbsp;int&nbsp;i)<br />
throws&nbsp;ServletException,&nbsp;IOException,&nbsp;SmartUploadException<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
if(s&nbsp;==&nbsp;null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;IllegalArgumentException("File&nbsp;''"&nbsp;+&nbsp;s&nbsp;+<br />
&nbsp;&nbsp;&nbsp;&nbsp;"''&nbsp;not&nbsp;found&nbsp;(1040).");<br />
if(s.equals(""))<br />
&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;IllegalArgumentException("File&nbsp;''"&nbsp;+&nbsp;s&nbsp;+<br />
&nbsp;&nbsp;&nbsp;&nbsp;"''&nbsp;not&nbsp;found&nbsp;(1040).");<br />
if(!isVirtual(s)&nbsp;&amp;&amp;&nbsp;m_denyPhysicalPath)<br />
&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;SecurityException("Physical&nbsp;path&nbsp;is<br />
&nbsp;&nbsp;&nbsp;&nbsp;denied&nbsp;(1035).");<br />
if(isVirtual(s))<br />
&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;=&nbsp;m_application.getRealPath(s);<br />
java.io.File&nbsp;file&nbsp;=&nbsp;new&nbsp;java.io.File(s);<br />
FileInputStream&nbsp;fileinputstream&nbsp;=&nbsp;new&nbsp;FileInputStream(file);<br />
long&nbsp;l&nbsp;=&nbsp;file.length();<br />
boolean&nbsp;flag&nbsp;=&nbsp;false;<br />
int&nbsp;k&nbsp;=&nbsp;0;<br />
byte&nbsp;abyte0[]&nbsp;=&nbsp;new&nbsp;byte[i];<br />
if(s1&nbsp;==&nbsp;null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;m_response.setContentType("application/x-msdownload");<br />
else<br />
if(s1.length()&nbsp;==&nbsp;0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;m_response.setContentType("application/x-msdownload");<br />
else<br />
&nbsp;&nbsp;&nbsp;&nbsp;m_response.setContentType(s1);<br />
m_response.setContentLength((int)l);<br />
m_contentDisposition&nbsp;=&nbsp;m_contentDisposition&nbsp;!=&nbsp;null&nbsp;?<br />
m_contentDisposition&nbsp;:&nbsp;"attachment;";<br />
if(s2&nbsp;==&nbsp;null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;m_response.setHeader("Content-Disposition",&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;m_contentDisposition&nbsp;+&nbsp;"&nbsp;filename="&nbsp;+&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;toUtf8String(getFileName(s)));<br />
else<br />
if(s2.length()&nbsp;==&nbsp;0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;m_response.setHeader("Content-Disposition",&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;m_contentDisposition);<br />
else<br />
&nbsp;&nbsp;&nbsp;&nbsp;m_response.setHeader("Content-Disposition",&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;m_contentDisposition&nbsp;+&nbsp;"&nbsp;filename="&nbsp;+&nbsp;toUtf8String(s2));<br />
while((long)k&nbsp;&lt;&nbsp;l)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;j&nbsp;=&nbsp;fileinputstream.read(abyte0,&nbsp;0,&nbsp;i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;+=&nbsp;j;<br />
&nbsp;&nbsp;&nbsp;&nbsp;m_response.getOutputStream().write(abyte0,&nbsp;0,&nbsp;j);<br />
}<br />
fileinputstream.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;/**<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;将文件名中的汉字转为UTF8编码的串,以便下载时能正确显示另存的文件名.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;纵横软件制作中心雨亦奇2003.08.01<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;s&nbsp;原文件名<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;重新编码后的文件名<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;String&nbsp;toUtf8String(String&nbsp;s)&nbsp;{<br />
StringBuffer&nbsp;sb&nbsp;=&nbsp;new&nbsp;StringBuffer();<br />
for&nbsp;(int&nbsp;i=0;i&lt;s.length();i++)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;c&nbsp;=&nbsp;s.charAt(i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(c&nbsp;&gt;=&nbsp;0&nbsp;&amp;&amp;&nbsp;c&nbsp;&lt;=&nbsp;255)&nbsp;{<br />
sb.append(c);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<br />
byte[]&nbsp;b;<br />
try&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;=&nbsp;Character.toString(c).getBytes("utf-8");<br />
}&nbsp;catch&nbsp;(Exception&nbsp;ex)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(ex);<br />
&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;=&nbsp;new&nbsp;byte[0];<br />
}<br />
for&nbsp;(int&nbsp;j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt;&nbsp;b.length;&nbsp;j++)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;k&nbsp;=&nbsp;b[j];<br />
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(k&nbsp;&lt;&nbsp;0)&nbsp;k&nbsp;+=&nbsp;256;<br />
&nbsp;&nbsp;&nbsp;&nbsp;sb.append("%"&nbsp;+&nbsp;Integer.toHexString(k).<br />
&nbsp;&nbsp;&nbsp;&nbsp;toUpperCase());<br />
}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
return&nbsp;sb.toString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;<br />
<br />
<br />
注意源码中粗体部分，原jspSmartUpload组件对返回的文件未作任何处理，现在做了编码的转换工作，将文件名转换为UTF-8形式的编码形式。UTF-8编码对英文未作任何处理，对中文则需要转换为%XX的形式。toUtf8String方法中，直接利用Java语言提供的编码转换方法获得汉字字符的UTF-8编码，之后将其转换为%XX的形式。&nbsp;<br />
<br />
将源码编译后打包成jspSmartUpload.jar，拷贝到Tomcat的shared/lib目录下（可为所有WEB应用程序所共享），然后重启Tomcat服务器就可以正常下载含有中文名字的文件了。另，toUtf8String方法也可用于转换含有中文的超级链接，以保证链接的有效，因为有的WEB服务器不支持中文链接。&nbsp;<br />
<br />
小结：jspSmartUpload组件是应用JSP进行B/S程序开发过程中经常使用的上传下载组件，它使用简单，方便。现在我又为其加上了下载中文名字的文件的支持，真个是如虎添翼，必将赢得更多开发者的青睐。 </div>
<img src ="http://www.blogjava.net/wangbbs2007/aggbug/293908.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbbs2007/" target="_blank">狂淘网</a> 2009-09-04 17:04 <a href="http://www.blogjava.net/wangbbs2007/articles/293908.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP连接MYSQL5的中文问题解决方法 </title><link>http://www.blogjava.net/wangbbs2007/articles/293906.html</link><dc:creator>狂淘网</dc:creator><author>狂淘网</author><pubDate>Fri, 04 Sep 2009 09:02:00 GMT</pubDate><guid>http://www.blogjava.net/wangbbs2007/articles/293906.html</guid><wfw:comment>http://www.blogjava.net/wangbbs2007/comments/293906.html</wfw:comment><comments>http://www.blogjava.net/wangbbs2007/articles/293906.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbbs2007/comments/commentRss/293906.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbbs2007/services/trackbacks/293906.html</trackback:ping><description><![CDATA[<div class="postTitle">&nbsp;</div>
<div class="postText">
<p>用JAVA/JSP做开发很久了,也见过许多朋友做过,有很大一部分用的是MYSQL的数据库,现在MYSQL数据库版本5.0及以上的都已经被用的很广泛了,但一直有一个问题,使刚入门的朋友费劲心思.就是JSP连接MYSQL5数据库的时候的一些中文问题.于是网络上也出现了很多相关的帖子.由些大家对MYSQL5数据库的配制文件MY.INI也有了些了解.甚至一些朋友就直接问:你们的MYSQL是什么编码的?你们的TOMCAT是什么样的编码,可能不是很规范的问法,但说明了编码问题的确影响了大家的使用.</p>
<p>下面的讲解是在MYSQL5.0.18,TOMCAT5.0.28,驱动为mysql-connector-java-3.2.0-alpha-bin.jar及以上版本的情况下测试的</p>
<p>JSP连接数据库的乱码问题,分两部分来看</p>
<p>1 数据库中是不是乱码?</p>
<p>我们需要保证数据库保存的不是"?????"形式的乱码,如何保证呢?</p>
<p>我们在管理MYSQL数据库的时候,需要用一个客户端,无论你用MYSQL-FRONT,EMS SQL Manager for MySQL,还是MYSQL命令行,这些都是客户端,也是程序连接了数据库,我们现在用客户端EMS SQL Manager for MySQL连接数据库,连接的时候一定要设置客户端字符集为GBK或者GB2312,这样你才能知道数据库里面是不是乱码.这一编码设置很重要,不然,就算数据库里是中文,你看到的还是乱码</p>
<p><img alt="" hspace="0" src="http://www.jspcn.net/upload/2008/5/2/12097387635150.jpg" border="0" /></p>
<p>这样连接后,我们看下我们做测试的表格,里面的汉字就是正常的,这个时候也可以直接在上面的记录中进入中文的修改</p>
<p><img alt="" hspace="0" src="http://www.jspcn.net/upload/2008/5/2/12097391864840.jpg" border="0" /></p>
<p>若这里没有选择编码的话,一般默认的就是UTF8的了,连接后再看这个表格,就会出现乱码</p>
<p><img alt="" hspace="0" src="http://www.jspcn.net/upload/2008/5/2/12097392812650.jpg" border="0" /></p>
<p>而这个时候就会出现不能插入中文的问题,若您插入中文的话,就会出现下列错误</p>
<p><img alt="" hspace="0" src="http://www.jspcn.net/upload/2008/5/2/12097394007180.jpg" border="0" /></p>
<p>这个时候大家什么不要误解,不是不能插入中文,也不是你插入的字符太长,</p>
<p>更改下连接编码就OK了.下面是这个表格的SQL语句</p>
<div class="quote">CREATE TABLE `test` (<br />
`name` varchar(100) default NULL,<br />
`adesc` varchar(100) default NULL<br />
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;</div>
<p>二.程序连接数据时,也要设置好连接时候的编码,JSP连接MYSQL数据库时候,有个URL参数,jdbc:mysql://localhost:3307/sssdb?user=demoUser&amp;password=demoPwd&amp;useUnicode=true&amp;characterEncoding=UTF-8,在这里需要设置成UTF-8,</p>
<p>下面是连接数据库的程序代码</p>
<div class="quote">
<p>&lt;%@ page contentType="text/html;charset=GB2312" language="java"%&gt;<br />
&lt;%@ page import="java.io.*" %&gt; <br />
&lt;%@ page import="java.util.*" %&gt;<br />
&lt;%@ page import="java.sql.*" %&gt;</p>
<p>&lt;%<br />
out.println("您的数据库某表格中的内容如下&lt;br&gt;");<br />
try {<br />
Class.forName("com.mysql.jdbc.Driver").newInstance(); <br />
String url ="jdbc:mysql://localhost:3307/sssdb?user=demoUser&amp;password=demoPwd&amp;useUnicode=true&amp;characterEncoding=UTF-8";<br />
//testDB为你的数据库名 <br />
Connection conn= DriverManager.getConnection(url); <br />
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); <br />
String sql="select * from test"; </p>
<p>ResultSet rs=stmt.executeQuery(sql); <br />
while(rs.next()) {<br />
out.println("第一个字段内容：&lt;font color=red&gt;"+rs.getString(1)+"&lt;/font&gt; 第二个字段内容：&lt;font color=red&gt;"+rs.getString(2)+"&lt;/font&gt;&lt;br&gt;");<br />
}<br />
out.print("数据库操作成功，恭喜你"); </p>
<p>sql = "insert into test (name,adesc) values ('中文','汉字')";<br />
stmt.execute(sql);</p>
<p><br />
rs.close(); <br />
stmt.close(); <br />
conn.close(); <br />
}<br />
catch(Exception e){<br />
System.out.println("数据库连接不成功"+e.toString());<br />
}<br />
%&gt;</p>
</div>
<p>上面的经验是经过多次尝试总结出来的,不管是MYSQL的客户端还是程序连接MYSQL数据库,在本质上都是程序连接数据库,可以自己在本地多试验下,有时候有可能是驱动太旧</p>
</div>
<img src ="http://www.blogjava.net/wangbbs2007/aggbug/293906.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbbs2007/" target="_blank">狂淘网</a> 2009-09-04 17:02 <a href="http://www.blogjava.net/wangbbs2007/articles/293906.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>web.xml 详细配置解析</title><link>http://www.blogjava.net/wangbbs2007/articles/293710.html</link><dc:creator>狂淘网</dc:creator><author>狂淘网</author><pubDate>Thu, 03 Sep 2009 02:48:00 GMT</pubDate><guid>http://www.blogjava.net/wangbbs2007/articles/293710.html</guid><wfw:comment>http://www.blogjava.net/wangbbs2007/comments/293710.html</wfw:comment><comments>http://www.blogjava.net/wangbbs2007/articles/293710.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangbbs2007/comments/commentRss/293710.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangbbs2007/services/trackbacks/293710.html</trackback:ping><description><![CDATA[<p>部署描述符实际上是一个XML文件，包含了很多描述servlet/JSP应用的各个方面的元素，如servlet注册、servlet映射以及监听器注册。部署描述符从下面的XML头开始：</p>
<p>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;</p>
<p>这个头指定了XML的版本号以及所使用的编码。头的下面是DOCTYPE声明：</p>
<p>&lt;!DOCTYPE web-app<br />
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br />
"<a href="http://java.sun.com/dtd/web-app_2_3.dtd">http://java.sun.com/dtd/web-app_2_3.dtd</a>"&gt;</p>
<p>这段代码指定文件类型定义(DTD)，可以通过它检查XML文档的有效性。下面显示的&lt;!DOCTYPE&gt;元素有几个特性，这些特性告诉我们关于DTD的信息：<br />
● <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>web-app定义该文档(部署描述符，不是DTD文件)的根元素<br />
● <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>PUBLIC意味着DTD文件可以被公开使用<br />
● <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"意味着DTD由Sun Microsystems, Inc.维护。<br />
<wbr></wbr><wbr></wbr><wbr></wbr>该信息也表示它描述的文档类型是DTD Web Application 2.3，而且DTD是用英文书写的。<br />
● <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>URL"<a href="http://java.sun.com/dtd/web-app_2_3.dtd">http://java.sun.com/dtd/web-app_2_3.dtd</a>"表示D文件的位置。</p>
<p>注意：<br />
在部署描述符中， &lt;!--&#8230;--&gt;用于注释。<br />
部署描述符的根元素是web-app。DTD文件规定，web-app元素的子元素的语法如下：</p>
<p>&lt;!ELEMENT web-app (icon?, display-name?, description?,<br />
distributable?, context-param*, filter*, filter-mapping*,<br />
listener*, servlet*, servlet-mapping*, session-config?,<br />
mime-mapping*, welcome-file-list?,<br />
error-page*, taglib*, resource-env-ref*, resource-ref*,<br />
security-constraint*, login-config?, security-role*,env-entry*,<br />
ejb-ref*, ejb-local-ref*)&gt;</p>
<p>正如您所看到的，这个元素含有23个子元素，而且子元素都是可选的。问号(？)表示子元素是可选的，而且只能出现一次。星号(*)表示子元素可在部署描述符中出现零次或多次。有些子元素还可以有它们自己的子元素。<br />
web.xml文件中web-app元素声明的是下面每个子元素的声明。下面的章节讲述部署描述符中可能包含的所有子元素。<br />
注意：<br />
在Servlet 2.3中，子元素必须按照DTD文件语法描述中指定的顺序出现。比如，如果部署描述符中的web-app元素有servlet和servlet-mapping两个子元素，则servlet子元素必须出现在servlet-mapping子元素之前。在Servlet 2.4中，顺序并不重要。<br />
下面对web.xml文件各元素进行详解</p>
<p>1. icon元素<br />
icon元素用来指定GIF格式或JPEG格式的小图标(16&#215;16)或大图标(32&#215;32)的文件名。</p>
<p>&lt;!ELEMENT icon (small-icon?, large-icon?)&gt;<br />
&lt;!ELEMENT small-icon (#PCDATA)&gt;<br />
&lt;!ELEMENT large-icon (#PCDATA)&gt;</p>
<p>icon元素包括两个可选的子元素：small-icon子元素和large-icon子元素。文件名是Web应用归档文件(WAR)的根的相对路径。<br />
部署描述符并没有使用icon元素。但是，如果使用XML工具编辑部署描述符，XML编辑器可以使用icon元素。</p>
<p>2. display-name元素<br />
如果使用工具编辑部署描述符，display-name元素包含的就是XML编辑器显示的名称。</p>
<p>&lt;!ELEMENT display-name (#PCDATA)&gt;</p>
<p>下面是一个含有display-name元素的部署描述符：</p>
<p>&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 />
"<a href="http://java.sun.com/dtd/web-app_2_3.dtd">http://java.sun.com/dtd/web-app_2_3.dtd</a>"&gt;</p>
<p>&lt;web-app&gt;<br />
&lt;display-name&gt;Online Store Application&lt;/display-name&gt;<br />
&lt;/web-app&gt;</p>
<p>3. description元素<br />
可以使用description元素来提供有关部署描述符的信息。XML编辑器可以使用description元素的值。</p>
<p>&lt;!ELEMENT description (#PCDATA)&gt;</p>
<p>4. distributable元素<br />
可以使用distributable元素来告诉servlet/JSP容器，编写将在分布式Web容器中部署的应用：</p>
<p>&lt;!ELEMENT distributable EMPTY&gt;</p>
<p>例如，下面是一个含有distributable元素的部署描述符的例子：</p>
<p>&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 />
"<a href="http://java.sun.com/dtd/web-app_2_3.dtd">http://java.sun.com/dtd/web-app_2_3.dtd</a>"&gt;</p>
<p>&lt;web-app&gt;<br />
&lt;distributable/&gt;<br />
&lt;/web-app&gt;</p>
<p>5. context-param元素<br />
context-param元素含有一对参数名和参数值，用作应用的servlet上下文初始化参数。参数名在整个Web应用中必须是惟一的。</p>
<p>&lt;!ELEMENT context-param (param-name, param-value, description?)&gt;<br />
&lt;!ELEMENT param-name (#PCDATA)&gt;<br />
&lt;!ELEMENT param-value (#PCDATA)&gt;<br />
&lt;!ELEMENT description (#PCDATA)&gt;</p>
<p>param-name 子元素包含有参数名，而param-value子元素包含的是参数值。作为选择，可用description子元素来描述参数。</p>
<p>下面是一个含有context-param元素的有效部署描述符：</p>
<p>&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 />
"<a href="http://java.sun.com/dtd/web-app_2_3.dtd">http://java.sun.com/dtd/web-app_2_3.dtd</a>"&gt;</p>
<p>&lt;web-app&gt;<br />
&lt;context-param&gt;<br />
&lt;param-name&gt;jdbcDriver&lt;/param-name&gt;<br />
&lt;param-value&gt;com.mysql.jdbc.Driver&lt;/param-value&gt;<br />
&lt;/context-param&gt;<br />
&lt;/web-app&gt;</p>
<p>6. filter元素<br />
filter元素用于指定Web容器中的过滤器。在请求和响应对象被servlet处理之前或之后，可以使用过滤器对这两个对象进行操作。利用下一节介绍 的filter-mapping元素，过滤器被映射到一个servlet或一个URL模式。这个过滤器的filter元素和filter-mapping 元素必须具有相同的名称。</p>
<p>&lt;!ELEMENT filter (icon?, filter-name, display-name?, description?,<br />
filter-class, init-param*)&gt;<br />
&lt;!ELEMENT filter-name (#PCDATA)&gt;<br />
&lt;!ELEMENT filter-class (#PCDATA)&gt;</p>
<p>icon、display-name和description元素的用法和上一节介绍的用法相同。init-param元素与context-param 元素具有相同的元素描述符。filter-name元素用来定义过滤器的名称，该名称在整个应用中都必须是惟一的。filter-class元素指定过滤 器类的完全限定的名称。</p>
<p>下面是一个使用filter元素的部署描述符的例子：</p>
<p>&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 />
"<a href="http://java.sun.com/dtd/web-app_2_3.dtd">http://java.sun.com/dtd/web-app_2_3.dtd</a>"&gt;</p>
<p>&lt;web-app&gt;<br />
&lt;filter&gt;<br />
&lt;filter-name&gt;Encryption Filter&lt;/filter-name&gt;<br />
&lt;filter-class&gt;com.branysoftware.EncryptionFilter&lt;/filter-class&gt;<br />
&lt;/filter&gt;<br />
&lt;/web-app&gt;</p>
<p>7. filter-mapping元素<br />
filter-mapping元素用来声明Web应用中的过滤器映射。过滤器可被映射到一个servlet或一个URL模式。将过滤器映射到一个 servlet中会造成过滤器作用于servlet上。将过滤器映射到一个URL模式中则可以将过滤器应用于任何资源，只要该资源的URL与URL模式匹 配。过滤是按照部署描述符的filter-mapping元素出现的顺序执行的。</p>
<p>&lt;!ELEMENT filter-mapping (filter-name, (url-pattern | servlet-name))&gt;<br />
&lt;!ELEMENT filter-name (#PCDATA)&gt;<br />
&lt;!ELEMENT url-pattern (#PCDATA)&gt;<br />
&lt;!ELEMENT servlet-name (#PCDATA)&gt;</p>
<p>filter-name值必须对应filter元素中声明的其中一个过滤器名称。下面是一个含有filter-mapping元素的部署描述符：</p>
<p>&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 />
"<a href="http://java.sun.com/dtd/web-app_2_3.dtd">http://java.sun.com/dtd/web-app_2_3.dtd</a>"&gt;</p>
<p>&lt;web-app&gt;<br />
&lt;filter&gt;<br />
&lt;filter-name&gt;Encryption Filter&lt;/filter-name&gt;<br />
&lt;filter-class&gt;com.brainysoftware.EncryptionFilter&lt;/filter-class&gt;<br />
&lt;/filter&gt;</p>
<p>&lt;filter-mapping&gt;<br />
&lt;filter-name&gt;Encryption Filter&lt;/filter-name&gt;<br />
&lt;servlet-name&gt;EncryptionFilteredServle<wbr></wbr>t&lt;/servlet-name&gt;<br />
&lt;/filter-mapping&gt;<br />
&lt;/web-app&gt;</p>
<p>8. listener元素<br />
listener元素用来注册一个监听器类，可以在Web应用中包含该类。使用listener元素，可以收到事件什么时候发生以及用什么作为响应的通知。</p>
<p>&lt;!ELEMENT listener (listener-class)&gt;<br />
&lt;!ELEMENT listener-class (#PCDATA)&gt;</p>
<p>下面是一个含有listener元素的有效部署描述符：</p>
<p>&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 />
"<a href="http://java.sun.com/dtd/web-app_2_3.dtd">http://java.sun.com/dtd/web-app_2_3.dtd</a>"&gt;</p>
<p>&lt;web-app&gt;<br />
&lt;listener&gt;<br />
&lt;listener-class&gt;MyAppListener&lt;/listener-class&gt;<br />
&lt;/listener&gt;<br />
&lt;/web-app&gt;</p>
<p>9. servlet元素<br />
servlet元素用来声明一个servlet。</p>
<p>&lt;!ELEMENT servlet (icon?, servlet-name, display-name?, description?,<br />
(servlet-class|jsp-file), init-param*, load-on-startup?, run-as?,<br />
security-role-ref*)&gt;<br />
&lt;!ELEMENT servlet-name (#PCDATA)&gt;<br />
&lt;!ELEMENT servlet-class (#PCDATA)&gt;<br />
&lt;!ELEMENT jsp-file (#PCDATA)&gt;<br />
&lt;!ELEMENT init-param (param-name, param-value, description?)&gt;<br />
&lt;!ELEMENT load-on-startup (#PCDATA)&gt;<br />
&lt;!ELEMENT run-as (description?, role-name)&gt;<br />
&lt;!ELEMENT role-name (#PCDATA)&gt;</p>
<p>icon、display-name和description元素的用法和上一节介绍的用法相同。init-param元素与context-param元素具有相同的元素描述符。可以使用init-param子元素将初始化参数名和参数值传递给servlet。</p>
<p>(1) servlet-name、servlet-class和jsp-file元素</p>
<p>servlet元素必须含有servlet-name元素和servlet-class元素，或者servlet-name元素和jsp-file元素。描述如下：<br />
● <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>servlet-name元素用来定义servlet的名称，该名称在整个应用中必须是惟一的。<br />
● <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>servlet-class元素用来指定servlet的完全限定的名称。<br />
● <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>jsp-file元素用来指定应用中JSP文件的完整路径。这个完整路径必须由a/开始。</p>
<p>(2) load-on-startup元素</p>
<p>当启动Web容器时，用load-on-startup元素自动将servlet加入内存。加载servlet就意味着实例化这个servlet，并调用 它的init方法。可以使用这个元素来避免第一个servlet请求的响应因为servlet载入内存所导致的任何延迟。如果load-on- startup元素存在，而且也指定了jsp-file元素，则JSP文件会被重新编译成servlet，同时产生的servlet也被载入内存。<br />
load-on-startup元素的内容可以为空，或者是一个整数。这个值表示由Web容器载入内存的顺序。举个例子，如果有两个servlet元素都 含有load-on-startup子元素，则load-on-startup子元素值较小的servlet将先被加载。如果load-on- startup子元素值为空或负值，则由Web容器决定什么时候加载servlet。如果两个servlet的load-on-startup子元素值相 同，则由Web容器决定先加载哪一个servlet。</p>
<p>(3) run-as元素</p>
<p>如果定义了run-as元素，它会重写用于调用Web应用中servlet所设定的Enterprise JavaBean(EJB)的安全身份。Role-name是为当前Web应用定义的一个安全角色的名称。</p>
<p>(4) security-role-ref元素</p>
<p>security-role-ref元素定义一个映射，该映射在servlet中用isUserInRole (String name)调用的角色名与为Web应用定义的安全角色名之间进行。security-role-ref元素的描述如下：<br />
&lt;!ELEMENT security-role-ref (description?, role-name, role-link)&gt;<br />
&lt;!ELEMENT description (#PCDATA)&gt;<br />
&lt;!ELEMENT role-name (#PCDATA)&gt;<br />
&lt;!ELEMENT role-link (#PCDATA)&gt;</p>
<p>role-link元素用来将安全角色引用链接到已定义的安全角色。role-link元素必须含有已经在security-role元素中定义的一个安全角色的名称。</p>
<p>(5) Faces Servlet的servlet元素</p>
<p>在 JSF应用中，需要为Faces Servlet定义一个servlet元素，如下所示：</p>
<p>&lt;?xml version="1.0"?&gt;<br />
&lt;!DOCTYPE web-app PUBLIC<br />
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br />
"<a href="http://java.sun.com/dtd/web-app_2_3.dtd">http://java.sun.com/dtd/web-app_2_3.dtd</a>"&gt;</p>
<p>&lt;web-app&gt;</p>
<p>&lt;!-- Faces Servlet --&gt;<br />
&lt;servlet&gt;<br />
&lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;<br />
&lt;servlet-class&gt;javax.faces.webapp.FacesServlet&lt;/servlet-class&gt;<br />
&lt;load-on-startup&gt; 1 &lt;/load-on-startup&gt;<br />
&lt;/servlet&gt;</p>
<p>&lt;!-- Faces Servlet Mapping --&gt;<br />
&lt;servlet-mapping&gt;<br />
&lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt;<br />
&lt;url-pattern&gt;/faces/*&lt;/url-pattern&gt;<br />
&lt;/servlet-mapping&gt;</p>
<p>&lt;/web-app&gt;</p>
<p>10. seervlet-mapping 元素<br />
seervlet-mapping 元素将URL模式映射到某个servlet。</p>
<p>&lt;!ELEMENT servlet-mapping (servlet-name, url-pattern)&gt;<br />
&lt;!ELEMENT servlet-name (#PCDATA)&gt;<br />
&lt;!ELEMENT url-pattern (#PCDATA)&gt;</p>
<p>在前面的&#8220;servlet元素&#8221;一节中已经介绍了使用servlet-mapping元素的例子。</p>
<p>11. session-config元素<br />
session-config元素为Web应用中的javax.servlet.http.HttpSession对象定义参数。</p>
<p>&lt;!ELEMENT session-config (session-timeout?)&gt;<br />
&lt;!ELEMENT session-timeout (#PCDATA)&gt;</p>
<p>session-timeout元素用来指定默认的会话超时时间间隔，以分钟为单位。该元素值必须为整数。如果session-timeout元素的值为零或负数，则表示会话将永远不会超时。</p>
<p>下面是一个部署描述符，在用户最近访问HttpSession对象30分钟后，HttpSession对象默认为无效：</p>
<p>&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 />
"<a href="http://java.sun.com/dtd/web-app_2_3.dtd">http://java.sun.com/dtd/web-app_2_3.dtd</a>"&gt;</p>
<p>&lt;web-app&gt;<br />
&lt;session-config&gt;<br />
&lt;session-timeout&gt;30&lt;/session-timeout&gt;<br />
&lt;/session-config&gt;<br />
&lt;/web-app&gt;</p>
<p>12. mime-mapping元素<br />
mime-mapping元素将mime类型映射到扩展名。</p>
<p>&lt;!ELEMENT mime-mapping (extension, mime-type)&gt;<br />
&lt;!ELEMENT extension (#PCDATA)&gt;<br />
&lt;!ELEMENT mime-type (#PCDATA)&gt;</p>
<p>extension元素用来描述扩展名。mime-type元素则为MIME类型。</p>
<p>举个例子，下面的部署描述符将扩展名txt映射为text/plain：</p>
<p>&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 />
"<a href="http://java.sun.com/dtd/web-app_2_3.dtd">http://java.sun.com/dtd/web-app_2_3.dtd</a>"&gt;<br />
&lt;web-app&gt;<br />
&lt;mime-mapping&gt;<br />
&lt;extension&gt;txt&lt;/extension&gt;<br />
&lt;mime-type&gt;text/plain&lt;/mime-type&gt;<br />
&lt;/mime-mapping&gt;<br />
&lt;/web-app&gt;</p>
<p>13. welcome-file-list元素<br />
当用户在浏览器中输入的URL不包含某个servlet名或JSP页面时，welcome-file-list元素可指定显示的默认文件。</p>
<p>&lt;!ELEMENT welcome-file-list (welcome-file+)&gt;<br />
&lt;!ELEMENT welcome-file (#PCDATA)&gt;</p>
<p>举个例子说明，假设用户在浏览器的地址框中输入<a href="http://www.mycompany.com/appName/">http://www.mycompany.com/appName/</a>等地址。如果在Web应用的部署描述符中指定welcome-file-list元素，用户就会看到一个权限错误消息，或者是应用目录下的文件和目录列表。如果定义了welcome-file-list元素，用户就能看到由该元素指定的具体文件。<br />
welcome-file子元素用于指定默认文件的名称。welcome-file-list元素可以包含一个或多个welcome-file子元素。如果在第一个welcome-file元素中没有找到指定的文件，Web容器就会尝试显示第二个，以此类推。<br />
下面是一个包含welcome-file-list元素的部署描述符。该元素包含两个welcome-file元素：第一个指定应用目录中的main.html文件，第二个定义jsp目录下的welcom.jsp文件，jsp目录也在应用目录下。</p>
<p>&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 />
"<a href="http://java.sun.com/dtd/web-app_2_3.dtd">http://java.sun.com/dtd/web-app_2_3.dtd</a>"&gt;</p>
<p>&lt;web-app&gt;<br />
&lt;welcome-file-list&gt;<br />
&lt;welcome-file&gt;main.html&lt;/welcome-file&gt;<br />
&lt;welcome-file&gt;jsp/welcome.jsp&lt;/welcome-file&gt;<br />
&lt;/welcome-file-list&gt;<br />
&lt;/web-app&gt;</p>
<p>如果用户键入的URL不包含servlet名称、JSP页面或其他资源，则不会在应用目录中找到main.html文件，这时就会显示jsp目录下的welcome.jsp文件。</p>
<p>14. error-page元素<br />
error-page元素用于将一段错误代码或一个异常类型映射到Web应用中的资源路径，从而在产生特殊的HTTP错误或指定的Java异常时，将显示相关的资源。</p>
<p>&lt;!ELEMENT error-page ((error-code | exception-type), location)&gt;<br />
&lt;!ELEMENT error-code (#PCDATA)&gt;<br />
&lt;!ELEMENT exception-type (#PCDATA)&gt;<br />
&lt;!ELEMENT location (#PCDATA)&gt;</p>
<p>error-code元素包含HTTP错误代码。exception-type是Java异常类型的完全限定的名称。location元素是Web应用中的资源相对于应用目录的路径。location的值必须从a/开始。</p>
<p>举个例子，每次产生HTTP 404错误代码时，下面的部署描述符可使Web容器显示error404.html页面：</p>
<p>&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 />
"<a href="http://java.sun.com/dtd/web-app_2_3.dtd">http://java.sun.com/dtd/web-app_2_3.dtd</a>"&gt;</p>
<p>&lt;web-app&gt;<br />
&lt;error-page&gt;<br />
&lt;error-code&gt;404&lt;/error-code&gt;<br />
&lt;location&gt;/error404.html&lt;/location&gt;<br />
&lt;/error-page&gt;<br />
&lt;/web-app&gt;</p>
<p>15. taglib元素<br />
taglib元素描述JSP定制标记库。</p>
<p>&lt;!ELEMENT taglib (taglib-uri, taglib-location)&gt;<br />
&lt;!ELEMENT taglib-uri (#PCDATA)&gt;<br />
&lt;!ELEMENT taglib-location (#PCDATA)&gt;</p>
<p>taglib-uri元素是用于Web应用中的标记库的URI。taglib-uri元素的值与WEB-INF目录相对应。<br />
taglib-location元素包含一个位置，其中可以找到标记库的标记库描述符(TLD)文件。</p>
<p>16. resource-env-ref元素<br />
可以使用resource-env-ref元素来指定对管理对象的servlet引用的声明，该对象与servlet环境中的资源相关联。</p>
<p>&lt;!ELEMENT resource-env-ref (description?, resource-env-ref-name,<br />
resource-env-ref-type)&gt;<br />
&lt;!ELEMENT resource-env-ref-name (#PCDATA)&gt;<br />
&lt;!ELEMENT resource-env-ref-type (#PCDATA)&gt;</p>
<p>resource-env-ref-name元素是资源环境引用的名称，其值为servlet代码中使用的环境的入口名称。该名称是一个与java:comp/env相对应的Java命名和目录接口(JNDI)名称，该名称在整个Web应用中必须是惟一的。</p>
<p>17. resource-ref元素<br />
resource-ref元素用于指定对外部资源的servlet引用的声明。</p>
<p>&lt;!ELEMENT resource-ref (description?, res-ref-name,<br />
res-type, res-auth, res-sharing-scope?)&gt;<br />
&lt;!ELEMENT description (#PCDATA)&gt;<br />
&lt;!ELEMENT res-ref-name (#PCDATA)&gt;<br />
&lt;!ELEMENT res-type (#PCDATA)&gt;<br />
&lt;!ELEMENT res-auth (#PCDATA)&gt;<br />
&lt;!ELEMENT res-sharing-scope (#PCDATA)&gt;</p>
<p>resource-ref子元素的描述如下：<br />
● <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>res-ref-name是资源工厂引用名的名称。该名称是一个与java:comp/env上下文相对应的JNDI名称，并且在整个Web应用中必须是惟一的。<br />
● <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>res-auth表明：servlet代码通过编程注册到资源管理器，或者是容器将代表servlet注册到资源管理器。该元素的值必须为Application或Container。<br />
● <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>res-sharing-scope表明：是否可以共享通过给定资源管理器连接工厂引用获得的连接。该元素的值必须为Shareable(默认值)或Unshareable。</p>
<p>18. security-constraint元素<br />
部署描述符中的security-constraint元素允许不通过编程就可以限制对某个资源的访问。</p>
<p>&lt;!ELEMENT security-constraint (display-name?,<br />
web-resource-collection+,<br />
auth-constraint?, user-data-constraint?)&gt;<br />
&lt;!ELEMENT display-name (#PCDATA)&gt;<br />
&lt;!ELEMENT web-resource-collection (web-resource-name, description?,<br />
url-pattern*, http-method*)&gt;<br />
&lt;!ELEMENT auth-constraint (description?, role-name*)&gt;<br />
&lt;!ELEMENT user-data-constraint (description?, transport-guarantee)&gt;</p>
<p>(1) web-resource-collection元素</p>
<p>web-resource-collection元素标识需要限制访问的资源子集。在web-resource-collection元素中，可以定义URL模式和HTTP方法。如果不存在HTTP方法，就将安全约束应用于所有的方法。</p>
<p>&lt;!ELEMENT web-resource-collection (web-resource-name, description?,<br />
url-pattern*, http-method*)&gt;<br />
&lt;!ELEMENT web-resource-name (#PCDATA)&gt;<br />
&lt;!ELEMENT description (#PCDATA)&gt;<br />
&lt;!ELEMENT url-pattern (#PCDATA)&gt;<br />
&lt;!ELEMENT http-method (#PCDATA)&gt;</p>
<p>web-resource-name是与受保护资源相关联的名称。http-method元素可被赋予一个HTTP方法，比如GET和POST。</p>
<p>(2) auth-constraint元素</p>
<p>auth-constraint元素用于指定可以访问该资源集合的用户角色。如果没有指定auth-constraint元素，就将安全约束应用于所有角色。</p>
<p>&lt;!ELEMENT auth-constraint (description?, role-name*)&gt;<br />
&lt;!ELEMENT description (#PCDATA)&gt;<br />
&lt;!ELEMENT role-name (#PCDATA)&gt;</p>
<p>role-name元素包含安全角色的名称。</p>
<p>(3) user-data-constraint元素</p>
<p>user-data-constraint元素用来显示怎样保护在客户端和Web容器之间传递的数据。</p>
<p>&lt;!ELEMENT user-data-constraint (description?, transport-guarantee)&gt;<br />
&lt;!ELEMENT description (#PCDATA)&gt;<br />
&lt;!ELEMENT transport-guarantee (#PCDATA)&gt;</p>
<p>transport-guarantee元素必须具有如下的某个值：<br />
● <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>NONE，这意味着应用不需要传输保证。<br />
● <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>INTEGRAL，意味着服务器和客户端之间的数据必须以某种方式发送，而且在传送中不能改变。<br />
● <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>CONFIDENTIAL，这意味着传输的数据必须是加密的数据。</p>
<p>在大多数情况下，安全套接字层(SSL)用于INTEGRAL或CONFIDENTIAL。</p>
<p>19. login-config元素<br />
login-config元素用来指定所使用的验证方法、领域名和表单验证机制所需的特性。</p>
<p>&lt;!ELEMENT login-config (auth-method?, realm-name?,<br />
form-login-config?)&gt;<br />
&lt;!ELEMENT auth-method (#PCDATA)&gt;<br />
&lt;!ELEMENT realm-name (#PCDATA)&gt;<br />
&lt;!ELEMENT form-login-config (form-login-page, form-error-page)&gt;</p>
<p>login-config子元素的描述如下：<br />
● <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>auth-method指定验证方法。它的值为下面的一个：BASIC、DIGEST、FORM或 CLIENT-CERT<br />
● <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>realm-name指定HTTP Basic验证中使用的领域名。<br />
● <wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr><wbr></wbr>form-login-config指定基于表单的登录中应该使用的登录页面和出错页面。如果没有使用基于表单的验证，则忽略这些元素。这个元素的定义如下，其中form-login-page用于指定显示登录页面的资源路径， form-error-page则用于指定用户登录失败时显示出错页面的资源路径。这两个页面路径都必须以a/开始，并与应用目录相对应。<br />
&lt;!ELEMENT form-login-config (form-login-page, form-error-page)&gt;<br />
&lt;!ELEMENT form-login-page (#PCDATA)&gt;<br />
&lt;!ELEMENT form-error-page (#PCDATA)&gt;</p>
<p>20. security-role元素<br />
security-role元素指定用于安全约束中的安全角色的声明。</p>
<p>&lt;!ELEMENT security-role (description?, role-name)&gt;<br />
&lt;!ELEMENT description (#PCDATA)&gt;<br />
&lt;!ELEMENT role-name (#PCDATA)&gt;</p>
<p>21. env-entry元素<br />
env-entry元素用于指定应用环境入口。</p>
<p>&lt;!ELEMENT env-entry (description?, env-entry-name, env-entry-value?,<br />
env-entry-type)&gt;<br />
&lt;!ELEMENT description (#PCDATA)&gt;<br />
&lt;!ELEMENT env-entry-name (#PCDATA)&gt;<br />
&lt;!ELEMENT env-entry-value (#PCDATA)&gt;<br />
&lt;!ELEMENT env-entry-type (#PCDATA)&gt;</p>
<p>env-entry-name元素包含Web应用环境入口的名称。该名称是一个与java:comp/env相对应的JNDI名称，并且在整个应用中必须是惟一的。<br />
env-entry-value元素包含Web应用环境入口的值。该值必须是一个字符串类型的值，并且对于指定类型的构造函数是有效的，该函数获得一个 String参数；或者对于java.lang.Character是有效的，java.lang.Character对象是一个字符。<br />
env-entry-type元素包含环境入口值的完全限定的Java类型，该环境入口值是Web应用代码所期望的。这个env-entry-type元素的值必须是如下之一：</p>
<p>java.lang.Boolean<br />
java.lang.Byte<br />
java.lang.Character<br />
java.lang.String<br />
java.lang.Short<br />
java.lang.Integer<br />
java.lang.Long<br />
java.lang.Float<br />
java.lang.Double</p>
<p>22. ejb-ref元素<br />
ejb-ref元素用于指定EJB的home接口的引用。</p>
<p>&lt;!ELEMENT ejb-ref (description?, ejb-ref-name, ejb-ref-type, home,<br />
remote, ejb-link?)&gt;<br />
&lt;!ELEMENT description (#PCDATA)&gt;<br />
&lt;!ELEMENT ejb-ref-name (#PCDATA)&gt;<br />
&lt;!ELEMENT ejb-ref-type (#PCDATA)&gt;<br />
&lt;!ELEMENT home (#PCDATA)&gt;<br />
&lt;!ELEMENT remote (#PCDATA)&gt;<br />
&lt;!ELEMENT ejb-link (#PCDATA)&gt;</p>
<p>ejb-ref-name包含EJB引用的名称。EJB引用是servlet环境中的一个入口，它与java:comp/env相对应。这个名称在Web应用中必须是惟一的。为求一致性，推荐您的ejb-ref-name元素名称以ejb/开始。<br />
ejb-ref-name元素包含引用的EJB的期望类型。这个值必须是Entity或Session。<br />
home元素包含EJB的home接口的完全限定的名称。remote元素包含EJB的remote接口的完全限定的名称。<br />
ejb-ref或ejb-local-ref元素中用到的ejb-link元素可指定EJB 引用被链接到另一个EJB。Ejb-link元素的值必须是同一个J2EE应用单元中某个EJB的ejb-name。Ejb-link元素中的名称可以由指定ejb-jar的路径名组成，该ejb-jar包含引用的EJB。目标bean的名称添加在后面，用字符a# 与路径名分隔。路径名与包含引用EJB的Web应用的WAR相对应。这就允许我们惟一标识具有相同ejb-name的多个企业bean。</p>
<p>23. ejb-local-ref元素<br />
ejb-local-ref元素用于声明对EJB的本地home的引用。</p>
<p>&lt;!ELEMENT ejb-local-ref (description?, ejb-ref-name, ejb-ref-type,<br />
local-home, local, ejb-link?)&gt;<br />
&lt;!ELEMENT description (#PCDATA)&gt;<br />
&lt;!ELEMENT ejb-ref-name (#PCDATA)&gt;<br />
&lt;!ELEMENT ejb-ref-type (#PCDATA)&gt;<br />
&lt;!ELEMENT local-home (#PCDATA)&gt;<br />
&lt;!ELEMENT local (#PCDATA)&gt;<br />
&lt;!ELEMENT ejb-link (#PCDATA)&gt;</p>
<p><wbr></wbr></p>
<p>local元素包含EJB本地接口的完全限定的名称。Local-home元素包含EJB本地home接口的完全限定的名称。</p>
<img src ="http://www.blogjava.net/wangbbs2007/aggbug/293710.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangbbs2007/" target="_blank">狂淘网</a> 2009-09-03 10:48 <a href="http://www.blogjava.net/wangbbs2007/articles/293710.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>