﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-java fans-文章分类-jsp学习</title><link>http://www.blogjava.net/jlin/category/12892.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 03 Nov 2012 13:23:21 GMT</lastBuildDate><pubDate>Sat, 03 Nov 2012 13:23:21 GMT</pubDate><ttl>60</ttl><item><title>HTML相对路径--上级目录及下级目录的写法(转)</title><link>http://www.blogjava.net/jlin/articles/390583.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Thu, 01 Nov 2012 02:55:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/articles/390583.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/390583.html</wfw:comment><comments>http://www.blogjava.net/jlin/articles/390583.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/390583.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/390583.html</trackback:ping><description><![CDATA[<div id="article_content" class="article_content">
<p><span style="font-family: Verdana; color: #000000; font-size: 11px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px" class="Apple-style-span"><span style="font-size: 13px; font-weight: bold" class="Apple-style-span">如何表示上级目录</span> 
<p style="line-height: normal">../表示源文件所在目录的上一级目录，../../表示源文件所在目录的上上级目录，以此类推。</p>
<p style="line-height: normal">假设info.html路径是：c:/Inetpub/wwwroot/sites/blabla/info.html<br style="line-height: normal" />假设index.html路径是：c:/Inetpub/wwwroot/sites/index.html<br style="line-height: normal" />在info.html加入index.html超链接的代码应该这样写：<br style="line-height: normal" /></p><pre style="font: 11px/18px Verdana">&lt;a href = "../index.html"&gt;index.html&lt;/a&gt;</pre>
<p style="line-height: normal">&nbsp;</p>
<p style="line-height: normal">假设info.html路径是：c:/Inetpub/wwwroot/sites/blabla/info.html<br style="line-height: normal" />假设index.html路径是：c:/Inetpub/wwwroot/index.html<br style="line-height: normal" />在info.html加入index.html超链接的代码应该这样写：<br style="line-height: normal" /></p><pre style="font: 11px/18px Verdana">&lt;a href="../../index.html"&gt;index.html&lt;/a&gt;</pre>
<p style="line-height: normal">&nbsp;</p>
<p style="line-height: normal">假设info.html路径是：c:/Inetpub/wwwroot/sites/blabla/info.html<br style="line-height: normal" />假设index.html路径是：c:/Inetpub/wwwroot/sites/wowstory/index.html<br style="line-height: normal" />在info.html加入index.html超链接的代码应该这样写：<br style="line-height: normal" /></p><pre style="font: 11px/18px Verdana">&lt;a href = "../wowstory/index.html"&gt;index.html&lt;/a&gt;</pre><pre style="font: 11px/18px Verdana"> </pre><pre style="font: 11px/18px Verdana"><h3 style="line-height: normal">如何表示下级目录</h3><p style="line-height: normal">引用下级目录的文件，直接写下级目录文件的路径即可。</p><p style="line-height: normal">假设info.html路径是：c:/Inetpub/wwwroot/sites/blabla/info.html<br style="line-height: normal" />假设index.html路径是：c:/Inetpub/wwwroot/sites/blabla/html/index.html<br style="line-height: normal" />在info.html加入index.html超链接的代码应该这样写：<br style="line-height: normal" /></p><pre style="border-bottom: gray 1px dotted; border-left: gray 1px dotted; padding-bottom: 5px; background-color: #ebebeb; margin-top: 5px; padding-left: 5px; padding-right: 5px; font: 12px 'Courier New'; margin-bottom: 5px; border-top: gray 1px dotted; border-right: gray 1px dotted; padding-top: 5px; -webkit-background-clip: initial; -webkit-background-origin: initial">&lt;a href = "html/index.html"&gt;index.html&lt;/a&gt;</pre>
<p style="line-height: normal">&nbsp;</p>
<p style="line-height: normal">假设info.html路径是：c:/Inetpub/wwwroot/sites/blabla/info.html<br style="line-height: normal" />
        
假设index.html路径是：c:/Inetpub/wwwroot/sites/blabla/html/tutorials/index.html<br style="line-height: normal" />
        
在info.html加入index.html超链接的代码应该这样写：<br style="line-height: normal" />
        
</p>
<pre style="border-bottom: gray 1px dotted; border-left: gray 1px dotted; padding-bottom: 5px; background-color: #ebebeb; margin-top: 5px; padding-left: 5px; padding-right: 5px; font: 12px 'Courier New'; margin-bottom: 5px; border-top: gray 1px dotted; border-right: gray 1px dotted; padding-top: 5px; -webkit-background-clip: initial; -webkit-background-origin: initial">&lt;a href = "html/tutorials/index.html"&gt;index.html&lt;/a&gt;</pre>
</pre></span>
<p>&nbsp;</p></div><img src ="http://www.blogjava.net/jlin/aggbug/390583.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2012-11-01 10:55 <a href="http://www.blogjava.net/jlin/articles/390583.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>大话Session (转)</title><link>http://www.blogjava.net/jlin/articles/323238.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Thu, 10 Jun 2010 07:10:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/articles/323238.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/323238.html</wfw:comment><comments>http://www.blogjava.net/jlin/articles/323238.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/323238.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/323238.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 引言&nbsp;&nbsp;&nbsp; 在web开发中，session是个非常重要的概念。在许多动态网站的开发者看来，session就是一个变量，而且其表现像个黑洞，他只需要将东西在合适的时机放进这个洞里，等需要的时候再把东西取出来。这是开发者对session最直观的感受，但是黑洞里的景象或者说session内部到底是怎么工作的呢？当笔者向身边的一些同事或朋友问及相关的更进一步的细节时，很多...&nbsp;&nbsp;<a href='http://www.blogjava.net/jlin/articles/323238.html'>阅读全文</a><img src ="http://www.blogjava.net/jlin/aggbug/323238.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2010-06-10 15:10 <a href="http://www.blogjava.net/jlin/articles/323238.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何限制同一客户端登录的用户数量以及禁止同一用户同时在不同客户端登录？ (转)</title><link>http://www.blogjava.net/jlin/articles/323214.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Thu, 10 Jun 2010 02:27:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/articles/323214.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/323214.html</wfw:comment><comments>http://www.blogjava.net/jlin/articles/323214.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/323214.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/323214.html</trackback:ping><description><![CDATA[<p>在web应用系统中，出于安全性考虑，经常需要对同一客户端登录的用户数量和一个客户同时在多个客户端登陆进行限制。具体一点就是：</p>
<p>&nbsp;&nbsp;&nbsp; 1、在同一台电脑上一次只允许有一个用户登录系统，2、一个用户在同一时间只允许在一个客户端登录。</p>
<p>&nbsp;&nbsp;&nbsp; 我最近做的一个系统就遇到了这样的问题，本来系统已经开发完成了，但是安全测评没有通过，就是因为没有做这两个限制。怎么来做这样的限制呢？我在网上找了很久，发现问这个问题的人很多，但是没有找到特别清楚的答案。后来自己摸索着，看了一些书，终于找到解决办法了。</p>
<p>&nbsp;&nbsp;&nbsp; 要解决这个问题实际上不难，对于高手来说可能都懒得去说了，但是对于不熟悉web编程的人来说可能会困扰很久。下面我把我的解决办法说出来，供大家参考！</p>
<p>&nbsp;&nbsp;&nbsp; 先介绍一下我那个系统的背景：j2ee，tomcat，没有用cookie。</p>
<p>&nbsp;&nbsp;&nbsp; 首先确定解决这两个问题的基本思路：</p>
<p>&nbsp;&nbsp;&nbsp; 1、要解决同一台电脑上只允许有一个用户登录系统，只有一个办法。监视每一个连接的来源，如果发现有一个新的连接与某个已经存在的连接来自同一台电脑，则终止其中的一个（当然，也可以提醒用户，让他自己决定终止哪一个）。</p>
<p>&nbsp;&nbsp;&nbsp; 2、要禁止一个用户账号同时在不同的客户端登录，只有监视每一个连接的用户账号，如果发现一个新连接的用户账号跟某个已经存在的连接的用户账号相同，则自动将前一个终止（同样，也可以让用户自己决定终止哪一个）。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 确定了基本思路以后，就要找具体办法了。我最初的想法是在数据库建立一张表，存放已登录用户的用户名、物理地址、Session id等信息。当用户登录时，与这张表里面的数据进行匹配，如果发现物理地址与表中的某条记录相同，则表示是同一台客户端上有多个用户再登录，如果发现正在登录的用户的用户名与表中已有记录相同而主机名不同，则表示是一个账号同时在不同的客户端使用。</p>
<p>&nbsp;&nbsp;&nbsp; 相信很多一开始遇到这个问题的人都会考虑这种解决办法。但是这种办法有很多问题，最主要的问题有两个：第一是效率，每一次都要从数据库里面取数据进行匹配。第二是用户退出时需要删除表中的记录，而当用户非正常退出时，很难及时监测（后来发现其实有办法监测）。</p>
<p>&nbsp;&nbsp;&nbsp; 后来在网上的某个帖子里面看到一位大侠提到用监听器，只是那位大侠说的太含糊，照他说的办法根本无法解决。虽然无法解决，但是提供了一个思路。于是我找了一本书，仔细看了其中关于监听器的部分。解决办法就在其中了！！！</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 监听器的详细介绍见我的下一篇博文，这里先把解决办法告诉大家：</p>
<p>监听器可以监听Session及其所包含的属性，即Attribute。</p>
<p>所以我们要做的就是：</p>
<p>1、建立一个监听器，实现HttpSessionAttributeListener接口，监听每一个Attribute的增加、编辑、删除事件。监听器中还要建立一个map，将所有的session放入这个map中。</p>
<p>2、在用户登录时将用户名、物理地址、Session id存到Session中去（可以建立一个用户登录地址数据传输对象，我建立了一个UserSessionAdd类，里面包含username，macAdd，sessionId三个属性，用户登录时将这个数据对象初始化，并存入到session中）。</p>
<p>3、每个新会话开启时，在监听器中对Session包含的属性进行判断，如果新增的属性与map中已有session的用户登录地址数据相同，则表示新会话与我们要做的两个限制相冲突。将与之冲突的会话提取出来，销毁掉！</p>
<p>这么说，还是不够清楚，下面看代码：</p>
<p>&nbsp;</p>
<p>Web.xml文件：</p>
<p>&lt;listener&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;listener-class&gt;监听器类的路径，如：com.web.MyListener&lt;/ listener-class &gt;</p>
<p>&lt;/listener&gt;</p>
<p>&nbsp;</p>
<p>用户登录地址数据传输对象：</p>
<p>public class UserSessionAdd {</p>
<p>&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; private String add;</p>
<p>&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; private String sessid;</p>
<p>&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; private String username</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; public String getUsername(){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return username</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; Public void setUsername(String username){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.username=username;</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public String getIp() {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return add;</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void setAdd(String add) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.add = add;</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public String getSessid() {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return sessid;</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void setSessid(String sessid) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.sessid = sessid;</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; </p>
<p>}</p>
<p>&nbsp;</p>
<p>用户登录的代码：</p>
<p>&#183;&#183;&#183;</p>
<p>String userHost = request.getRemoteHost();</p>
<p>String sessionId = request.getSession().getId();</p>
<p>UserSessionAdd usa = new UserSessionAdd();</p>
<p>usa.setUsername(username);</p>
<p>usa.setSessid(sessionId);</p>
<p>usa.setAdd(userHost);</p>
<p>request.getSession().setAttribute(&#8220;usa&#8221;,usa);</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>监听器代码：</p>
<p>public class MyListener implements HttpSessionAttributeListener{</p>
<p>&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp; Map&lt;String, HttpSession&gt; map = new HashMap&lt;String, HttpSession&gt;();</p>
<p>&nbsp;&nbsp;&nbsp; public void attributeAdded(HttpSessionBindingEvent event) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String name = event.getName();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(name.equals("usa")){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UserSessionAdd usa = (UserSessionAdd)event.getValue();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(map.get(usa.getAdd())!=null){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpSession sess = map.get(usa.getAdd());</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UserSessionAdd usa1 = (UserSessionAdd)sess.getAttribute("usa");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sess.removeAttribute("usa");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sess.invalidate();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.put(usa.getAdd(), event.getSession());</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; public void attributeRemoved(HttpSessionBindingEvent event) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String name = event.getName();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(name.equals("usa")){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UserSessionAdd usa = (UserSessionAdd)event.getValue();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.remove(usa.getAdd());</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; public void attributeReplaced(HttpSessionBindingEvent event) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // TODO Auto-generated method stub</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ````</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<p>&nbsp;</p>
<p>本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/yutan_313/archive/2010/03/22/5405934.aspx</p>
<img src ="http://www.blogjava.net/jlin/aggbug/323214.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2010-06-10 10:27 <a href="http://www.blogjava.net/jlin/articles/323214.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>防止出现乱码，J2EE项目统一使用UTF-8编码设置方法(转)</title><link>http://www.blogjava.net/jlin/articles/322681.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Thu, 03 Jun 2010 14:33:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/articles/322681.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/322681.html</wfw:comment><comments>http://www.blogjava.net/jlin/articles/322681.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/322681.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/322681.html</trackback:ping><description><![CDATA[1.数据库建立为UTF-8格式 <br />
2.项目右键属性为UTF-8格式 <br />
3.所有页面申明为UTF-8 <br />
4.JDBC URL设为：UTF-8 <br />
jdbc:mysql://localhost:3306/company?useUnicode=true&amp;characterEncoding=utf-8 <br />
5.数据库Driver选择UTF-8格式 <br />
6.Tomcat编码改成UTF-8 <br />
在server.xml里面增加URIEncoding="UTF-8" <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Xml代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://wanglei8.javaeye.com/blog/265770#"><img alt="复制代码" src="http://wanglei8.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol class="dp-xml">
    <li><span><span class="tag">&lt;</span><span class="tag-name">Connector</span><span>&nbsp;</span><span class="attribute">port</span><span>=</span><span class="attribute-value">"8080"</span><span>&nbsp;</span><span class="attribute">maxHttpHeaderSize</span><span>=</span><span class="attribute-value">"8192"</span><span>&nbsp;</span><span class="attribute">maxThreads</span><span>=</span><span class="attribute-value">"150"</span><span>&nbsp;</span><span class="attribute">minSpareThreads</span><span>=</span><span class="attribute-value">"25"</span><span>&nbsp;</span><span class="attribute">maxSpareThreads</span><span>=</span><span class="attribute-value">"75"</span><span>&nbsp;</span><span class="attribute">enableLookups</span><span>=</span><span class="attribute-value">"false"</span><span>&nbsp;</span><span class="attribute">redirectPort</span><span>=</span><span class="attribute-value">"8443"</span><span>&nbsp;</span><span class="attribute">acceptCount</span><span>=</span><span class="attribute-value">"100"</span><span>&nbsp;</span><span class="attribute">connectionTimeout</span><span>=</span><span class="attribute-value">"20000"</span><span>&nbsp;</span><span class="attribute">disableUploadTimeout</span><span>=</span><span class="attribute-value">"true"</span><span>&nbsp;</span><span class="attribute">URIEncoding</span><span>=</span><span class="attribute-value">"UTF-8"</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre style="display: none" class="xml" name="code">&lt;Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" /&gt;
</pre>
<br />
7.加编码过滤器SetCharacterEncodingFilter.java&nbsp; <br />
注意：根据所在包名确定具体使用哪个包 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://wanglei8.javaeye.com/blog/265770#"><img alt="复制代码" src="http://wanglei8.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span class="keyword">import</span><span>&nbsp;java.io.IOException; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;javax.servlet.Filter; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;javax.servlet.FilterChain; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;javax.servlet.FilterConfig; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;javax.servlet.ServletException; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;javax.servlet.ServletRequest; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span class="keyword">import</span><span>&nbsp;javax.servlet.ServletResponse; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;SetCharacterEncodingFilter&nbsp;</span><span class="keyword">implements</span><span>&nbsp;Filter&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">protected</span><span>&nbsp;String&nbsp;encoding&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">protected</span><span>&nbsp;FilterConfig&nbsp;filterConfig&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;ignore&nbsp;=&nbsp;</span><span class="keyword">true</span><span>; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;init(FilterConfig&nbsp;filterConfig)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;ServletException&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.filterConfig&nbsp;=&nbsp;filterConfig; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.encoding&nbsp;=&nbsp;filterConfig.getInitParameter(</span><span class="string">"encoding"</span><span>); &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;value&nbsp;=&nbsp;filterConfig.getInitParameter(</span><span class="string">"ignore"</span><span>); &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(value&nbsp;==&nbsp;</span><span class="keyword">null</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.ignore&nbsp;=&nbsp;</span><span class="keyword">true</span><span>; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;</span><span class="keyword">if</span><span>&nbsp;(value.equalsIgnoreCase(</span><span class="string">"true"</span><span>)) &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.ignore&nbsp;=&nbsp;</span><span class="keyword">true</span><span>; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;</span><span class="keyword">if</span><span>&nbsp;(value.equalsIgnoreCase(</span><span class="string">"yes"</span><span>)) &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.ignore&nbsp;=&nbsp;</span><span class="keyword">true</span><span>; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.ignore&nbsp;=&nbsp;</span><span class="keyword">false</span><span>; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;doFilter(ServletRequest&nbsp;request,&nbsp;ServletResponse&nbsp;response, &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FilterChain&nbsp;chain)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;IOException,&nbsp;ServletException&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;TODO&nbsp;自动生成方法存根 </span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(ignore&nbsp;||&nbsp;(request.getCharacterEncoding()&nbsp;==&nbsp;</span><span class="keyword">null</span><span>))&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;encoding&nbsp;=&nbsp;selectEncoding(request); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(encoding&nbsp;!=&nbsp;</span><span class="keyword">null</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.setCharacterEncoding(encoding); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chain.doFilter(request,&nbsp;response); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;destroy()&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;TODO&nbsp;自动生成方法存根 </span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.encoding&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">this</span><span>.filterConfig&nbsp;=&nbsp;</span><span class="keyword">null</span><span>; &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">protected</span><span>&nbsp;String&nbsp;selectEncoding(ServletRequest&nbsp;request)&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;(</span><span class="keyword">this</span><span>.encoding); &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre style="display: none" class="java" name="code">import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class SetCharacterEncodingFilter implements Filter {
protected String encoding = null;
protected FilterConfig filterConfig = null;
protected boolean ignore = true;
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
String value = filterConfig.getInitParameter("ignore");
if (value == null)
this.ignore = true;
else if (value.equalsIgnoreCase("true"))
this.ignore = true;
else if (value.equalsIgnoreCase("yes"))
this.ignore = true;
else
this.ignore = false;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO 自动生成方法存根
if (ignore || (request.getCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
if (encoding != null)
request.setCharacterEncoding(encoding);
}
chain.doFilter(request, response);
}
public void destroy() {
// TODO 自动生成方法存根
this.encoding = null;
this.filterConfig = null;
}
protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
</pre>
<br />
<br />
在web.xml里面映射配置 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Xml代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://wanglei8.javaeye.com/blog/265770#"><img alt="复制代码" src="http://wanglei8.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol class="dp-xml">
    <li><span><span class="tag">&lt;</span><span class="tag-name">filter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>Set&nbsp;Character&nbsp;Encoding</span><span class="tag">&lt;/</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">filter-class</span><span class="tag">&gt;</span><span>com.yourcompany.util.SetCharacterEncodingFilter</span><span class="tag">&lt;/</span><span class="tag-name">filter-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">init-param</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">param-name</span><span class="tag">&gt;</span><span>encoding</span><span class="tag">&lt;/</span><span class="tag-name">param-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">param-value</span><span class="tag">&gt;</span><span>UTF-8</span><span class="tag">&lt;/</span><span class="tag-name">param-value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">init-param</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="tag">&lt;/</span><span class="tag-name">filter</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="tag">&lt;</span><span class="tag-name">filter-mapping</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>Set&nbsp;Character&nbsp;Encoding</span><span class="tag">&lt;/</span><span class="tag-name">filter-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>/*</span><span class="tag">&lt;/</span><span class="tag-name">url-pattern</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="tag">&lt;/</span><span class="tag-name">filter-mapping</span><span class="tag">&gt;</span><span>&nbsp;</span></li>
</ol>
</div>
<img src ="http://www.blogjava.net/jlin/aggbug/322681.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2010-06-03 22:33 <a href="http://www.blogjava.net/jlin/articles/322681.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>weblogic.xml,web.xml配置文件模板（转）</title><link>http://www.blogjava.net/jlin/articles/311424.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Sun, 31 Jan 2010 14:42:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/articles/311424.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/311424.html</wfw:comment><comments>http://www.blogjava.net/jlin/articles/311424.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/311424.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/311424.html</trackback:ping><description><![CDATA[<p>----------------------------------<a>7.0sp2</a>&nbsp; weblogic.xml------------------------------------------------------------------<br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 7.0//EN" "<a href="http://www.bea.com/servers/wls700/dtd/weblogic700-web-jar.dtd"><font color="#002c99">http://www.bea.com/servers/wls700/dtd/weblogic700-web-jar.dtd</font></a>"&gt;<br />
&lt;weblogic-web-app&gt;<br />
&nbsp; &lt;jsp-descriptor&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;jsp-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;compileFlags&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;-g&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/jsp-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;jsp-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;keepgenerated&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;true&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/jsp-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;jsp-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;encoding&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;GBK&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/jsp-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;jsp-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;workingDir&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;/home/webdev/barcelona/WEB-INF/workingdir/&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/jsp-param&gt;<br />
&nbsp; &lt;/jsp-descriptor&gt;<br />
&nbsp; &lt;charset-params&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;input-charset&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;resource-path&gt;/*&lt;/resource-path&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;java-charset-name&gt;GBK&lt;/java-charset-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/input-charset&gt;<br />
&nbsp; &lt;/charset-params&gt;<br />
&nbsp; &lt;context-root&gt;&lt;/context-root&gt;<br />
&lt;/weblogic-web-app&gt;<br />
<br />
----------------------------------<a>8.1sp2</a>&nbsp; weblogic.xml------------------------------------------------------------------<br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "<a href="http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd"><font color="#002c99">http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd</font></a>"&gt;<br />
&lt;weblogic-web-app&gt;<br />
&nbsp; &lt;jsp-descriptor&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;jsp-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;compileFlags&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;-g&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/jsp-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;jsp-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;keepgenerated&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;true&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/jsp-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;jsp-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;encoding&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;GBK&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/jsp-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;jsp-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;workingDir&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;/home/webdev/html/guanli/WEB-INF/workingdir/&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/jsp-param&gt;<br />
&nbsp; &lt;/jsp-descriptor&gt;<br />
&nbsp; &lt;charset-params&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;input-charset&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;resource-path&gt;/*&lt;/resource-path&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;java-charset-name&gt;GBK&lt;/java-charset-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/input-charset&gt;<br />
&nbsp; &lt;/charset-params&gt;<br />
&nbsp; &lt;context-root&gt;guanli&lt;/context-root&gt;<br />
&lt;/weblogic-web-app&gt;<br />
</p>
<p>----------------------------------------------web.xml--------------------------------------------------------------<br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "<a href="http://java.sun.com/dtd/web-app_2_3.dtd"><font color="#002c99">http://java.sun.com/dtd/web-app_2_3.dtd</font></a>"&gt;<br />
&lt;web-app&gt;<br />
&nbsp; &lt;display-name&gt;bbs_fcb&lt;/display-name&gt;<br />
&nbsp; &lt;welcome-file-list&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;bbs.jsp&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;index.htm&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br />
&nbsp; &lt;/welcome-file-list&gt;<br />
&lt;/web-app&gt;<br />
</p>
<p>&nbsp;</p>
<p><span id="c_23572">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "<a href="http://java.sun.com/dtd/web-app_2_3.dtd"><font color="#002c99">http://java.sun.com/dtd/web-app_2_3.dtd</font></a>"&gt;<br />
&lt;web-app&gt;<br />
&nbsp; &lt;display-name&gt;bbs_huati&lt;/display-name&gt;<br />
&nbsp; &lt;welcome-file-list&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;bbs.jsp&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;index.htm&lt;/welcome-file&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br />
&nbsp; &lt;/welcome-file-list&gt;<br />
&nbsp; &lt;error-page&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;error-code&gt;404&lt;/error-code&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;location&gt;/404.html&lt;/location&gt;<br />
&nbsp; &lt;/error-page&gt;<br />
&nbsp; &lt;error-page&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;error-code&gt;500&lt;/error-code&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;location&gt;/500.html&lt;/location&gt;<br />
&nbsp; &lt;/error-page&gt;<br />
&lt;/web-app&gt;</span></p>
<br />
<br />
<p id="TBPingURL">Trackback: http://tb.donews.net/TrackBack.aspx?PostId=882456</p>
<img src ="http://www.blogjava.net/jlin/aggbug/311424.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2010-01-31 22:42 <a href="http://www.blogjava.net/jlin/articles/311424.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HttpServletRequest getQueryString()（转）</title><link>http://www.blogjava.net/jlin/articles/311383.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Sun, 31 Jan 2010 06:08:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/articles/311383.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/311383.html</wfw:comment><comments>http://www.blogjava.net/jlin/articles/311383.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/311383.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/311383.html</trackback:ping><description><![CDATA[api第一句：Returns the query string that is contained in the request URL after the path，这就说明它只对get方法抛的数据有效。post方法传的参数getQueryString将什么都得不到。<br />
<br />
我的总结：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.UnsupportedEncodingException;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.net.URLEncoder;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Enumeration;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.http.HttpServletRequest;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><br />
<img id="Codehighlighter1_176_2024_Open_Image" onclick="this.style.display='none'; Codehighlighter1_176_2024_Open_Text.style.display='none'; Codehighlighter1_176_2024_Closed_Image.style.display='inline'; Codehighlighter1_176_2024_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_176_2024_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_176_2024_Closed_Text.style.display='none'; Codehighlighter1_176_2024_Open_Image.style.display='inline'; Codehighlighter1_176_2024_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;QueryString&nbsp;</span><span id="Codehighlighter1_176_2024_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_176_2024_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;StringBuffer&nbsp;query&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StringBuffer();<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_277_303_Open_Image" onclick="this.style.display='none'; Codehighlighter1_277_303_Open_Text.style.display='none'; Codehighlighter1_277_303_Closed_Image.style.display='inline'; Codehighlighter1_277_303_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_277_303_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_277_303_Closed_Text.style.display='none'; Codehighlighter1_277_303_Open_Image.style.display='inline'; Codehighlighter1_277_303_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;QueryString(String&nbsp;name,&nbsp;String&nbsp;value)&nbsp;</span><span id="Codehighlighter1_277_303_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_277_303_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;encode(name,&nbsp;value);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_363_410_Open_Image" onclick="this.style.display='none'; Codehighlighter1_363_410_Open_Text.style.display='none'; Codehighlighter1_363_410_Closed_Image.style.display='inline'; Codehighlighter1_363_410_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_363_410_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_363_410_Closed_Text.style.display='none'; Codehighlighter1_363_410_Open_Image.style.display='inline'; Codehighlighter1_363_410_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">synchronized</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;add(String&nbsp;name,&nbsp;String&nbsp;value)&nbsp;</span><span id="Codehighlighter1_363_410_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_363_410_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query.append(</span><span style="color: #000000">'</span><span style="color: #000000">&amp;</span><span style="color: #000000">'</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;encode(name,&nbsp;value);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_474_698_Open_Image" onclick="this.style.display='none'; Codehighlighter1_474_698_Open_Text.style.display='none'; Codehighlighter1_474_698_Closed_Image.style.display='inline'; Codehighlighter1_474_698_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_474_698_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_474_698_Closed_Text.style.display='none'; Codehighlighter1_474_698_Open_Image.style.display='inline'; Codehighlighter1_474_698_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">synchronized</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;encode(String&nbsp;name,&nbsp;String&nbsp;value)&nbsp;</span><span id="Codehighlighter1_474_698_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_474_698_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_482_624_Open_Image" onclick="this.style.display='none'; Codehighlighter1_482_624_Open_Text.style.display='none'; Codehighlighter1_482_624_Closed_Image.style.display='inline'; Codehighlighter1_482_624_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_482_624_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_482_624_Closed_Text.style.display='none'; Codehighlighter1_482_624_Open_Image.style.display='inline'; Codehighlighter1_482_624_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_482_624_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_482_624_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query.append(URLEncoder.encode(name,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">UTF-8</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query.append(</span><span style="color: #000000">'</span><span style="color: #000000">=</span><span style="color: #000000">'</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;value.replaceAll(</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">%20</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;query.append(value);<br />
<img id="Codehighlighter1_665_693_Open_Image" onclick="this.style.display='none'; Codehighlighter1_665_693_Open_Text.style.display='none'; Codehighlighter1_665_693_Closed_Image.style.display='inline'; Codehighlighter1_665_693_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_665_693_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_665_693_Closed_Text.style.display='none'; Codehighlighter1_665_693_Open_Image.style.display='inline'; Codehighlighter1_665_693_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(UnsupportedEncodingException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_665_693_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_665_693_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_727_757_Open_Image" onclick="this.style.display='none'; Codehighlighter1_727_757_Open_Text.style.display='none'; Codehighlighter1_727_757_Closed_Image.style.display='inline'; Codehighlighter1_727_757_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_727_757_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_727_757_Closed_Text.style.display='none'; Codehighlighter1_727_757_Open_Image.style.display='inline'; Codehighlighter1_727_757_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;getQuery()&nbsp;</span><span id="Codehighlighter1_727_757_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_727_757_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;query.toString();<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_786_810_Open_Image" onclick="this.style.display='none'; Codehighlighter1_786_810_Open_Text.style.display='none'; Codehighlighter1_786_810_Closed_Image.style.display='inline'; Codehighlighter1_786_810_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_786_810_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_786_810_Closed_Text.style.display='none'; Codehighlighter1_786_810_Open_Image.style.display='inline'; Codehighlighter1_786_810_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;toString()&nbsp;</span><span id="Codehighlighter1_786_810_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_786_810_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;getQuery();<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_816_951_Open_Image" onclick="this.style.display='none'; Codehighlighter1_816_951_Open_Text.style.display='none'; Codehighlighter1_816_951_Closed_Image.style.display='inline'; Codehighlighter1_816_951_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_816_951_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_816_951_Closed_Text.style.display='none'; Codehighlighter1_816_951_Open_Image.style.display='inline'; Codehighlighter1_816_951_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_816_951_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_816_951_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;直接接受request<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;注：request中提供的getQueryString方法只对Get方法才能生效，<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;在我们不知道方法的情况下最好重写getQueryString<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;request<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@return</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_1018_1809_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1018_1809_Open_Text.style.display='none'; Codehighlighter1_1018_1809_Closed_Image.style.display='inline'; Codehighlighter1_1018_1809_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1018_1809_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1018_1809_Closed_Text.style.display='none'; Codehighlighter1_1018_1809_Open_Image.style.display='inline'; Codehighlighter1_1018_1809_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;String&nbsp;getQueryString(HttpServletRequest&nbsp;request)&nbsp;</span><span id="Codehighlighter1_1018_1809_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1018_1809_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;first&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuffer&nbsp;strbuf&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StringBuffer(</span><span style="color: #000000">""</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enumeration&nbsp;emParams&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;request.getParameterNames();<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">do-while</span><span style="color: #008000"><br />
<img id="Codehighlighter1_1162_1763_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1162_1763_Open_Text.style.display='none'; Codehighlighter1_1162_1763_Closed_Image.style.display='inline'; Codehighlighter1_1162_1763_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1162_1763_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1162_1763_Closed_Text.style.display='none'; Codehighlighter1_1162_1763_Open_Image.style.display='inline'; Codehighlighter1_1162_1763_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">do</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_1162_1763_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1162_1763_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_1200_1216_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1200_1216_Open_Text.style.display='none'; Codehighlighter1_1200_1216_Closed_Image.style.display='inline'; Codehighlighter1_1200_1216_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1200_1216_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1200_1216_Closed_Text.style.display='none'; Codehighlighter1_1200_1216_Open_Image.style.display='inline'; Codehighlighter1_1200_1216_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">emParams.hasMoreElements())&nbsp;</span><span id="Codehighlighter1_1200_1216_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1200_1216_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;sParam&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(String)&nbsp;emParams.nextElement();<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;sValues&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;request.getParameterValues(sParam);&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;sValue&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_1407_1759_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1407_1759_Open_Text.style.display='none'; Codehighlighter1_1407_1759_Closed_Image.style.display='inline'; Codehighlighter1_1407_1759_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1407_1759_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1407_1759_Closed_Text.style.display='none'; Codehighlighter1_1407_1759_Open_Image.style.display='inline'; Codehighlighter1_1407_1759_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;sValues.length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_1407_1759_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1407_1759_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sValue&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sValues[i];<br />
<img id="Codehighlighter1_1506_1605_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1506_1605_Open_Text.style.display='none'; Codehighlighter1_1506_1605_Closed_Image.style.display='inline'; Codehighlighter1_1506_1605_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1506_1605_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1506_1605_Closed_Text.style.display='none'; Codehighlighter1_1506_1605_Open_Image.style.display='inline'; Codehighlighter1_1506_1605_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(sValue&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;sValue.trim().length()&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;first&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_1506_1605_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1506_1605_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">第一个参数</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;first&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strbuf.append(sParam).append(</span><span style="color: #000000">"</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">).append(sValue);<br />
<img id="Codehighlighter1_1681_1754_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1681_1754_Open_Text.style.display='none'; Codehighlighter1_1681_1754_Closed_Image.style.display='inline'; Codehighlighter1_1681_1754_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1681_1754_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1681_1754_Closed_Text.style.display='none'; Codehighlighter1_1681_1754_Open_Image.style.display='inline'; Codehighlighter1_1681_1754_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(sValue&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;sValue.trim().length()&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;first&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_1681_1754_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1681_1754_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strbuf.append(</span><span style="color: #000000">"</span><span style="color: #000000">&amp;</span><span style="color: #000000">"</span><span style="color: #000000">).append(sParam).append(</span><span style="color: #000000">"</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">).append(sValue);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">true</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;strbuf.toString();<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_1853_2022_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1853_2022_Open_Text.style.display='none'; Codehighlighter1_1853_2022_Closed_Image.style.display='inline'; Codehighlighter1_1853_2022_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1853_2022_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1853_2022_Closed_Text.style.display='none'; Codehighlighter1_1853_2022_Open_Image.style.display='inline'; Codehighlighter1_1853_2022_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String&nbsp;args[])&nbsp;</span><span id="Codehighlighter1_1853_2022_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_1853_2022_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QueryString&nbsp;qs&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;QueryString(</span><span style="color: #000000">"</span><span style="color: #000000">parms1</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">1</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;qs.add(</span><span style="color: #000000">"</span><span style="color: #000000">parms</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">2</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;qs.add(</span><span style="color: #000000">"</span><span style="color: #000000">parms</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">3</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(qs.toString());&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">parms1=1&amp;parms=2&amp;parms=3</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
</span></div>
<img src ="http://www.blogjava.net/jlin/aggbug/311383.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2010-01-31 14:08 <a href="http://www.blogjava.net/jlin/articles/311383.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>过滤器过滤特殊符号</title><link>http://www.blogjava.net/jlin/articles/311382.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Sun, 31 Jan 2010 05:37:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/articles/311382.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/311382.html</wfw:comment><comments>http://www.blogjava.net/jlin/articles/311382.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/311382.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/311382.html</trackback:ping><description><![CDATA[<p>首先，列出我用到的参考资料吧：</p>
<p>资料一来自：http://magicgod.javaeye.com/blog/146537 </p>
<p>资料二来自：http://blog.sina.com.cn/s/blog_56000153010005iq.html </p>
<p>我就是根据上面的两个资料，写了一个FILTER和一个JAVA 类，具体如下： </p>
<p>FILTER: SpecialCharacterFilter </p>
<p>view plaincopy to clipboardprint?<br />
&nbsp; <br />
import java.io.IOException;&nbsp;&nbsp; <br />
&nbsp; <br />
import java.util.Enumeration;&nbsp;&nbsp; <br />
&nbsp; <br />
import java.util.HashMap;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
import javax.servlet.Filter;&nbsp;&nbsp; <br />
&nbsp; <br />
import javax.servlet.FilterChain;&nbsp;&nbsp; <br />
&nbsp; <br />
import javax.servlet.FilterConfig;&nbsp;&nbsp; <br />
&nbsp; <br />
import javax.servlet.ServletException;&nbsp;&nbsp; <br />
&nbsp; <br />
import javax.servlet.ServletRequest;&nbsp;&nbsp; <br />
&nbsp; <br />
import javax.servlet.ServletResponse;&nbsp;&nbsp; <br />
&nbsp; <br />
import javax.servlet.http.HttpServlet;&nbsp;&nbsp; <br />
&nbsp; <br />
import javax.servlet.http.HttpServletRequest;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
public class SpecialCharacterFilter extends HttpServlet implements Filter {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; protected FilterConfig config;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; public void destroy() {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; public void doFilter(ServletRequest req, ServletResponse res,&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FilterChain chain) throws IOException, ServletException {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("[SpecialCharacterFilter] : doFilter *************");&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpServletRequest request = (HttpServletRequest)req;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HashMap&lt;String, String[]&gt; m = new HashMap(request.getParameterMap());&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HashMap&lt;String, String[]&gt; mm = new HashMap&lt;String, String[]&gt;();&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Enumeration&lt;String&gt; enu = request.getParameterNames();&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(m.size() &gt; 0 &amp;&amp; processParameters(m, enu, mm)) {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ParameterRequestWrapper wrapRequest = new ParameterRequestWrapper(request, mm);&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chain.doFilter(wrapRequest, res);&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chain.doFilter(req, res);&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; public void init(FilterConfig arg0) throws ServletException {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.config = arg0;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; public boolean processParameters(HashMap&lt;String, String[]&gt; m, Enumeration enu, HashMap&lt;String, String[]&gt; mm) {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("[SpecialCharacterFilter] : processParameters *************");&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (m != null &amp;&amp; enu != null) {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (enu.hasMoreElements()) {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String key = (String)enu.nextElement();&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String [] values = (String [])m.get(key);&nbsp;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i = 0; i &lt; values.length; i ++) {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (values[i] != null) {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; values[i] = values[i].trim();&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; values[i] = values[i].replaceAll("&amp;", "&amp;");&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; values[i] = values[i].replaceAll("&lt;", "&lt;");&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; values[i] = values[i].replaceAll("&gt;", "&gt;");&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; values[i] = values[i].replaceAll("\t", "&nbsp;&nbsp;&nbsp; ");&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; values[i] = values[i].replaceAll("\r\n", "\n");&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; values[i] = values[i].replaceAll("\n", "&lt;br&gt;");&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; values[i] = values[i].replaceAll("&nbsp; ", "&nbsp; ");&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; values[i] = values[i].replaceAll("'", "'");&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; values[i] = values[i].replaceAll("\\\\", "\");&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mm.put(key, values);&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
}&nbsp; </p>
<p><br />
import java.io.IOException;</p>
<p>import java.util.Enumeration;</p>
<p>import java.util.HashMap;</p>
<p>&nbsp;</p>
<p>import javax.servlet.Filter;</p>
<p>import javax.servlet.FilterChain;</p>
<p>import javax.servlet.FilterConfig;</p>
<p>import javax.servlet.ServletException;</p>
<p>import javax.servlet.ServletRequest;</p>
<p>import javax.servlet.ServletResponse;</p>
<p>import javax.servlet.http.HttpServlet;</p>
<p>import javax.servlet.http.HttpServletRequest;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>public class SpecialCharacterFilter extends HttpServlet implements Filter {</p>
<p>&nbsp;</p>
<p>&nbsp;protected FilterConfig config;</p>
<p>&nbsp;</p>
<p>&nbsp;public void destroy() {</p>
<p>&nbsp;}</p>
<p>&nbsp;</p>
<p>&nbsp;public void doFilter(ServletRequest req, ServletResponse res,</p>
<p>&nbsp;&nbsp;&nbsp;FilterChain chain) throws IOException, ServletException {</p>
<p>&nbsp;&nbsp;System.out.println("[SpecialCharacterFilter] : doFilter *************");</p>
<p>&nbsp;&nbsp;HttpServletRequest request = (HttpServletRequest)req;</p>
<p>&nbsp;&nbsp;HashMap&lt;String, String[]&gt; m = new HashMap(request.getParameterMap());</p>
<p>&nbsp;&nbsp;HashMap&lt;String, String[]&gt; mm = new HashMap&lt;String, String[]&gt;();</p>
<p>&nbsp;&nbsp;Enumeration&lt;String&gt; enu = request.getParameterNames();</p>
<p>&nbsp;&nbsp;if(m.size() &gt; 0 &amp;&amp; processParameters(m, enu, mm)) {</p>
<p>&nbsp;&nbsp;&nbsp;ParameterRequestWrapper wrapRequest = new ParameterRequestWrapper(request, mm);</p>
<p>&nbsp;&nbsp;&nbsp;chain.doFilter(wrapRequest, res);</p>
<p>&nbsp;&nbsp;} else {</p>
<p>&nbsp;&nbsp;&nbsp;chain.doFilter(req, res);</p>
<p>&nbsp;&nbsp;}</p>
<p>&nbsp;}</p>
<p>&nbsp;</p>
<p>&nbsp;public void init(FilterConfig arg0) throws ServletException {</p>
<p>&nbsp;&nbsp;this.config = arg0;</p>
<p>&nbsp;}</p>
<p>&nbsp;</p>
<p>&nbsp;public boolean processParameters(HashMap&lt;String, String[]&gt; m, Enumeration enu, HashMap&lt;String, String[]&gt; mm) {</p>
<p>&nbsp;&nbsp;System.out.println("[SpecialCharacterFilter] : processParameters *************");</p>
<p>&nbsp;&nbsp;if (m != null &amp;&amp; enu != null) {</p>
<p>&nbsp;&nbsp;&nbsp;while (enu.hasMoreElements()) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;String key = (String)enu.nextElement();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;String [] values = (String [])m.get(key); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;for(int i = 0; i &lt; values.length; i ++) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (values[i] != null) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;values[i] = values[i].trim();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;values[i] = values[i].replaceAll("&amp;", "&amp;");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;values[i] = values[i].replaceAll("&lt;", "&lt;");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;values[i] = values[i].replaceAll("&gt;", "&gt;");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;values[i] = values[i].replaceAll("\t", "&nbsp;&nbsp;&nbsp; ");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;values[i] = values[i].replaceAll("\r\n", "\n");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;values[i] = values[i].replaceAll("\n", "&lt;br&gt;");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;values[i] = values[i].replaceAll("&nbsp; ", "&nbsp; ");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;values[i] = values[i].replaceAll("'", "'");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;values[i] = values[i].replaceAll("\\\\", "\");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;mm.put(key, values);</p>
<p>&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;return true;</p>
<p>&nbsp;}</p>
<p>&nbsp;</p>
<p>}<br />
view plaincopy to clipboardprint?<br />
JAVA 类：ParameterRequestWrapper&nbsp;&nbsp; </p>
<p>JAVA 类：ParameterRequestWrapper view plaincopy to clipboardprint?<br />
&lt;PRE class=java name="code"&gt;import java.util.Enumeration;&nbsp;&nbsp; <br />
&nbsp; <br />
import java.util.Map;&nbsp;&nbsp; <br />
&nbsp; <br />
import java.util.Vector;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
import javax.servlet.http.HttpServletRequest;&nbsp;&nbsp; <br />
&nbsp; <br />
import javax.servlet.http.HttpServletRequestWrapper;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
public class ParameterRequestWrapper extends HttpServletRequestWrapper {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; private Map params;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; public ParameterRequestWrapper(HttpServletRequest request, Map newParams) {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super(request);&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.params = newParams;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; public Map getParameterMap() {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return params;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; public Enumeration getParameterNames() {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Vector l = new Vector(params.keySet());&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return l.elements();&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; public String[] getParameterValues(String name) {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object v = params.get(name);&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (v == null) {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (v instanceof String[]) {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (String[]) v;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (v instanceof String) {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new String[] { (String) v };&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new String[] { v.toString() };&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; public String getParameter(String name) {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object v = params.get(name);&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (v == null) {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (v instanceof String[]) {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] strArr = (String[]) v;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strArr.length &gt; 0) {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return strArr[0];&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (v instanceof String) {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (String) v;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return v.toString();&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
}&nbsp;&nbsp; <br />
&lt;/PRE&gt;&nbsp;&nbsp; <br />
&lt;PRE class=java name="code"&gt;最后，还是写一下WEB.XML的配置吧：&lt;/PRE&gt;&nbsp;&nbsp; <br />
&lt;PRE class=java name="code"&gt;&lt;PRE class=xml name="code"&gt; &lt;filter&gt;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;specialCharacterFilter&lt;/filter-name&gt;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; com.fhn.vismp.common.SpecialCharacterFilter&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/filter-class&gt;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;/filter&gt;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;filter-mapping&gt;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;specialCharacterFilter&lt;/filter-name&gt;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;*.do&lt;/url-pattern&gt;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;/filter-mapping&gt;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;filter-mapping&gt;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;specialCharacterFilter&lt;/filter-name&gt;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;*.jsp&lt;/url-pattern&gt;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;/filter-mapping&gt;&lt;/PRE&gt;&nbsp;&nbsp; <br />
&nbsp; <br />
&lt;/PRE&gt;&nbsp; </p>
<p><br />
本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/wanchengpeng/archive/2008/07/09/2628926.aspx</p>
 <img src ="http://www.blogjava.net/jlin/aggbug/311382.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2010-01-31 13:37 <a href="http://www.blogjava.net/jlin/articles/311382.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java过滤器-Filter过滤器的使用</title><link>http://www.blogjava.net/jlin/articles/309383.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Wed, 13 Jan 2010 15:18:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/articles/309383.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/309383.html</wfw:comment><comments>http://www.blogjava.net/jlin/articles/309383.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/309383.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/309383.html</trackback:ping><description><![CDATA[<p style="margin: 0cm 0cm 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><font size="3"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">过滤是</span><span lang="EN-US">SERVLET2</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span><span lang="EN-US">3</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">规范新有的功能，目前</span><span lang="EN-US">TOMCAT4</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span><span lang="EN-US">WEBLOGIC7</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">都已支持。它能实现很多以前使用不便或很难实现的功能，在</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">产品体系中，我们可以很好地使用</span><span lang="EN-US">SERVLET</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">过滤，使得各个部件可以在保持系统统一权限控制的前提下，来实现各个独自的个性权限系统。</span></font></p>
<p style="margin: 0cm 0cm 0pt"><font size="3"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下面先看下</span><span lang="EN-US">SERVLET</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">过滤是如何工作的，如下图</span></font></p>
<h3 style="margin: 13pt 0cm"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="5">优点</font></span></h3>
<p style="margin: 0cm 0cm 0pt"><font size="3"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和传统架构相比，</span><span lang="EN-US">SERVLET</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">过滤的优点如下：</span></font></p>
<p><font face="宋体" size="3">在传统架构中：</font></p>
<ul type="disc">
    <li style="margin: 0cm 0cm 12pt; mso-margin-top-alt: auto; tab-stops: list 36.0pt; mso-list: l0 level1 lfo2"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">每次接受到请求，挂钩式方法就被调用，不论它们是否执行（有时甚至是空的）。</font></span>
    <li style="margin: 0cm 0cm 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l0 level1 lfo2"><font size="3"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法的作用域及并发关系（每个方法可能在不同的线程上被调用）不允许在处理相同的请求时简单、高效地共享不同挂钩式方法调用间的变量和信息。</span></font> </li>
</ul>
<p><font face="宋体"><font size="3">在<span lang="EN-US">SERVLET过滤中：</span></font></font></p>
<ul type="disc">
    <li style="margin: 0cm 0cm 12pt; mso-margin-top-alt: auto; tab-stops: list 36.0pt; mso-list: l3 level1 lfo3"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"><font size="3">嵌套的方法调用通过一系列过滤器实现，它仅有应用于当前请求的过滤器组成；基于挂钩式调用的传统执行方式需要在处理短句中调用挂钩式例程，即使一个特定短句的处理逻辑不起任何作用。</font></span>
    <li style="margin: 0cm 0cm 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l3 level1 lfo3"><font size="3"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">局部变量在实际的过滤方法返回之前都作保留，并且可用（因为上游过滤器的调用总在堆栈上，等待后续调用的返回）。</span></font> </li>
</ul>
<h3 style="margin: 13pt 0cm"><span style="font-size: 10.5pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 16.0pt">过滤的实现</span></h3>
<p><span style="font-size: 10.5pt; mso-bidi-font-size: 12.0pt"><font face="宋体">调用链</font></span><span lang="EN-US" style="font-size: 10.5pt; mso-bidi-font-size: 12.0pt"><br />
<font face="宋体">所有过滤器都服从调用的过滤器链，并通过定义明确的接口得到执行。一个执行过滤器的 Java 类必须执行这一 </font></span><code><span lang="EN-US" style="font-size: 10.5pt; font-family: 黑体; mso-bidi-font-size: 10.0pt">javax.servlet.Filter</span></code><span lang="EN-US" style="font-size: 10.5pt; mso-bidi-font-size: 12.0pt"><font face="宋体"> 接口。这一接口含有三个过滤器必须执行的方法：</font></span></p>
<ul type="disc">
    <li style="margin: 0cm 0cm 12pt; mso-margin-top-alt: auto; tab-stops: list 36.0pt; mso-list: l1 level1 lfo4"><font size="3"><code><span lang="EN-US" style="font-family: 黑体; mso-ansi-font-size: 10.5pt">doFilter(ServletRequest, ServletResponse, FilterChain)</span></code><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：这是一个完成过滤行为的方法。这同样是上游过滤器调用的方法。引入的</span><code><span lang="EN-US" style="font-family: 黑体; mso-ansi-font-size: 10.5pt">FilterChain</span></code><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象提供了后续过滤器所要调用的信息。</span></font>
    <li style="margin: 0cm 0cm 12pt; mso-margin-top-alt: auto; tab-stops: list 36.0pt; mso-list: l1 level1 lfo4"><font size="3"><code><span lang="EN-US" style="font-family: 黑体; mso-ansi-font-size: 10.5pt">init(FilterConfig)</span></code><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：这是一个容器所调用的初始化方法。它保证了在第一次</span><code><span lang="EN-US" style="font-family: 黑体; mso-ansi-font-size: 10.5pt">doFilter()</span></code><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">调用前由容器调用。您能获取在</span><span lang="EN-US"> web.xml </span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件中指定的初始化参数。</span></font>
    <li style="margin: 0cm 0cm 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l1 level1 lfo4"><font size="3"><code><span lang="EN-US" style="font-family: 黑体; mso-ansi-font-size: 10.5pt">destroy()</span></code><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：容器在破坏过滤器实例前，</span><code><span lang="EN-US" style="font-family: 黑体; mso-ansi-font-size: 10.5pt">doFilter()</span></code><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的所有活动都被该实例终止后，调用该方法。</span></font> </li>
</ul>
<p><span style="font-size: 10.5pt; mso-bidi-font-size: 12.0pt"><font face="宋体">嵌套调用在 </font></span><code><span lang="EN-US" style="font-size: 10.5pt; font-family: 黑体; mso-bidi-font-size: 10.0pt">doFilter()</span></code><span lang="EN-US" style="font-size: 10.5pt; mso-bidi-font-size: 12.0pt"><font face="宋体"> 方法执行中发生。除非您建立一个过滤器明确阻止所有后续处理（通过其它过滤器及资源处理器），否则过滤器一定会在 </font></span><code><span lang="EN-US" style="font-size: 10.5pt; font-family: 黑体; mso-bidi-font-size: 10.0pt">doFilter</span></code><span lang="EN-US" style="font-size: 10.5pt; mso-bidi-font-size: 12.0pt"><font face="宋体"> 方法中作以下的调用：</font></span></p>
<p style="margin: 0cm 0cm 0pt"><code><span lang="EN-US" style="font-family: 黑体; mso-ansi-font-size: 10.5pt"><font size="3">FilterChain.doFilter(request, response);</font></span></code></p>
<p style="margin: 0cm 0cm 0pt"><code><span lang="EN-US" style="font-family: 黑体; mso-ansi-font-size: 10.5pt"><font size="3"></font></span></code>&nbsp;</p>
<p><span style="font-size: 10.5pt; mso-bidi-font-size: 12.0pt"><font face="宋体">安装过滤器：定义与映射</font></span><span lang="EN-US" style="font-size: 10.5pt; mso-bidi-font-size: 12.0pt"><br />
<font face="宋体">容器通过 Web 应用程序中</font></span></p>
<p>的配置描述符 web.xml 文件了解过滤器。有两个新的标记与过滤器相关：<code><span lang="EN-US" style="font-size: 10.5pt; font-family: 黑体; mso-bidi-font-size: 10.0pt">&lt;filter&gt;</span></code><span lang="EN-US" style="font-size: 10.5pt; mso-bidi-font-size: 12.0pt"><font face="宋体"> 和 </font></span><code><span lang="EN-US" style="font-size: 10.5pt; font-family: 黑体; mso-bidi-font-size: 10.0pt">&lt;filter-mapping&gt;</span></code><span style="font-size: 10.5pt; mso-bidi-font-size: 12.0pt"><font face="宋体">。应该指定它们为<span lang="EN-US"> web.xml 文件内 </span></font></span><code><span lang="EN-US" style="font-size: 10.5pt; font-family: 黑体; mso-bidi-font-size: 10.0pt">&lt;web-app&gt;</span></code><span lang="EN-US" style="font-size: 10.5pt; mso-bidi-font-size: 12.0pt"><font face="宋体"> 标记的子标记。</font></span></p>
<p><span style="font-size: 10.5pt; mso-bidi-font-size: 12.0pt"><font face="宋体">过滤器定义的元素</font></span><span lang="EN-US" style="font-size: 10.5pt; mso-bidi-font-size: 12.0pt"><br />
</span><code><span lang="EN-US" style="font-size: 10.5pt; font-family: 黑体; mso-bidi-font-size: 10.0pt">&lt;filter&gt;</span></code><span lang="EN-US" style="font-size: 10.5pt; mso-bidi-font-size: 12.0pt"><font face="宋体"> 标记是一个过滤器定义，它必定有一个 </font></span><code><span lang="EN-US" style="font-size: 10.5pt; font-family: 黑体; mso-bidi-font-size: 10.0pt">&lt;filter- name&gt;</span></code><span lang="EN-US" style="font-size: 10.5pt; mso-bidi-font-size: 12.0pt"><font face="宋体"> 和 </font></span><code><span lang="EN-US" style="font-size: 10.5pt; font-family: 黑体; mso-bidi-font-size: 10.0pt">&lt;filter-class&gt;</span></code><span lang="EN-US" style="font-size: 10.5pt; mso-bidi-font-size: 12.0pt"><font face="宋体"> 子元素。</font></span><code><span lang="EN-US" style="font-size: 10.5pt; font-family: 黑体; mso-bidi-font-size: 10.0pt">&lt;filter-name&gt;</span></code><span lang="EN-US" style="font-size: 10.5pt; mso-bidi-font-size: 12.0pt"><font face="宋体"> 子元素给出了一个与过滤器实例相关的、基于文本的名字。</font></span><code><span lang="EN-US" style="font-size: 10.5pt; font-family: 黑体; mso-bidi-font-size: 10.0pt">&lt;filter-class&gt;</span></code><span lang="EN-US" style="font-size: 10.5pt; mso-bidi-font-size: 12.0pt"><font face="宋体"> 指定了由容器载入的实际类。您能随意地包含一个 </font></span><code><span lang="EN-US" style="font-size: 10.5pt; font-family: 黑体; mso-bidi-font-size: 10.0pt">&lt;init-param&gt;</span></code><span lang="EN-US" style="font-size: 10.5pt; mso-bidi-font-size: 12.0pt"><font face="宋体"> 子元素为过滤器实例提供初始化参数。例如，下面的过滤器定义指定了一个叫做 </font></span><code><span lang="EN-US" style="font-size: 10.5pt; font-family: 黑体; mso-bidi-font-size: 10.0pt">IE Filter</span></code><span lang="EN-US" style="font-size: 10.5pt; mso-bidi-font-size: 12.0pt"><font face="宋体"> 的过滤器：</font></span></p>
一、使浏览器不缓存页面的过滤器&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
import javax.servlet.*;&nbsp;&nbsp;&nbsp;&nbsp;<br />
import javax.servlet.http.HttpServletResponse;&nbsp;&nbsp;&nbsp;&nbsp;<br />
import java.io.IOException;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
/**&nbsp;&nbsp;&nbsp;<br />
* 用于的使 Browser 不缓存页面的过滤器&nbsp;&nbsp;&nbsp;<br />
*/&nbsp;&nbsp;&nbsp;<br />
public class ForceNoCacheFilter implements Filter {&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException&nbsp;&nbsp;&nbsp;&nbsp;<br />
{&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; ((HttpServletResponse) response).setHeader("Cache-Control","no-cache");&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; ((HttpServletResponse) response).setHeader("Pragma","no-cache");&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; ((HttpServletResponse) response).setDateHeader ("Expires", -1);&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; filterChain.doFilter(request, response);&nbsp;&nbsp;&nbsp;&nbsp;<br />
}&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
public void destroy()&nbsp;&nbsp;&nbsp;&nbsp;<br />
{&nbsp;&nbsp;&nbsp;&nbsp;<br />
}&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void init(FilterConfig filterConfig) throws ServletException&nbsp;&nbsp;&nbsp;&nbsp;<br />
{&nbsp;&nbsp;&nbsp;&nbsp;<br />
}&nbsp;&nbsp;&nbsp;&nbsp;<br />
}&nbsp;&nbsp;&nbsp;&nbsp;<br />
二、检测用户是否登陆的过滤器<br />
1.写个过滤器<br />
<span class="keyword">import</span><span>&nbsp;javax.servlet.Filter; &nbsp;&nbsp;</span>
<li><span class="keyword">import</span><span>&nbsp;javax.servlet.FilterConfig; &nbsp;&nbsp;</span></span>
<li><span class="keyword">import</span><span>&nbsp;javax.servlet.ServletException; &nbsp;&nbsp;</span></span>
<li><span class="keyword">import</span><span>&nbsp;javax.servlet.ServletRequest; &nbsp;&nbsp;</span></span>
<li><span class="keyword">import</span><span>&nbsp;javax.servlet.ServletResponse; &nbsp;&nbsp;</span></span>
<li><span class="keyword">import</span><span>&nbsp;javax.servlet.FilterChain; &nbsp;&nbsp;</span></span>
<li><span class="keyword">import</span><span>&nbsp;java.io.IOException; &nbsp;&nbsp;</span></span>
<li><span class="keyword">import</span><span>&nbsp;javax.servlet.http.HttpServletRequest; &nbsp;&nbsp;</span></span>
<li><span class="keyword">import</span><span>&nbsp;javax.servlet.http.HttpSession; &nbsp;&nbsp;</span></span>
<li><span class="keyword">import</span><span>&nbsp;javax.servlet.http.HttpServletResponse; &nbsp;&nbsp;</span></span>
<li><span>&nbsp;&nbsp;</span>
<li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;RightFilter &nbsp;&nbsp;</span></span>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">implements</span><span>&nbsp;Filter&nbsp;{ &nbsp;&nbsp;</span></span>
<li><span>&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;init(FilterConfig&nbsp;filterConfig)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;ServletException&nbsp;{ &nbsp;&nbsp;</span></span>
<li><span>&nbsp;&nbsp;} &nbsp;&nbsp;</span>
<li><span>&nbsp;&nbsp;</span>
<li><span>&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;doFilter(ServletRequest&nbsp;request,&nbsp;ServletResponse&nbsp;response, &nbsp;&nbsp;</span></span>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FilterChain&nbsp;chain)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;IOException,&nbsp;ServletException&nbsp;{ &nbsp;&nbsp;</span></span>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;HttpServletRequest&nbsp;req&nbsp;=&nbsp;(HttpServletRequest)&nbsp;request; &nbsp;&nbsp;</span>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;HttpServletResponse&nbsp;res&nbsp;=&nbsp;(HttpServletResponse)&nbsp;response; &nbsp;&nbsp;</span>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;HttpSession&nbsp;session&nbsp;=&nbsp;req.getSession(</span><span class="keyword">true</span><span>); &nbsp;&nbsp;</span></span>
<li><span>&nbsp;&nbsp;</span>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//从session里取的用户名信息 </span><span>&nbsp;&nbsp;</span></span>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;username&nbsp;=&nbsp;(String)&nbsp;session.getAttribute(</span><span class="string">"username"</span><span>); &nbsp;&nbsp;</span></span>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//判断如果没有取到用户信息,就跳转到登陆页面 </span><span>&nbsp;&nbsp;</span></span>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(username&nbsp;==&nbsp;</span><span class="keyword">null</span><span>&nbsp;||&nbsp;</span><span class="string">""</span><span>.equals(username))&nbsp;{ &nbsp;&nbsp;</span></span>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//跳转到登陆页面 </span><span>&nbsp;&nbsp;</span></span>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res.sendRedirect(</span><span class="string">"http://"</span><span>+req.getHeader(</span><span class="string">"Host"</span><span>)+</span><span class="string">"/login.jsp"</span><span>); &nbsp;&nbsp;</span></span>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">else</span><span>&nbsp;{ &nbsp;&nbsp;</span></span>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//已经登陆,继续此次请求 </span><span>&nbsp;&nbsp;</span></span>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chain.doFilter(request,response); &nbsp;&nbsp;</span>
<li><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
<li><span>&nbsp;&nbsp;} &nbsp;&nbsp;</span>
<li><span>&nbsp;&nbsp;</span>
<li><span>&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;destroy()&nbsp;{ &nbsp;&nbsp;</span></span>
<li><span>&nbsp;&nbsp;} &nbsp;&nbsp;</span>
<li><span>}&nbsp;&nbsp;&nbsp;</span>
<p>2.然后在web.xml里配置需要登陆权限验证的JSP文件:&nbsp;&nbsp;&nbsp;<br />
&nbsp;a.如果是某个具体的JSP文件(如a.jsp)需要登陆验证<br />
<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&lt;</span><span style="color: #000000">web</span><span style="color: #000000">-</span><span style="color: #000000">app</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" /><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">filter</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">right</span><span style="color: #000000">&lt;/</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">&gt;</span><span style="color: #000000">com.taihuatalk.taihua.common.RightFilter</span><span style="color: #000000">&lt;/</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">filter</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">mapping</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">right</span><span style="color: #000000">&lt;/</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">url</span><span style="color: #000000">-</span><span style="color: #000000">pattern</span><span style="color: #000000">&gt;/</span><span style="color: #000000">a.jsp</span><span style="color: #000000">&lt;/</span><span style="color: #000000">url</span><span style="color: #000000">-</span><span style="color: #000000">pattern</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">mapping</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" /><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">web</span><span style="color: #000000">-</span><span style="color: #000000">app</span><span style="color: #000000">&gt;</span></div>
<p>&nbsp;&nbsp; b.如果是某一个目录(如a/目录)整个目录下的文件都需要登陆验证:<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&lt;</span><span style="color: #000000">web</span><span style="color: #000000">-</span><span style="color: #000000">app</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" /><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">filter</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">right</span><span style="color: #000000">&lt;/</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">&gt;</span><span style="color: #000000">com.taihuatalk.taihua.common.RightFilter</span><span style="color: #000000">&lt;/</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #0000ff">class</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;/</span><span style="color: #000000">filter</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">mapping</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000">right</span><span style="color: #000000">&lt;/</span><span style="color: #000000">filter</span><span style="color: #000000">-</span><span style="color: #000000">name</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">url</span><span style="color: #000000">-</span><span style="color: #000000">pattern</span><span style="color: #000000">&gt;/</span><span style="color: #000000">a</span><span id="Codehighlighter1_226_280_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_226_280_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">&lt;/url-pattern&gt;<br />
&nbsp;&nbsp;&lt;/filter-mapping&gt;<br />
&nbsp;&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" /><br />
&lt;/web-app&gt;<br />
</span></span></div>
三、字符编码的过滤器&nbsp;&nbsp;&nbsp;&nbsp;<br />
import javax.servlet.*;&nbsp;&nbsp;&nbsp;&nbsp;<br />
import java.io.IOException;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
/**&nbsp;&nbsp;&nbsp;<br />
* 用于设置 HTTP 请求字符编码的过滤器，通过过滤器参数encoding指明使用何种字符编码,用于处理Html Form请求参数的中文问题&nbsp;&nbsp;&nbsp;<br />
*/&nbsp;&nbsp;&nbsp;<br />
public class CharacterEncodingFilter&nbsp;&nbsp;&nbsp;&nbsp;<br />
implements Filter&nbsp;&nbsp;&nbsp;&nbsp;<br />
{&nbsp;&nbsp;&nbsp;&nbsp;<br />
protected FilterConfig filterConfig = null;&nbsp;&nbsp;&nbsp;&nbsp;<br />
protected String encoding = "";&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException&nbsp;&nbsp;&nbsp;&nbsp;<br />
{&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(encoding != null)&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; servletRequest.setCharacterEncoding(encoding);&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filterChain.doFilter(servletRequest, servletResponse);&nbsp;&nbsp;&nbsp;&nbsp;<br />
}&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
public void destroy()&nbsp;&nbsp;&nbsp;&nbsp;<br />
{&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; filterConfig = null;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; encoding = null;&nbsp;&nbsp;&nbsp;&nbsp;<br />
}&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void init(FilterConfig filterConfig) throws ServletException&nbsp;&nbsp;&nbsp;&nbsp;<br />
{&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.filterConfig = filterConfig;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.encoding = filterConfig.getInitParameter("encoding");&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
}&nbsp;&nbsp;&nbsp;&nbsp;<br />
}&nbsp;&nbsp;&nbsp;&nbsp;<br />
<p>2、在web.xml中做一些设置<br />
&nbsp;&lt;filter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;code&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;CharacterEncodingFilter&lt;/filter-class&gt; <br />
&lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;encoding&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;GBK&lt;/param-value&gt;<br />
&lt;/init-param&gt;<br />
&lt;/filter&gt;<br />
<br />
<br />
&nbsp;&nbsp;&lt;filter-mapping&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;code&lt;/filter-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />
&nbsp;&lt;/filter-mapping&gt;</p>
</li>
<br />
<img src ="http://www.blogjava.net/jlin/aggbug/309383.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2010-01-13 23:18 <a href="http://www.blogjava.net/jlin/articles/309383.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 在TOMCAT下配置工程的默认访问(转)</title><link>http://www.blogjava.net/jlin/articles/304562.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Wed, 02 Dec 2009 14:56:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/articles/304562.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/304562.html</wfw:comment><comments>http://www.blogjava.net/jlin/articles/304562.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/304562.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/304562.html</trackback:ping><description><![CDATA[<p>对工程的部署一般是将工程的压缩文件放在tomcat安装目录的webapps下，访问时通过键入：http://localhost:8080/xx(假定为本机访问，xx是部署时的应用工程的访问名字）。 而如果直接键入：http://localhost:8080出来的将是tomcat自带的欢迎页面，如何让键入http://localhost:8080出来的是自己的应用工程的页面呢？在这里希望和大家一起探讨一下。</p>
<p>在Tomcat默认安装后，tomcat的主目录是webapps/root目录，所以如果想改变tomcat的主目录的话可以如下所做，所以第一种方法是：<br />
打开C:/Tomcat/conf/server.xml，在&lt;host&gt;&lt;/host&gt;之间加入代码：&lt;Context docBase="C:/Program Files/Apache Software Foundation/Tomcat 5.5/webapps/dolphin" path="" debug="0"&nbsp; reloadable="true"/&gt;<br />
这样重新启动tomcat，我们的主目录就被设置为dolphin这个项目了。</p>
<p>第二种方法是：<br />
将tomcat安装目录下的ROOT下的所有文件全部删除，然后将工程的解压后的文件全部拷进去。</p>
<p>第三种方法是：<br />
Tomcat5.0以下版本在C:/Tomcat/conf/Catalina/localhost目录下会自动生成了一个ROOT.Xml，但是5.0以上版本不再生成此文件，所以可以新建个ROOT.xml,在里面加入如下代码：<br />
&lt;?Xml version='1.0' encoding='utf-8'?&gt;<br />
&lt;Context crossContext="true" docBase=""C:/Program Files/Apache Software Foundation/Tomcat 5.5/webapps/dolphin"" path="" reloadable="true"&gt;<br />
&lt;/Context&gt;</p>
<p>&nbsp;</p>
<p>本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/zhangguo117/archive/2008/04/14/2290515.aspx</p>
<img src ="http://www.blogjava.net/jlin/aggbug/304562.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2009-12-02 22:56 <a href="http://www.blogjava.net/jlin/articles/304562.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>浅谈JSP页面跳转与请求转发(转)</title><link>http://www.blogjava.net/jlin/articles/290465.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Sun, 09 Aug 2009 14:39:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/articles/290465.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/290465.html</wfw:comment><comments>http://www.blogjava.net/jlin/articles/290465.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/290465.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/290465.html</trackback:ping><description><![CDATA[<span style="color: #000000; background-color: #ffff00"><a class="singleposttitle" id="viewpost1_TitleUrl" href="http://www.blogjava.net/haizhige/archive/2008/10/19/235300.html">request之请求转发</a> <br />
a0.jsp<br />
&lt;%</span><span id="Codehighlighter1_2_45_Open_Text"><span style="color: #000000; background-color: #f5f5f5">@&nbsp;page&nbsp;contentType</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">text/html;&nbsp;charset=GBK</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span></span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />请求参数输入页面<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body&nbsp;</span><span style="color: #ff0000">bgcolor</span><span style="color: #0000ff">="#ffffff"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">h1</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />请求参数输入页面<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">h1</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">form&nbsp;</span><span style="color: #ff0000">action</span><span style="color: #0000ff">="a1.jsp"</span><span style="color: #ff0000">&nbsp;method</span><span style="color: #0000ff">="POST"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">table&nbsp;</span><span style="color: #ff0000">border</span><span style="color: #0000ff">="1"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">用户名:</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">input&nbsp;&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="text"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="name"</span><span style="color: #0000ff">/&gt;&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">性别:</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="radio"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="sex"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="男"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">男<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="radio"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="sex"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="女"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">女<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">兴趣爱好:</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="checkbox"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="interest"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="上网"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">上网<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="checkbox"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="interest"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="旅游"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">旅游<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="checkbox"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="interest"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="阅读"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">阅读<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">table</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="submit"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="submit"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="提交"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">form</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;<br />
</span>a1.jsp的code如下：
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_2_44_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2_44_Open_Text.style.display='none'; Codehighlighter1_2_44_Closed_Image.style.display='inline'; Codehighlighter1_2_44_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_2_44_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2_44_Closed_Text.style.display='none'; Codehighlighter1_2_44_Open_Image.style.display='inline'; Codehighlighter1_2_44_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000; background-color: #ffff00">&lt;%</span><span id="Codehighlighter1_2_44_Open_Text"><span style="color: #000000; background-color: #f5f5f5">@&nbsp;page&nbsp;contentType</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">text/html;&nbsp;charset=GBK</span><span style="color: #000000; background-color: #f5f5f5">"</span></span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">接收请求参数</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body&nbsp;</span><span style="color: #ff0000">bgcolor</span><span style="color: #0000ff">="#ffffff"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">h1</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">接收客户端请求数据</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">h1</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img id="Codehighlighter1_138_325_Open_Image" onclick="this.style.display='none'; Codehighlighter1_138_325_Open_Text.style.display='none'; Codehighlighter1_138_325_Closed_Image.style.display='inline'; Codehighlighter1_138_325_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_138_325_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_138_325_Closed_Text.style.display='none'; Codehighlighter1_138_325_Open_Image.style.display='inline'; Codehighlighter1_138_325_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #000000; background-color: #ffff00">&lt;%</span><span id="Codehighlighter1_138_325_Open_Text"><span style="color: #000000; background-color: #f5f5f5"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;request.setCharacterEncoding(</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">GBK</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">String</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;name&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;request.getParameter(</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">name</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">String</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;sex&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;request.getParameter(</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">sex</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">String</span><span style="color: #000000; background-color: #f5f5f5">[]&nbsp;interest&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;request.getParameterValues(</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">interest</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span></span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">table&nbsp;</span><span style="color: #ff0000">border</span><span style="color: #0000ff">="1"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">用户名:</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000; background-color: #ffff00">&lt;%</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">name</span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">性别:</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000; background-color: #ffff00">&lt;%</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">sex</span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">兴趣爱好:</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img id="Codehighlighter1_480_583_Open_Image" onclick="this.style.display='none'; Codehighlighter1_480_583_Open_Text.style.display='none'; Codehighlighter1_480_583_Closed_Image.style.display='inline'; Codehighlighter1_480_583_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_480_583_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_480_583_Closed_Text.style.display='none'; Codehighlighter1_480_583_Open_Image.style.display='inline'; Codehighlighter1_480_583_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; background-color: #ffff00">&lt;%</span><span id="Codehighlighter1_480_583_Open_Text"><span style="color: #000000; background-color: #f5f5f5"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5">for</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;(</span><span style="color: #0000ff; background-color: #f5f5f5">int</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;i&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">0</span><span style="color: #000000; background-color: #f5f5f5">;&nbsp;i&nbsp;</span><span style="color: #000000; background-color: #f5f5f5">&lt;</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;interest.length;&nbsp;i</span><span style="color: #000000; background-color: #f5f5f5">++</span><span style="color: #000000; background-color: #f5f5f5">)&nbsp;{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print(interest[i]);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print(</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">,</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">table</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img id="Codehighlighter1_613_707_Open_Image" onclick="this.style.display='none'; Codehighlighter1_613_707_Open_Text.style.display='none'; Codehighlighter1_613_707_Closed_Image.style.display='inline'; Codehighlighter1_613_707_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_613_707_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_613_707_Closed_Text.style.display='none'; Codehighlighter1_613_707_Open_Image.style.display='inline'; Codehighlighter1_613_707_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #000000; background-color: #ffff00">&lt;%</span><span id="Codehighlighter1_613_707_Open_Text"><span style="color: #000000; background-color: #f5f5f5"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;RequestDispatcher&nbsp;rd</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">request.getRequestDispatcher(</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">ra3.jsp</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;rd.forward(request,response);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span></span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span></div>
a2.jsp的code如下：
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_2_45_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2_45_Open_Text.style.display='none'; Codehighlighter1_2_45_Closed_Image.style.display='inline'; Codehighlighter1_2_45_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_2_45_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2_45_Closed_Text.style.display='none'; Codehighlighter1_2_45_Open_Image.style.display='inline'; Codehighlighter1_2_45_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000; background-color: #ffff00">&lt;%</span><span id="Codehighlighter1_2_45_Open_Text"><span style="color: #000000; background-color: #f5f5f5">@&nbsp;page&nbsp;contentType</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">text/html;&nbsp;charset=GBK</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;</span></span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />dispatcher转发结果显示页面<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body&nbsp;</span><span style="color: #ff0000">bgcolor</span><span style="color: #0000ff">="#ffffff"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">h1</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />dispatcher转发结果显示页面<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">h1</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />name参数的值是:</span><span style="color: #000000; background-color: #ffff00">&lt;%</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">request.getParameter(</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">name</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">)</span><span style="color: #000000; background-color: #ffff00">%&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span></div>
<br />
<p>JSP页面跳转与请求转发收藏</p>
<p>1、response.sendRedirect(url)</p>
<p>是指请求重定向，原来页面的参数在这里是得不到的，即用request.getParameter("param")返回的是null</p>
<p>2、forward请求转发，指将原页面的request,response对象传入新的页面，因此这新旧页面拥有相同的 request,response对象。这样request.getParameter("param")就可以得到相应的值 </p>
<p>3、区分ServletContext.getRequestDispatcher与 ServletRequest.getRequestDispatcher</p>
<p>ServletContext.getRequestDispatcher 路径必须是相对上下文的绝对路径 </p>
<p>ServletRequest.getRequestDispatcher 可以是相对也可以是绝对 </p>
<p>4、注意的一点是：使用forward转发后在浏览器上看到的地址栏显示的是转发前的还不是转发后的。如由test.jsp向good.jsp转发了，那么地址栏显示的是test.jsp.这是因为forward是在服务器端进行的，浏览器根本不知道，而重定向是在客户端进行的，所以使用response.sentRedirect("red.jsp")会直接定向到red.jsp。由此想到index.jsp如果请求的是servlet那么在servlet中进行forawrd转发到另一个red.jsp页面，但当查看结果时，在地址栏显示的将只是servlet的名称而不是red.jsp，如果你想知道最终看到的页面的名称那只有查代码了。</p>
<p>reference it:</p>
<p>服务器端进行转向的4种方法： </p>
<p>1. ServletContext的getRequestDispatcher() </p>
<p>2. ServletContext的getNamedDispatcher() </p>
<p>3. ServletRequest的getRequestDispatcher() </p>
<p>4. ServletResponse的sendRedirect()进行转向。 </p>
<p>1.2.3 =&gt; forward() 4. sendRedirect() </p>
<p>使用forward方法，因为这些这样比较高效。只有在forward方法不能使用时（比如要转向到一个非本web应用），再使用ServletResponse的sendRedirect()方法。 </p>
<p>&lt;jsp:fordward&gt;与 sendRedirect 方法的比较 </p>
<p>虽然 &lt;jsp:fordward&gt;与 sendRedirect 方法，都可以将浏览器浏览的网页，重导至另一个网页，但是两者在原理上是不太相同。 </p>
<p>a. &lt;jsp:fordward&gt; : 动作是利用伺服端，将资料输出至缓冲区的机制，在前一个网页尚未输出到客户端前，取消资料的输出，然后输出另一个网页的资料，达到重导浏览器的效果。 </p>
<p>优点: 两网页间可以分享 request 对象内的变量。 </p>
<p>b. sendRedirect : 动作是透过 HTTP 协议的 Header ， 对浏览器下达重导指令，因此，不牵涉到服务器端缓冲区的问题。 </p>
<p>不过由于 sendRedirect 方法作用于客户端，所以重导前后网页无法分享存在于 request 对象内的变量。 <br />
Solution: response.sendRedirect(&#8220;sendRedirect.htm?name=sparkwu&amp;E-Mail=spark.wu@cobra-tech.com&#8221;)</p>
<br />
<img src ="http://www.blogjava.net/jlin/aggbug/290465.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2009-08-09 22:39 <a href="http://www.blogjava.net/jlin/articles/290465.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>weblogic: TokenStreamIOException的解决方法(转)</title><link>http://www.blogjava.net/jlin/articles/262297.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Fri, 27 Mar 2009 02:14:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/articles/262297.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/262297.html</wfw:comment><comments>http://www.blogjava.net/jlin/articles/262297.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/262297.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/262297.html</trackback:ping><description><![CDATA[<div><a href="http://blufiles.storage.live.com/y1pDUE_rXMl6Qz_xudQPrNqkWmb6GUtPIESRIMB64zclat0MIXlHhDIYyAgUZ3assxY" target="_blank"></a>在weblogic有时会有TokenStreamIOException（unix或linux系统）异常出现：</div>
<div>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman">Root cause of ServletException.</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman">weblogic.utils.ParsingException: nested TokenStreamException: antlr.TokenStreamIOException</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>at weblogic.servlet.jsp.JspLexer.parse(JspLexer.java(Compiled Code))</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>at weblogic.servlet.jsp.JspParser.doit(JspParser.java:106)</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>at weblogic.servlet.jsp.JspParser.parse(JspParser.java:234)</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>at weblogic.servlet.jsp.Jsp2Java.outputs(Jsp2Java.java:125)</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>at weblogic.utils.compiler.CodeGenerator.generate(CodeGenerator.java:258)</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>at weblogic.servlet.jsp.JspStub.compilePage(JspStub.java:388)</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>at weblogic.servlet.jsp.JspStub.prepareServlet(JspStub.java:238)</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>at weblogic.servlet.jsp.JspStub.prepareServlet(JspStub.java:188)</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>at weblogic.servlet.internal.ServletStubImpl.getServlet(ServletStubImpl.java(Compiled Code))</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java(Compiled Code))</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java(Compiled Code))</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:322)</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>at edu.yale.its.tp.cas.servlet.Login.doGet(Login.java:188)</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code))</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java(Inlined Compiled Code))</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;</span>at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java(Compiled Code))</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java(Inlined Compiled Code))</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java(Compiled Code))</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java(Compiled Code))</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>at weblogic.security.service.SecurityManager.runAs(SecurityManager.java(Inlined Compiled Code))</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java(Compiled Code))</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java(Compiled Code))</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java(Compiled Code))</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)</font></font></span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt"><font color="#000000"><font face="Times New Roman">&gt;&nbsp;</font></font></span>
<p style="margin: 0cm 0cm 0pt"><font color="#000000"><span style="font-size: 9pt; font-family: 宋体">原因：中文编码问题</span></font>
<p style="margin: 0cm 0cm 0pt"><font color="#000000"><span style="font-size: 9pt; font-family: 宋体">解决：在</span><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">web.xml</font></span><span style="font-size: 9pt; font-family: 宋体">里加上过滤</span><span lang="EN-US" style="font-size: 9pt"><font face="Times New Roman">:</font></span></font>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&lt;</span><span lang="EN-US" style="font-size: 9pt; color: #3f7f7f; font-family: 宋体">filter</span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&gt;</span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt; color: black; font-family: 宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&lt;</span><span lang="EN-US" style="font-size: 9pt; color: #3f7f7f; font-family: 宋体">filter-name</span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&gt;</span><span lang="EN-US" style="font-size: 9pt; color: black; font-family: 宋体">Set Character Encoding</span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&lt;/</span><span lang="EN-US" style="font-size: 9pt; color: #3f7f7f; font-family: 宋体">filter-name</span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&gt;</span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt; color: black; font-family: 宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&lt;</span><span lang="EN-US" style="font-size: 9pt; color: #3f7f7f; font-family: 宋体">filter-class</span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&gt;</span><span lang="EN-US" style="font-size: 9pt; color: black; font-family: 宋体">edu.yale.its.tp.cas.SetCharacterEncodingFilter</span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&lt;/</span><span lang="EN-US" style="font-size: 9pt; color: #3f7f7f; font-family: 宋体">filter-class</span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&gt;</span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt; color: black; font-family: 宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&lt;</span><span lang="EN-US" style="font-size: 9pt; color: #3f7f7f; font-family: 宋体">init-param</span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&gt;</span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt; color: black; font-family: 宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&lt;</span><span lang="EN-US" style="font-size: 9pt; color: #3f7f7f; font-family: 宋体">param-name</span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&gt;</span><span lang="EN-US" style="font-size: 9pt; color: black; font-family: 宋体">encoding</span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&lt;/</span><span lang="EN-US" style="font-size: 9pt; color: #3f7f7f; font-family: 宋体">param-name</span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&gt;</span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt; color: black; font-family: 宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&lt;</span><span lang="EN-US" style="font-size: 9pt; color: #3f7f7f; font-family: 宋体">param-value</span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&gt;</span><span lang="EN-US" style="font-size: 9pt; color: black; font-family: 宋体">GB2312</span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&lt;/</span><span lang="EN-US" style="font-size: 9pt; color: #3f7f7f; font-family: 宋体">param-value</span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&gt;</span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt; color: black; font-family: 宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&lt;/</span><span lang="EN-US" style="font-size: 9pt; color: #3f7f7f; font-family: 宋体">init-param</span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&gt;</span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt; color: black; font-family: 宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&lt;/</span><span lang="EN-US" style="font-size: 9pt; color: #3f7f7f; font-family: 宋体">filter</span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&gt;</span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt; color: black; font-family: 宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&lt;</span><span lang="EN-US" style="font-size: 9pt; color: #3f7f7f; font-family: 宋体">filter-mapping</span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&gt;</span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt; color: black; font-family: 宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&lt;</span><span lang="EN-US" style="font-size: 9pt; color: #3f7f7f; font-family: 宋体">filter-name</span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&gt;</span><span lang="EN-US" style="font-size: 9pt; color: black; font-family: 宋体">Set Character Encoding</span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&lt;/</span><span lang="EN-US" style="font-size: 9pt; color: #3f7f7f; font-family: 宋体">filter-name</span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&gt;</span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt; color: black; font-family: 宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&lt;</span><span lang="EN-US" style="font-size: 9pt; color: #3f7f7f; font-family: 宋体">url-pattern</span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&gt;</span><span lang="EN-US" style="font-size: 9pt; color: black; font-family: 宋体">/*</span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&lt;/</span><span lang="EN-US" style="font-size: 9pt; color: #3f7f7f; font-family: 宋体">url-pattern</span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&gt;</span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt; color: black; font-family: 宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&lt;/</span><span lang="EN-US" style="font-size: 9pt; color: #3f7f7f; font-family: 宋体">filter-mapping</span><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">&gt;</span>
<p style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-size: 9pt; color: teal; font-family: 宋体">--------------</span><span lang="EN-US" style="font-size: 9pt; color: black; font-family: 宋体">//SetCharacterEncodingFilter</span><span style="font-size: 9pt; color: black; font-family: 宋体">类是中文过滤类</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">package edu.yale.its.tp.cas;</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">import java.io.IOException;<br />
import javax.servlet.Filter;<br />
import javax.servlet.FilterChain;<br />
import javax.servlet.FilterConfig;<br />
import javax.servlet.ServletException;<br />
import javax.servlet.ServletRequest;<br />
import javax.servlet.ServletResponse;</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">/**<br />
&nbsp;* Example filter that sets the character encoding to be used in parsing the</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;* incoming request, either unconditionally or only if the client did not</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;* specify a character encoding.</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;* 如果原来没有设置request的编码，就设置；否则保持不变</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;*/</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">public class SetCharacterEncodingFilter<br />
&nbsp;&nbsp;&nbsp; implements Filter {</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp; protected String encoding = null;</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp; protected FilterConfig filterConfig = null;</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp; protected boolean ignore = true;</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp; /**<br />
&nbsp;&nbsp; * Take this filter out of service.</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp; */</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp; public void destroy() {</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; this.encoding = null;</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; this.filterConfig = null;</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp; }</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp; /**<br />
&nbsp;&nbsp; * Select and set (if specified) the character encoding to be used to</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp; * interpret request parameters for this request.</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp; */</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp; public void doFilter(ServletRequest request, ServletResponse response,</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FilterChain chain)</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws IOException, ServletException {</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">// Conditionally select and set the character encoding to be used</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; if (ignore || (request.getCharacterEncoding() == null)) {</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String encoding = selectEncoding(request);</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (encoding != null) {</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.setCharacterEncoding(encoding); //设置request编码的地方</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.setCharacterEncoding("gb2312"); //强制设置编码<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; }</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">// Pass control on to the next filter</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">// 传递控制到下一个过滤器</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp; chain.doFilter(request, response);</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp; }</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp; /**<br />
&nbsp;&nbsp; * Place this filter into service.</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp; * 从web-app的web.xml文件中读取初始参数的值</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp; */</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp; public void init(FilterConfig filterConfig) throws ServletException {</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; this.filterConfig = filterConfig;</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; this.encoding = filterConfig.getInitParameter("encoding");</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; String value = filterConfig.getInitParameter("ignore");</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; if (value == null) {</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.ignore = true;<br />
&nbsp;&nbsp;&nbsp; }</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; else if (value.equalsIgnoreCase("true")) {</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.ignore = true;<br />
&nbsp;&nbsp;&nbsp; }</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; else if (value.equalsIgnoreCase("yes")) {</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.ignore = true;<br />
&nbsp;&nbsp;&nbsp; }</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; else {</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.ignore = false;<br />
&nbsp;&nbsp;&nbsp; }</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp; }</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp; /**<br />
&nbsp;&nbsp; * Select an appropriate character encoding to be used, based on the</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp; * characteristics of the current request and/or filter initialization</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp; * parameters. If no character encoding should be set, return</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp; * &lt;code&gt;null&lt;/code&gt;.</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp; * 选择request原来的编码</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp; */</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp; protected String selectEncoding(ServletRequest request) {</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp;&nbsp;&nbsp; return (this.encoding);</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">&nbsp; }</span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 9pt; color: black; font-family: 宋体">}</span> </p>
</div>
<img src ="http://www.blogjava.net/jlin/aggbug/262297.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2009-03-27 10:14 <a href="http://www.blogjava.net/jlin/articles/262297.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDBC对数据库的事务操作- -(转)</title><link>http://www.blogjava.net/jlin/articles/230391.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Mon, 22 Sep 2008 04:07:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/articles/230391.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/230391.html</wfw:comment><comments>http://www.blogjava.net/jlin/articles/230391.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/230391.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/230391.html</trackback:ping><description><![CDATA[<h2><font color="#000000">JDBC对数据库的事务操作- -</font></h2>
<p><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></p>
<div>
<p style="margin-left: 18pt; text-indent: -18pt"><font face="Courier New,Courier,Monospace"><font color="#000000">1．概述：</font></font></p>
<p style="text-indent: 18pt"><font face="Courier New,Courier,Monospace"><font color="#000000">在jdbc的数据库操作中，一项事务是由一条或是多条表达式所组成的一个不可分割的工作单元。我们通过提交commit()或是回滚rollback（）来结束事务的操作。关于事务操作的方法都位于接口java.sql.Connection中。</font></font></p>
<p style="margin: 12pt 0cm 0pt 18pt; text-indent: -18pt"><font face="Courier New,Courier,Monospace"><font color="#000000">2．特点：</font></font><br clear="all" />
<font face="Courier New,Courier,Monospace"><font color="#000000">★ 在jdbc中，事务操作缺省是自动提交。也就是说，一条对数据库的更新表达式代表一项事务操作，操作成功后，系统将自动调用commit()来提交，否则将调用rollback()来回滚。</font></font><br clear="all" />
<font face="Courier New,Courier,Monospace"><font color="#000000">★ 在jdbc 中，可以通过调用setAutoCommit(false)来禁止自动提交。之后就可以把多个数据库操作的表达式作为一个事务，在操作完成后调用 commit()来进行整体提交，倘若其中一个表达式操作失败，都不会执行到commit()，并且将产生响应的异常；此时就可以在异常捕获时调用 rollback()进行回滚。这样做可以保持多次更新操作后，相关数据的一致性，示例如下：</font></font></p>
<p style="margin-top: 12pt"><font face="Courier New,Courier,Monospace"><font color="#000000">&nbsp;&nbsp;&nbsp; <span style="font-size: 9pt">try {</span></font></font></p>
<p style="margin-top: 12pt; text-indent: 31.5pt"><span style="font-size: 9pt"><font face="Courier New,Courier,Monospace"><font color="#000000">conn = </font></font></span></p>
<p style="margin-top: 12pt; text-indent: 31.5pt"><span style="font-size: 9pt"><font face="Courier New,Courier,Monospace" color="#000000">DriverManager.getConnection&nbsp;&nbsp;&nbsp; </font></span></p>
<p style="margin-top: 12pt; text-indent: 31.5pt"><span style="font-size: 9pt"><font face="Courier New,Courier,Monospace"><font color="#000000">("jdbc:oracle:thin:@host:1521:SID","username","userpwd";</font></font></span></p>
<p style="margin-top: 12pt"><span style="font-size: 9pt"><font face="Courier New,Courier,Monospace"><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn.setAutoCommit(false);//禁止自动提交，设置回滚点</font></font></span></p>
<p style="margin-top: 12pt"><span style="font-size: 9pt"><font face="Courier New,Courier,Monospace"><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stmt = conn.createStatement();</font></font></span></p>
<p style="margin-top: 12pt; text-indent: 31.5pt"><span style="font-size: 9pt"><font face="Courier New,Courier,Monospace"><font color="#000000">stmt.executeUpdate(&#8220;alter table &#8230;&#8221;); //数据库更新操作1</font></font></span></p>
<p style="margin-top: 12pt; text-indent: 31.5pt"><span style="font-size: 9pt"><font face="Courier New,Courier,Monospace"><font color="#000000">stmt.executeUpdate(&#8220;insert into table &#8230;&#8221;); //数据库更新操作2</font></font></span></p>
<p style="margin-top: 12pt"><span style="font-size: 9pt"><font face="Courier New,Courier,Monospace"><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn.commit(); //事务提交</font></font></span></p>
<p style="margin-top: 12pt"><span style="font-size: 9pt"><font face="Courier New,Courier,Monospace"><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp; }catch(Exception ex) {&nbsp;&nbsp;&nbsp; </font></font></span></p>
<p style="margin-top: 12pt"><span style="font-size: 9pt"><font face="Courier New,Courier,Monospace"><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex.printStackTrace();</font></font></span></p>
<p style="margin-top: 12pt"><span style="font-size: 9pt"><font face="Courier New,Courier,Monospace"><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {</font></font></span></p>
<p style="margin-top: 12pt"><span style="font-size: 9pt"><font face="Courier New,Courier,Monospace"><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;conn.rollback(); //操作不成功则回滚</font></font></span></p>
<p style="margin-top: 12pt"><span style="font-size: 9pt"><font face="Courier New,Courier,Monospace"><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }catch(Exception e) {</font></font></span></p>
<p style="margin-top: 12pt; text-indent: 58.5pt"><span style="font-size: 9pt"><font face="Courier New,Courier,Monospace"><font color="#000000">e.printStackTrace();</font></font></span></p>
<p style="margin-top: 12pt"><span style="font-size: 9pt"><font face="Courier New,Courier,Monospace"><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></font></span></p>
<p style="margin-top: 12pt; text-indent: 18pt"><span style="font-size: 9pt"><font face="Courier New,Courier,Monospace"><font color="#000000">}</font></font></span></p>
<p style="margin: 12pt 0cm 0pt 36pt; text-indent: -18pt"><font face="Courier New,Courier,Monospace"><font color="#000000"><span style="font-size: 9pt">★<span style="font: 7pt Times New Roman; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>jdbc API支持事务对数据库的加锁，并且提供了5种操作支持，2种加锁密度。</font></font></p>
<p style="margin: 12pt 0cm 0pt 36pt; text-indent: -18pt"><font face="Courier New,Courier,Monospace"><font color="#000000"><font size="2">５种支持</font>：</font></font></p>
<p style="margin-top: 12pt; margin-bottom: 0pt; text-indent: 18pt; margin-right: 0cm"><span style="font-size: 9pt"><font face="Courier New,Courier,Monospace"><font color="#000000">static int TRANSACTION_NONE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 0; </font></font></span></p>
<p style="margin-top: 12pt; margin-bottom: 0pt; text-indent: 18pt; margin-right: 0cm"><font face="Courier New,Courier,Monospace"><font color="#000000"><span style="font-size: 9pt">&#8594;禁止事务操作和加锁。</span></font></font></p>
<p style="margin-top: 12pt; margin-bottom: 0pt; text-indent: 18pt; margin-right: 0cm"><font face="Courier New,Courier,Monospace"><font color="#000000"><span style="font-size: 9pt">static int TRANSACTION_READ_UNCOMMITTED&nbsp;&nbsp;&nbsp; = 1;</span></font></font></p>
<p style="margin-top: 12pt; margin-bottom: 0pt; text-indent: 18pt; margin-right: 0cm"><span style="font-size: 9pt"><font face="Courier New,Courier,Monospace"><font color="#000000">&#8594;允许脏数据读写(dirty reads)、重复读写(repeatable reads)和影象读写（phntom </font></font></span></p>
<p style="margin-top: 12pt; margin-bottom: 0pt; text-indent: 18pt; margin-right: 0cm"><font face="Courier New,Courier,Monospace"><font color="#000000"><span style="font-size: 9pt">reads）</span></font></font></p>
<p style="margin-top: 12pt; margin-bottom: 0pt; text-indent: 18pt; margin-right: 0cm"><font face="Courier New,Courier,Monospace"><font color="#000000"><span style="font-size: 9pt">static int TRANSACTION_READ_COMMITTED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 2;</span></font></font></p>
<p style="margin-top: 12pt; margin-bottom: 0pt; text-indent: 18pt; margin-right: 0cm"><font face="Courier New,Courier,Monospace"><font color="#000000"><span style="font-size: 9pt">&#8594;禁止脏数据读写(dirty reads)，允许重复读写(repeatable reads)和影象读写（phntom </span><span style="font-size: 9pt">reads）</span></font></font></p>
<p style="margin-top: 12pt; margin-bottom: 0pt; text-indent: 18pt; margin-right: 0cm"><font face="Courier New,Courier,Monospace"><font color="#000000"><span style="font-size: 9pt">static int TRANSACTION_REPEATABLE_READ&nbsp;&nbsp;&nbsp;&nbsp; = 4;</span></font></font></p>
<p style="margin-top: 12pt; margin-bottom: 0pt; text-indent: 18pt; margin-right: 0cm"><font face="Courier New,Courier,Monospace"><font color="#000000"><span style="font-size: 9pt">&#8594;禁止脏数据读写(dirty reads)和重复读写(repeatable reads)，允许影象读写（phntom </span><span style="font-size: 9pt">reads）</span></font></font></p>
<p style="margin-top: 12pt; margin-bottom: 0pt; text-indent: 18pt; margin-right: 0cm"><font face="Courier New,Courier,Monospace"><font color="#000000"><span style="font-size: 9pt">static int TRANSACTION_SERIALIZABLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 8;</span></font></font></p>
<p style="margin-top: 12pt; margin-bottom: 0pt; text-indent: 18pt; margin-right: 0cm"><font face="Courier New,Courier,Monospace"><font color="#000000"><span style="font-size: 9pt">&#8594;禁止脏数据读写(dirty reads)、重复读写(repeatable reads)和允许影象读写(phntom </span><span style="font-size: 9pt">reads)</span></font></font></p>
<p style="margin-top: 12pt; margin-bottom: 0pt; text-indent: 18pt; margin-right: 0cm"><font face="Courier New,Courier,Monospace"><font color="#000000"><span style="font-size: 9pt">2种密度：</span></font></font></p>
<p style="margin-top: 12pt; margin-bottom: 0pt; text-indent: 18pt; margin-right: 0cm"><font face="Courier New,Courier,Monospace"><font color="#000000"><span style="font-size: 9pt">最后一项为表加锁，其余3～4项为行加锁。</span></font></font></p>
<p style="margin-top: 12pt; margin-bottom: 0pt; text-indent: -9pt; margin-right: 0cm"><font face="Courier New,Courier,Monospace"><font color="#000000"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt">脏数据读写(dirty reads):当一个事务修改了某一数据行的值而未提交时，另一事务读取了此行值。倘若前一事务发生了回滚，则后一事务将得到一个无效的值（脏数据）。</span></font></font></p>
<p style="margin-top: 12pt; margin-bottom: 0pt; text-indent: -9pt; margin-right: 0cm"><span style="font-size: 9pt"><font face="Courier New,Courier,Monospace"><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 重复读写(repeatable reads):当一个事务在读取某一数据行时，另一事务同时在修改此数据行。则前一事务在重复读取此行时将得到一个不一致的值。</font></font></span></p>
<p style="margin-top: 12pt; margin-bottom: 0pt; text-indent: -9pt; margin-right: 0cm"><span style="font-size: 9pt"><font face="Courier New,Courier,Monospace"><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 影象读写(phantomreads):当一个事务在某一表中进行数据查询时，另一事务恰好插入了满足了查询条件的数据行。则前一事务在重复读取满足条件的值时，将得到一个额外的&#8220;影象&#8220;值。</font></font></span></p>
<p style="margin-top: 12pt; margin-bottom: 0pt; margin-right: 0cm"><font face="Courier New,Courier,Monospace"><font color="#000000"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp; </span>Jdbc根据数据库提供的缺省值来设置事务支持及其加锁，当然，也可以手工设置：</font></font></p>
<p style="margin-top: 12pt; margin-bottom: 0pt; margin-right: 0cm"><font face="Courier New,Courier,Monospace"><font color="#000000">&nbsp;&nbsp;&nbsp; setTransactionIsolation（<span style="font-size: 9pt">TRANSACTION_READ_UNCOMMITTED</span><span style="font-size: 9pt">）</span><span style="font-size: 9pt">;</span></font></font></p>
<p style="margin-top: 12pt; margin-bottom: 0pt; text-indent: 21pt; margin-right: 0cm"><font face="Courier New,Courier,Monospace" color="#000000">可以查看数据库的当前设置：</font></p>
<p style="margin-top: 12pt"><font face="Courier New,Courier,Monospace"><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;getTransactionIsolation()</font></font></p>
<p style="text-indent: 21pt"><font face="Courier New,Courier,Monospace" color="#000000">需要注意的是，在进行受动设置时，数据库及其驱动程序必须得支持相应的事务操作操作才行。</font></p>
<p style="margin-top: 12pt; margin-bottom: 0pt; text-indent: -9pt; margin-right: 0cm"><font face="Courier New,Courier,Monospace"><font color="#000000"><span style="font-size: 9pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>上述设置随着值的增加，其事务的独立性增加，更能有效的防止事务操作之间的冲突；同时也增加了加锁的开销，降低了用户之间访问数据库的并发性，程序的运行效率也回随之降低。因此得平衡程序运行效率和数据一致性之间的冲突。一般来说，对于只涉及到数据库的查询操作时，可以采用TRANSACTION_READ_UNCOMMITTED 方式；对于数据查询远多于更新的操作，可以采用TRANSACTION_READ_COMMITTED方式；对于更新操作较多的，可以采用 TRANSACTION_REPEATABLE_READ；在数据一致性要求更高的场合再考虑最后一项，由于涉及到表加锁，因此会对程序运行效率产生较大的影响。</font></font></p>
<p style="margin-top: 12pt; margin-bottom: 0pt; text-indent: 21pt; margin-right: 0cm"><font face="Courier New,Courier,Monospace"><font color="#000000">另外，在oracle中数据库驱动对事务处理的缺省值是TRANSACTION_NONE，即不支持事务操作，所以需要在程序中手动进行设置。</font></font></p>
<p style="margin: 12pt 0cm 0pt 18pt; text-indent: -18pt"><font face="Courier New,Courier,Monospace"><font color="#000000">3．小结</font></font></p>
<p style="margin: 12pt 0cm 0pt 21pt"><font face="Courier New,Courier,Monospace"><font color="#000000">jdbc提供的对数据库事务操作的支持是比较完整的，通过事务操作可以提高程序的运行效率，保持数据的一致性。<br />
<br />
</font></font></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><font color="#000000"><strong><span style="font-size: 12pt; color: black">提示</span></strong><strong><span style="font-size: 12pt; color: black">4</span></strong><strong><span style="font-size: 12pt; color: black">：正确地使用事务</span></strong></font></p>
<p style="margin: 0cm 0cm 0pt; line-height: 10.5pt; text-align: left" align="left"><font color="#000000"><span style="font-size: 9pt; color: black">在创建可靠的系统时，正确地使用事务是非常关键的：如果登记一项销售额涉及到改变三个独立的表，那么数据库应该在这三个表中反映出这些变化或者所有表中都不反映。在</span><span style="font-size: 9pt; color: black">Oracle</span><span style="font-size: 9pt; color: black">中，通过执行一系列</span><span style="font-size: 9pt; color: black">SQL </span><span style="font-size: 9pt; color: black">语句来处理事务，然后把它们</span><span style="font-size: 9pt; color: black">&#8220;</span><span style="font-size: 9pt; color: black">提交</span><span style="font-size: 9pt; color: black">&#8221;</span><span style="font-size: 9pt; color: black">到数据库，或者</span><span style="font-size: 9pt; color: black">&#8220;</span><span style="font-size: 9pt; color: black">回滚</span><span style="font-size: 9pt; color: black">&#8221;</span><span style="font-size: 9pt; color: black">到事务开始。高效的事务设计通常是系统成功部署的关键。</span></font></p>
<p style="margin: 0cm 0cm 0pt; line-height: 10.5pt; text-align: left" align="left"><font color="#000000"><span style="font-size: 9pt; color: black">核心的</span><span style="font-size: 9pt; color: black">JDBC</span><span style="font-size: 9pt; color: black">包支持</span><span style="font-size: 9pt; color: black">4</span><span style="font-size: 9pt; color: black">种</span><span style="font-size: 9pt; color: black">&#8220;transaction isolation modes</span><span style="font-size: 9pt; color: black">（事务隔离模式）</span><span style="font-size: 9pt; color: black">&#8221;</span><span style="font-size: 9pt; color: black">，允许程序指定它们希望的事务行为。</span><span style="font-size: 9pt; color: black">Oracle</span><span style="font-size: 9pt; color: black">支持它们中的两种：默认的</span><span style="font-size: 9pt; color: black"> &#8220;read committed(</span><span style="font-size: 9pt; color: black">读提交数据</span><span style="font-size: 9pt; color: black">)&#8221; </span><span style="font-size: 9pt; color: black">和更安全的</span><span style="font-size: 9pt; color: black">&#8220;serializable(</span><span style="font-size: 9pt; color: black">可串行化</span><span style="font-size: 9pt; color: black">)&#8221;</span><span style="font-size: 9pt; color: black">模式。</span><span style="font-size: 9pt; color: black">&#8220;read committed&#8221; </span><span style="font-size: 9pt; color: black">模式支持不可重复读（</span><span style="font-size: 9pt; color: black">non-repeatable read</span><span style="font-size: 9pt; color: black">），在这种情况下，一个事务所做的修改对查询中的另一个事务是可见的；还支持错误读取（</span><span style="font-size: 9pt; color: black">phantom read</span><span style="font-size: 9pt; color: black">），这种情况下，被其他事务所做的修改对于运行的查询是可见的。依赖于在多个操作中数据库的完全一致视图的应用程序应该选择损失一定的性能</span><span style="font-size: 9pt; color: black">,</span><span style="font-size: 9pt; color: black">使用更严格的</span><span style="font-size: 9pt; color: black">&#8220;serializable(</span><span style="font-size: 9pt; color: black">可串行化</span><span style="font-size: 9pt; color: black">)&#8221;</span><span style="font-size: 9pt; color: black">设置。</span></font></p>
<p style="margin: 0cm 0cm 0pt; line-height: 10.5pt; text-align: left" align="left"><font color="#000000"><span style="font-size: 9pt; color: black">JDBC</span><span style="font-size: 9pt; color: black">连接在默认的情况下也在</span><span style="font-size: 9pt; color: black">&#8220;auto-commit&#8221;</span><span style="font-size: 9pt; color: black">（自动提交）模式下运行，这意味着每个语句一执行完就立即提交给数据库后。这种模式有一些优点，开发人员不需要在每次更新或插入操作之后调用</span><span style="font-size: 9pt; color: black">commit() </span><span style="font-size: 9pt; color: black">方法。它还可以确保最新的数据库视图。另一方面，关闭自动提交将可以稍微提高一点性能，并且将允许多语句事务。</span></font></p>
<p style="margin: 0cm 0cm 0pt; line-height: 10.5pt; text-align: left" align="left"><font color="#000000"><span style="font-size: 9pt; color: black">在</span><span style="font-size: 9pt; color: black">servlet</span><span style="font-size: 9pt; color: black">环境中使用</span><span style="font-size: 9pt; color: black">JDBC</span><span style="font-size: 9pt; color: black">事务时，与使用连接共享时应用了许多相同的规则。在代码的结尾处或者回滚或者提交事务是非常重要的。确保这一点的最好方法是使用</span><span style="font-size: 9pt; color: black">try...catch...finally </span><span style="font-size: 9pt; color: black">块。不完整的事务可能产生不可预见的后果，包括从不完整或不一致的数据库视图到当事务一个接一个排队等候访问被锁定的资源时使整个应用程序被锁定的种种情况。</span></font></p>
<p style="margin: 0cm 0cm 0pt; line-height: 10.5pt; text-align: left" align="left"><font color="#000000"><span style="font-size: 9pt; color: black">下面的例子说明如何使用</span><span style="font-size: 9pt; color: black">JDBC</span><span style="font-size: 9pt; color: black">事务</span><span style="font-size: 9pt; color: black">:</span></font></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 12pt; color: black"><font color="#000000">Connection con = null;</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 12pt; color: black"><font color="#000000">try {</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 12pt; color: black"><font color="#000000">ds = (DataSource)myContext.lookup("jdbc/oracleServer");</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 12pt; color: black"><font color="#000000">pooledCon = ds.getConnection("scott", "tiger");</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 12pt; color: black"><font color="#000000">pooledCon.setAutoCommit(false);</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 12pt; color: black"><font color="#000000">pooledCon.setTransactionIsolation(</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 12pt; color: black"><font color="#000000">Connection.TRANSACTION_SERIALIZABLE);</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 12pt; color: black"><font color="#000000">// ..</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 12pt; color: black"><font color="#000000">pooledCon.commit();</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 12pt; color: black"><font color="#000000">} catch (Exception ignored) {</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 12pt; color: black"><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try { pooledCon.rollback(); } catch (SQLException ig) {}</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 12pt; color: black"><font color="#000000">} finally {</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 12pt; color: black"><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(pooledCon != null) {</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 12pt; color: black"><font color="#000000">&nbsp;&nbsp;&nbsp; pooledCon.setAutoCommit(true);</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 12pt; color: black"><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pooledCon.close();</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 12pt; color: black"><font color="#000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 12pt; color: black"><font color="#000000">}</font></span></p>
<p style="margin: 0cm 0cm 0pt; line-height: 10.5pt; text-align: left" align="left"><font color="#000000"><span style="font-size: 9pt; color: black">连接池中得到的每一个连接是极为重要的。</span></font></p>
<p style="margin: 0cm 0cm 0pt; line-height: 10.5pt; text-align: left" align="left"><font color="#000000"><span style="font-size: 9pt; color: black">尽管常规事务很有吸引力，但无论你使用哪种连接管理模型，都绝不应该将它们推广应用到对服务器的多个请求（一个或更多</span><span style="font-size: 9pt; color: black">servlet</span><span style="font-size: 9pt; color: black">的多个调用）。用户决不应该在一个事务没有完成时就发出第二个请求。需要跨多个对象或多个请求中分布事务的应用程序应该考虑其他可选的体系结构。举例来说，同</span><span style="font-size: 9pt; color: black">Java</span><span style="font-size: 9pt; color: black">事务处理</span><span style="font-size: 9pt; color: black">API (JTA)</span><span style="font-size: 9pt; color: black">一起的</span><span style="font-size: 9pt; color: black">JDBC 2.0</span><span style="font-size: 9pt; color: black">可选包，使与完善的事务处理服务器的集成成为可能。</span></font></p>
<p style="margin: 0cm 0cm 0pt; line-height: 10.5pt; text-align: left" align="left"><font color="#000000"><span style="font-size: 9pt; color: black">如果你正在运行</span><span style="font-size: 9pt; color: black">Oracle9i</span><span style="font-size: 9pt; color: black">第</span><span style="font-size: 9pt; color: black">2</span><span style="font-size: 9pt; color: black">版，你将可以获取</span><span style="font-size: 9pt; color: black">JDBC 3.0</span><span style="font-size: 9pt; color: black">中引入的一些新的事务特性。这些特性中最重要的是事务存储点（</span><span style="font-size: 9pt; color: black">Transaction Savepoint</span><span style="font-size: 9pt; color: black">），它允许你将事务回滚到某一特定点</span><span style="font-size: 9pt; color: black">,</span><span style="font-size: 9pt; color: black">而不是要么全部回滚、要么全不回滚。</span></font></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 10pt; color: black"><font color="#000000">public void createA(Connection conn,A a){ <br />
int flag=0; <br />
if(conn==null){ <br />
flag=1; <br />
conn = getConnection(); <br />
} <br />
try{ <br />
{do update} <br />
if(flag==1){ <br />
conn.commit(); <br />
} <br />
} catch(Exception e){ <br />
if(flag==1){ <br />
conn.rollback(); <br />
} <br />
throw e; <br />
} finally{ <br />
if(flag==1){ <br />
conn.close(); <br />
} <br />
} <br />
} <br />
<br />
public void createB(B b){ <br />
Connection conn = getConnection(); <br />
{create b} <br />
try{ <br />
createA(conn,a); <br />
conn.commit(); <br />
} catch(Exception e){ <br />
conn.rollback(); <br />
} <br />
</font></span></p>
</div>
<img src ="http://www.blogjava.net/jlin/aggbug/230391.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2008-09-22 12:07 <a href="http://www.blogjava.net/jlin/articles/230391.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Web应用中重复提交的问题的三种解决方案</title><link>http://www.blogjava.net/jlin/articles/213027.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Mon, 07 Jul 2008 06:13:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/articles/213027.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/213027.html</wfw:comment><comments>http://www.blogjava.net/jlin/articles/213027.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/213027.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/213027.html</trackback:ping><description><![CDATA[前两种是利用javascript,后面一种是在使用Struts的情况下的参考实现<br />
<br />
<br />
1&nbsp;javascript&nbsp;，设置一个变量，只允许提交一次。<br />
<br />
&lt;script&nbsp;language="javascript"&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;checkSubmitFlg&nbsp;=&nbsp;false;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;checkSubmit()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(checkSubmitFlg&nbsp;==&nbsp;true)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;checkSubmitFlg&nbsp;=&nbsp;true;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.ondblclick&nbsp;=&nbsp;function&nbsp;docondblclick()&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.event.returnValue&nbsp;=&nbsp;false;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.onclick&nbsp;=&nbsp;function&nbsp;doconclick()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(checkSubmitFlg)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.event.returnValue&nbsp;=&nbsp;false;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&lt;/script&gt;<br />
<br />
&lt;html:form&nbsp;action="myAction.do"&nbsp;method="post"&nbsp;onsubmit="return&nbsp;checkSubmit();"&gt;<br />
<br />
<br />
2&nbsp;还是javascript，将提交按钮或者image置为disable<br />
<br />
<br />
&nbsp;&nbsp;&lt;html:form&nbsp;action="myAction.do"&nbsp;method="post"&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onsubmit="getElById('submitInput').disabled&nbsp;=&nbsp;true;&nbsp;return&nbsp;true;"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;html:image&nbsp;styleId="submitInput"&nbsp;src="images/ok_b.gif"&nbsp;border="0"&nbsp;/&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&lt;/html:form&gt;<br />
<br />
<br />
<br />
3&nbsp;利用struts的同步令牌机制<br />
<br />
利用同步令牌（Token）机制来解决Web应用中重复提交的问题，Struts也给出了一个参考实现。<br />
<br />
基本原理：<br />
<br />
服务器端在处理到达的请求之前，会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较，<br />
看是否匹配。在处理完该请求后，且在答复发送给客户端之前，将会产生一个新的令牌，该令牌除传给<br />
客户端以外，也会将用户会话中保存的旧的令牌进行替换。这样如果用户回退到刚才的提交页面并再次<br />
提交的话，客户端传过来的令牌就和服务器端的令牌不一致，从而有效地防止了重复提交的发生。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(isTokenValid(request,&nbsp;true))&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;your&nbsp;code&nbsp;here&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;mapping.findForward("success");<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saveToken(request);&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;mapping.findForward("submitagain");<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
Struts根据用户会话ID和当前系统时间来生成一个唯一（对于每个会话）令牌的，具体实现可以参考<br />
TokenProcessor类中的generateToken()方法。<br />
<br />
1.&nbsp;//验证事务控制令牌,&lt;html:form&nbsp;&gt;会自动根据session中标识生成一个隐含input代表令牌，防止两次提交<br />
2.&nbsp;在action中：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&lt;input&nbsp;type="hidden"&nbsp;name="org.apache.struts.taglib.html.TOKEN"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;value="6aa35341f25184fd996c4c918255c3ae"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!isTokenValid(request))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errors.add(ActionErrors.GLOBAL_ERROR,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;ActionError("error.transaction.token"));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resetToken(request);&nbsp;//删除session中的令牌<br />
<br />
3.&nbsp;action有这样的一个方法生成令牌<br />
<br />
&nbsp;&nbsp;&nbsp;protected&nbsp;String&nbsp;generateToken(HttpServletRequest&nbsp;request)&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpSession&nbsp;session&nbsp;=&nbsp;request.getSession();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte&nbsp;id[]&nbsp;=&nbsp;session.getId().getBytes();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte&nbsp;now[]&nbsp;=new&nbsp;Long(System.currentTimeMillis()).toString().getBytes();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageDigest&nbsp;md&nbsp;=&nbsp;MessageDigest.getInstance("MD5");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md.update(id);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;md.update(now);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(toHex(md.digest()));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(IllegalStateException&nbsp;e)&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(null);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(NoSuchAlgorithmException&nbsp;e)&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(null);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />
转自网友
<img src ="http://www.blogjava.net/jlin/aggbug/213027.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2008-07-07 14:13 <a href="http://www.blogjava.net/jlin/articles/213027.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于Tomcat 5.5.XX数据源配置出现连接问题的解决- -</title><link>http://www.blogjava.net/jlin/articles/212599.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Fri, 04 Jul 2008 06:31:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/articles/212599.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/212599.html</wfw:comment><comments>http://www.blogjava.net/jlin/articles/212599.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/212599.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/212599.html</trackback:ping><description><![CDATA[<p>关于Tomcat 5.5.XX数据源配置出现连接问题的解决<br />
错误信息：Cannot create JDBC driver of class '' for connect URL 'null'</p>
<p>当我们用Tomcat5.0.XX时，以Oracle为例，一般我们的配置如下，但直接移到5.5.XX时就会发生错误<br />
&nbsp; &lt;Resource name="jdbc/XXX" type="javax.sql.DataSource"/&gt;<br />
&nbsp; &lt;ResourceParams name="jdbc/XXX"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;parameter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;factory&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;org.apache.commons.dbcp.BasicDataSourceFactory&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;parameter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;password&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;password&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;parameter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;url&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;jdbc:oracle:thin:@localhost:1521:SID&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;parameter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;driverClassName&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;oracle.jdbc.driver.OracleDriver&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;parameter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;username&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;username&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;<br />
&nbsp; &lt;/ResourceParams&gt;</p>
<p>当要移植到Tomcat5.5.XX时，配置应当修改一下，如下所示：<br />
&nbsp; &lt;Resource<br />
&nbsp;&nbsp;&nbsp; name="jdbc/XXX"<br />
&nbsp;&nbsp;&nbsp; type="javax.sql.DataSource"<br />
&nbsp;&nbsp;&nbsp; password="password"<br />
&nbsp;&nbsp;&nbsp; driverClassName="oracle.jdbc.driver.OracleDriver"<br />
&nbsp;&nbsp;&nbsp; maxIdle="2"<br />
&nbsp;&nbsp;&nbsp; maxWait="5000"<br />
&nbsp;&nbsp;&nbsp; username="username"<br />
&nbsp;&nbsp;&nbsp; url="jdbc:oracle:thin:@localhost:1521:SID"<br />
&nbsp;&nbsp;&nbsp; maxActive="4"/&gt;</p>
<p>相应的参数请进行相应的改动，以上只是解决的示例。<br />
转自网友。<br />
</p>
<img src ="http://www.blogjava.net/jlin/aggbug/212599.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2008-07-04 14:31 <a href="http://www.blogjava.net/jlin/articles/212599.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有关乱码的处理(转)</title><link>http://www.blogjava.net/jlin/articles/136492.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Mon, 13 Aug 2007 11:16:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/articles/136492.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/136492.html</wfw:comment><comments>http://www.blogjava.net/jlin/articles/136492.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/136492.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/136492.html</trackback:ping><description><![CDATA[　　为什么说乱码是中国程序员无法避免的话题呢？这个首先要从编码机制上说起，大家都是中文和英文的编码格式不是一样，解码也是不一样的！如果中国的程序员不会遇到乱码，那么只有使用汉语编程。汉语编程是怎么回事我也不大清楚，应该是前年吧，我一朋友给我介绍汉语编程，怎么不错不错？当时因为学习忙没去关注这个，等我闲了，那个朋友不弄这个，问他他也不说不大清楚，最后自己对这个学习也不了了之了。<br><br>今天我写这个不是讲解中英文之间的差距，解码等，我是将我在这几年工作遇到各种各样的乱码的解决方法，总结一样，也希望大家能把自己晕倒解决乱码的方法都说出来，咱们弄一个解决乱码的&#8220;葵花宝典&#8221;。<br><br>　　对于Java由于默认的编码方式是 UNICODE,所以用中文也易出问题,常见的解决是<br>String s2 = new String(s1.getBytes(&#8220;ISO-8859-1&#8221;),&#8221;GBK&#8221;); <br><br>　　1、utf8解决JSP中文乱码问题 <br><br>　　一般说来在每个页面的开始处，加入：<br><br>＜%@ page language="java" contentType="text/html; charset=UTF-8"<br>pageEncoding="UTF-8"%＞<br><br>＜%<br>request.setCharacterEncoding("UTF-8"); <br>%＞ <br><br>　　charset=UTF-8 的作用是指定JSP向客户端输出的编码方式为&#8220;UTF-8&#8221;<br><br>　　pageEncoding="UTF-8" 为了让JSP引擎能正确地解码含有中文字符的JSP页面，这在LINUX中很有效<br><br>　　request.setCharacterEncoding("UTF-8"); 是对请求进行了中文编码<br><br>　　有时，这样仍不能解决问题，还需要这样处理一下：<br><br>String msg = request.getParameter("message"); <br>String str=new String(msg.getBytes("ISO-8859-1"),"UTF-8"); <br>out.println(st); <br><br>　　2、Tomcat 5.5 中文乱码 <br><br>　　只要把%TOMCAT安装目录%/ webapps\servlets-examples\WEB-INF\classes\filters\SetCharacterEncodingFilter.class文件拷到你的webapp目录/filters下，如果没有filters目录，就创建一个。 <br><br>　 2)在你的web.xml里加入如下几行：<br><br>＜filter＞ <br>＜filter-name＞Set Character Encoding＜/filter-name＞ <br>＜filter-class＞filters.SetCharacterEncodingFilter＜/filter-class＞ <br>＜init-param＞ <br>＜param-name＞encoding＜/param-name＞ <br>＜param-value＞GBK＜/param-value＞ <br>＜/init-param＞ <br>＜/filter＞ <br>＜filter-mapping＞ <br>＜filter-name＞Set Character Encoding＜/filter-name＞ <br>＜url-pattern＞/*＜/url-pattern＞ <br>＜/filter-mapping＞ <br><br>　 3)完成.<br><br>　 2 get方式的解决办法 <br><br>　 1) 打开tomcat的server.xml文件，找到区块，加入如下一行： <br><br>URIEncoding=&#8221;GBK&#8221; <br><br>　 完整的应如下： <br>　<br>＜Connector <br>port="80" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" <br>enableLookups="false" redirectPort="8443" acceptCount="100" <br>debug="0" connectionTimeout="20000" <br>disableUploadTimeout="true" <br>URIEncoding="GBK" <br>/＞ <br><br>　2)重启tomcat,一切OK。<br><br>　　3、xmlHttpRequest中文问题 <br><br>　　页面jsp用的GBK编码 <br><br>＜%@ page contentType="text/html; charset=GBK"%＞ <br><br>　　javascript部分 <br><br>function addFracasReport() { <br>var url="controler?actionId=0_06_03_01&amp;actionFlag=0010"; <br>var urlmsg="&amp;reportId="+fracasReport1.textReportId.value; //故障报告表编号 <br><br>var xmlHttp=Common.createXMLHttpRequest(); <br>xmlHttp.onreadystatechange = Common.getReadyStateHandler(xmlHttp, eval("turnAnalyPage")); <br>xmlHttp.open("POST",url,true); <br>xmlHttp.setRequestHeader( " Content-Type " , " application/x-www-form-urlencoded); <br>xmlHttp.send(urlmsg); <br><br>} <br><br>　　后台java中获得的reportId是乱码，不知道该怎么转，主要是不知道xmlHttp.send(urlmsg); 以后是什么编码？在后面用java来转，试了几种，都没有成功，其中有：<br><br>public static String UTF_8ToGBK(String str) { <br>try { <br>return new String(str.getBytes("UTF-8"), "GBK"); <br>} catch (Exception ex) { <br>return null; <br>} <br>} <br><br>public static String UTF8ToGBK(String str) { <br>try { <br>return new String(str.getBytes("UTF-16BE"), "GBK"); <br>} catch (Exception ex) { <br>return null; <br>} <br>} <br><br>public static String GBK(String str) { <br>try { <br>return new String(str.getBytes("GBK"),"GBK"); <br>} catch (Exception ex) { <br>return null; <br>} <br>} <br>public static String getStr(String str) { <br>try { <br>String temp_p = str; <br>String temp = new String(temp_p.getBytes("ISO8859_1"), "GBK"); <br>temp = sqlStrchop(temp); <br>return temp; <br>} catch (Exception e) { <br>return null; <br>} <br>} <br><br>　　4、JDBC ODBC Bridge的Bug及其解决方法 <br><br>　　在编写一数据库管理程序时，发现JDBC-ODBC Bridge存在不易发现的Bug。在向数据表插入数据时，如果为英文字符，存储内容完全正确，如果存入中文字符，部分数据库只能存储前七八个中文字符，其他内容被截去，导致存储内容的不完整（有些数据库不存在这个问题，如Sybase SQL Anywhere 5.0。JDBC-ODBC Bridge还存在无法建表的Bug）。 <br><br>　　对于广大需要存储中文信息的Java程序员来说，这可是一个不好的消息。要么改用其他语言编程，要么选择其他价格昂贵的数据库产品。&#8220;一次编写，到处运行&#8221;的目标，也大打折扣。能不能采用变通的方法，将中文信息进行处理后再存储来解决这个问题呢？答案是肯定的。 <br><br>　　解决问题的具体思路、方法 <br><br>　　Java采用Unicode码编码方式，中英文字符均采用16bit存储。既然存储英文信息是正确的，根据一定规则，将中文信息转换成英文信息后存储，自然不会出现截尾现象。读取信息时再进行逆向操作，将英文信息还原成中文信息即可。由GB2312编码规则可知，汉字一般为二个高位为1的ASCII码，在转换时将一个汉字的二个高位1去掉，还原时再将二个高位1加上。为了处理含有英文字符的中文字串，对英文字符则需要加上一个Byte 0标记。以下提供的两个公用静态方法，可加入任何一个类中使用。 <br><br>　　将中英文字串转换成纯英文字串 <br><br>　　public static String toTureAsciiStr(String str){ <br><br>　　StringBuffer sb = new StringBuffer(); <br><br>　　byte[] bt = str.getBytes(); <br><br>　　for(int i =0 ; i〈bt.length; i++){ <br><br>　　if(bt[i]〈0){ <br><br>　　//是汉字去高位1 <br><br>　　sb.append((char)(bt[i]&amp;&amp;0x7f)); <br><br>　　 }else{//是英文字符 补0作记录 <br><br>　　sb.append((char)0); <br><br>　　sb.append((char)bt[i]); <br><br>　　 } <br><br>　　 } <br><br>　　return sb.toString(); <br><br>　　} <br><br>　　将经转换的字串还原 <br><br>　　public static String unToTrueAsciiStr(String str){ <br><br>　　 byte[] bt = str.getBytes(); <br><br>　　 int i,l=0,length = bt.length,j=0; <br><br>　　 for(i = 0; i〈length; i++){ <br><br>　　 if(bt[i] == 0){ <br><br>　　 l++; <br><br>　　 } <br><br>　　 } <br><br>　　 byte []bt2 = new byte[length-l]; <br><br>　　 for(i =0 ; i〈length; i++){ <br><br>　　 if(bt[i] == 0){ <br><br>　　 i++; <br><br>　　 bt2[j] = bt[i]; <br><br>　　 }else{ <br><br>　　 bt2[j] = (byte)(bt[i]|0x80); <br><br>　　 } <br><br>　　 j++; <br><br>　　 } <br><br>　　String tt = new String(bt2); <br><br>　　return tt; <br><br>　　} <br><br>　　上例在实际编程中效果很好，只是存储的中文信息需要经过同样处理，才能被其他系统使用。而且如果中文字串出现英文字符，实际上增加了额外的存储空间。<br><br>　　5、Solaris下Servlet编程的中文问题及解决办法 <br><br>　　在使用Java开发Internet上的一个应用系统时，发现在Windows下调试完全正常的Servlet，上传到Solaris 服务器上，运行却出现故障——返回的网页不能显示中文，应为中文的信息全为乱码；用中文信息做关键字，不能正确检索数据库。后来采用加入检查代码等方法探知故障原因如下： <br><br>　　显示乱码主要是因为通过类 HttpServletResponse提供的方法setContentType 无法改变返回给客户的数据的编码方式，正确的编码方式应为GB2312或者GBK，而事实上为缺省的ISO8859-1。无法检索中文信息则是因为，客户提交的中文信息经浏览器编码到达服务器后，Servlet无法将其正确解码。 <br><br>　　举例说明显示乱码解决方法 <br><br>　　Servlet 一般通常做法如下： <br><br>　　public class ZldTestServlet extends HttpServlet { <br><br>　　public void doGet (HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{ <br><br>　　//在使用 Writer向浏览器返回数据前，设置 content-type header ，在这里设置相应的字符集gb2312 <br><br>　　response.setContentType("text/html; charset=gb2312"); <br><br>　　PrintWriter out = response.getWriter(); //* <br><br>　　// 正式返回数据 <br><br>　　out.println("〈html〉〈head〉〈title〉Servlet test〈/title〉〈/head〉" ); <br><br>　　out.println("这是一个测试页！"); <br><br>　　out.println("〈/body〉〈/html〉"); <br><br>　　out.close(); <br><br>　　} <br><br>　　 ... <br><br>　　} <br><br>　　解决页面显示乱码问题，需将*处代码换成如下内容： <br><br>　　PrintWriter out = new PrintWriter(new OutputStreamWriter(response.getOutputStream(),"gb2312")); <br><br>　　Solaris中文信息检索问题的解决 <br>　　浏览器利用表单向服务器提交信息时，一般采用x-www-form-urlencoded 的MIME格式对数据进行编码。如果使用get方法，参数名称和参数值经编码后附加在URL后，在Java中称作查询串（query string）。 <br><br>　　在Servlet程序中，如果采用ServletRequest的方法getParameter取得参数值，在Solaris环境下，对汉字却不能正确解码。因而无法正确检索数据库。 <br><br>　　在Java 1.2的包——java.net中提供了URLEncode和URLDecode类。类URLEncode提供了按x-www-form-urlencoded格式对给定串进行转换的方法。类URLEncode则提供了逆方法。 <br><br>　　6、Common Mail乱码问题<br><br>　　common mail是一个小而方便的mail包，他实现了对Java Mail的封装，使用起来十分的方便，但是我在使用他的时候发现，使用纯文本的内容发送，结果是乱码，代码如下：<br><br>public class TestCommonMail {<br>public static void main(String[] args) throws EmailException, MessagingException {<br>SimpleEmail email = new SimpleEmail(); <br>email.setCharset("GB2312"); <br>email.setHostName("smtp.163.com"); <br>email.setSubject("test"); <br>email.addTo("test@163.com"); <br>email.setFrom("test@163.com"); <br>email.setMsg("我的测试"); <br>email.setAuthentication("test", "test"); <br>email.send(); <br>}<br>}<br><br>分析了一下commons mail的源码找到了原因。源码如下:<br><br>public class SimpleEmail extends Email<br>{<br>public Email setMsg(String msg) throws EmailException, MessagingException<br>{<br>if (EmailUtils.isEmpty(msg))<br>{<br>throw new EmailException("Invalid message supplied"); <br>}<br><br>setContent(msg, TEXT_PLAIN); <br>return this; <br>}<br>}<br><br>Email代码片段<br><br>public void setContent(Object aObject, String aContentType)<br>{<br>this.content = aObject; <br>if (EmailUtils.isEmpty(aContentType))<br>{<br>this.contentType = null; <br>}<br>else<br>{<br>// set the content type<br>this.contentType = aContentType; <br><br>// set the charset if the input was properly formed<br>String strMarker = "; charset="; <br>int charsetPos = aContentType.toLowerCase().indexOf(strMarker); <br>if (charsetPos != -1)<br>{<br>// find the next space (after the marker)<br>charsetPos += strMarker.length(); <br>int intCharsetEnd =<br>aContentType.toLowerCase().indexOf(" ", charsetPos); <br><br>if (intCharsetEnd != -1)<br>{<br>this.charset =<br>aContentType.substring(charsetPos, intCharsetEnd); <br>}<br>else<br>{<br>this.charset = aContentType.substring(charsetPos); <br>}<br>}<br>}<br>}<br><br>email.send(); 的send方法将调用<br>public void buildMimeMessage() throws EmailException<br>{<br>try<br>{<br>this.getMailSession(); <br>this.message = new MimeMessage(this.session); <br><br>if (EmailUtils.isNotEmpty(this.subject))<br>{<br>if (EmailUtils.isNotEmpty(this.charset))<br>{<br>this.message.setSubject(this.subject, this.charset); <br>}<br>else<br>{<br>this.message.setSubject(this.subject); <br>}<br>}<br><br>// ========================================================<br>// Start of replacement code<br>if (this.content != null)<br>{<br>this.message.setContent(this.content, this.contentType); <br>}<br>// end of replacement code<br>// ========================================================<br>else if (this.emailBody != null)<br>{<br>this.message.setContent(this.emailBody); <br>}<br>else<br>{<br>this.message.setContent("", Email.TEXT_PLAIN); <br>}<br><br>if (this.fromAddress != null)<br>{<br>this.message.setFrom(this.fromAddress); <br>}<br>else<br>{<br>throw new EmailException("Sender address required"); <br>}<br><br>if (this.toList.size() + this.ccList.size() + this.bccList.size() == 0)<br>{<br>throw new EmailException(<br>"At least one receiver address required"); <br>}<br><br>if (this.toList.size() ＞ 0)<br>{<br>this.message.setRecipients(<br>Message.RecipientType.TO,<br>this.toInternetAddressArray(this.toList)); <br>}<br><br>if (this.ccList.size() ＞ 0)<br>{<br>this.message.setRecipients(<br>Message.RecipientType.CC,<br>this.toInternetAddressArray(this.ccList)); <br>}<br><br>if (this.bccList.size() ＞ 0)<br>{<br>this.message.setRecipients(<br>Message.RecipientType.BCC,<br>this.toInternetAddressArray(this.bccList)); <br>}<br><br>if (this.replyList.size() ＞ 0)<br>{<br>this.message.setReplyTo(<br>this.toInternetAddressArray(this.replyList)); <br>}<br><br>if (this.headers.size() ＞ 0)<br>{<br>Iterator iterHeaderKeys = this.headers.keySet().iterator(); <br>while (iterHeaderKeys.hasNext())<br>{<br>String name = (String) iterHeaderKeys.next(); <br>String value = (String) headers.get(name); <br>this.message.addHeader(name, value); <br>}<br>}<br><br>if (this.message.getSentDate() == null)<br>{<br>this.message.setSentDate(getSentDate()); <br>}<br><br>if (this.popBeforeSmtp)<br>{<br>Store store = session.getStore("pop3"); <br>store.connect(this.popHost, this.popUsername, this.popPassword); <br>}<br>}<br>catch (MessagingException me)<br>{<br>throw new EmailException(me); <br>}<br>}<br>由代码可以知道纯文本方式最终调用了Java Mail的<br>message.setContent(this.content, this.contentType); <br>content是内容<br>contentType是类型，如text/plain,<br>(我们可以试试直接用Java mail发邮件，设置文本内容不使用setText方法，也使用setContent("测试", "text/plain")方式，你可以看到内容也是乱码)<br><br>　　关键就在于text/plain，我们改成text/plain; charset=gb2312，ok乱码解决了。在commons mail我们看SimpleEmail 类中setMsg方法调用的就是 setContent(msg, TEXT_PLAIN); 我们只需要将Email类中的常量TEXT_PLAIN修改一下加入 charset=你的字符集 ，重新打包jar，这样就可以了<br><br>　　7、toad的字符集的设置与oracle的安装<br><br>　　oracle数据库服务器的安装一般是中文字符集，有时安装在不同的平台下，设置为ISO编码，toad是oracle开发的最好工具，不是我说的，可是中文环境下安装的toad，打开英文字符的oracle时，中文全是乱码。必须进行设置<br><br>环境变量---〉系统变量<br>加<br>NLS_lANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK<br>或<br>NLS_lANG=AMERICAN_AMERICA.WE8ISO8859P1<br><br>AMERICAN_AMERICA.WE8MSWIN1252<br><br>或者<br><br>打开注册表，点击HKEY_LOCAL_MATHINE<br>再点击Software,再点击ORACLE<br>在点击HOME（ORACLE所在目录）<br>在注册表的右半面有NLS_LANG,<br>双击它，将你想要的覆盖掉原来的就可以了<br>最好记下旧的，以便可以改回来。<br><br>connect sys/chang_on_install<br>update props$<br>set value$='ZHS16CGB231280'<br>where name='NLS_CHARACTERSET'; <br>commit; <br>这样就OK了<br><br>　　8、如何解決GWT(google web toolkit)中文的問題<br><br>　　GWT 中文乱码解决方法 <br><br>1.把你要显示的中文&#8220;测试字符串&#8221;输入到一个文件，如:1.txt <br>2.进入命令行,进入1.txt所在的目录,敲入以下命令:native2ascii.exe 1.txt 2.txt 回车。这样就生成了另外一个文件2.txt。 <br>3.2.txt的内容如下:\u6d4b\u8bd5\u5b57\u7b26\u4e32 <br>4.然后用上面的编码，在gwt中使用，就可以了. <br><br>　　9、xmlHttp得到的网页怎么是乱码？ <br><br>　　(1)在服务器端使用WebRequest而不是xmlHttp<br>　　(2) 将 <br><br>StreamReader sr = new StreamReader(stream); <br><br>　　对于简体中文改成：<br><br>StreamReader sr = new StreamReader(stream , Encoding.Default ); <br><br>　　对于utf-8改成：<br><br>StreamReader sr = new StreamReader(stream , Encoding.UTF8 ); <br><br>　　当然，Encoding枚举还有很多其他的成员，对于不同的编码content-type可以有选择的应用<br><br>　　(3)后来我发现无论是content-type是gb2312还是utf-8,用<br><br>StreamReader sr = new StreamReader(stream , Encoding.Default ); <br><br>　　都可以返回正常的汉字，所以统一的改成Encoding.Default<br><br><br><br><br>--------------------------------------------------------------------------------<br><br>最后，在服务器端从一个url获得网页的源代码的代码如下：<br><br><br><br>/// ＜summary＞<br>/// post一个指定的url，获得网页的源代码(用WebRequest实现)<br>/// ＜/summary＞<br>/// ＜param name="url"＞＜/param＞<br>/// ＜returns＞<br>/// 如果请求失败，返回null<br>/// 如果请求成功，返回网页的源代码<br>/// ＜/returns＞<br>public static string GetContentFromUrl2( string url )<br>{<br>//变量定义<br>string respstr; <br><br>WebRequest myWebRequest=WebRequest.Create(url); <br>// myWebRequest.PreAuthenticate=true; <br>// NetworkCredential networkCredential=new NetworkCredential( username , password , domain ); <br>// myWebRequest.Credentials=networkCredential; <br><br>// Assign the response object of 'WebRequest' to a 'WebResponse' variable.<br>WebResponse myWebResponse=myWebRequest.GetResponse(); <br>System.IO.Stream stream = myWebResponse.GetResponseStream(); <br>StreamReader sr = new StreamReader(stream , Encoding.Default ); <br>//以字符串形式读取数据流<br>respstr = sr.ReadToEnd(); <br>sr.Close(); <br><br>return respstr; <br><br>}<br><br><br><a href="http://java.csdn.net/page/fc252fc4-2554-49d4-be0e-b6c6ab88d6ac">http://java.csdn.net/page/fc252fc4-2554-49d4-be0e-b6c6ab88d6ac</a>
<img src ="http://www.blogjava.net/jlin/aggbug/136492.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2007-08-13 19:16 <a href="http://www.blogjava.net/jlin/articles/136492.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat的目录配置(转)</title><link>http://www.blogjava.net/jlin/articles/107664.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Sat, 31 Mar 2007 09:50:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/articles/107664.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/107664.html</wfw:comment><comments>http://www.blogjava.net/jlin/articles/107664.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/107664.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/107664.html</trackback:ping><description><![CDATA[
		<p style="TEXT-INDENT: 2em">本章介绍如何在Tomcat上创建和发布Web应用。这里首先讲解Tomcat的目录结构以及Web应用的目录结构，接着介绍如何将HTML、 Servlet、JSP和Tag Library部署到Web应用中，然后介绍把整个Web应用打包并发布的方法，最后介绍如何在Tomcat上配置虚拟主机。<br /><br />本章侧重于讨论Web应用的结构和发布方法，所以没有对本章的Servlet和JSP的例子进行详细解释，关于Servlet和JSP的技术可以分别参考其它章节的内容。<br /><br />2.1 Tomcat的目录结构<br /><br />在Tomcat上发布Web应用之前，首先要了解Tomcat的目录结构。Tomcat的目录结构参见表2-1，这些目录都是的子目录。<br /><br />表2-1 Tomcat的目录结构<br /><br /></p>
		<table border="1">
				<tbody>
						<tr>
								<td>目 录 
</td>
								<td>描 述 
</td>
						</tr>
						<tr>
								<td>/bin 
</td>
								<td>存放在Windows平台 以及Linux平台上启动 和关闭Tomcat的脚本文件 
</td>
						</tr>
						<tr>
								<td>/conf 
</td>
								<td>存放Tomcat服务器的各种配置文件， 其中最重要的配置文件是server.xml 
</td>
						</tr>
						<tr>
								<td>/server 
</td>
								<td>包含3个子目录: classes、lib和webapps 
</td>
						</tr>
						<tr>
								<td>/server/lib 
</td>
								<td>存放Tomcat服务器所需的各种JAR文件 
</td>
						</tr>
						<tr>
								<td>/server/webapps 
</td>
								<td>存放Tomcat自带的两个Web应用: admin应用和manager应用 
</td>
						</tr>
						<tr>
								<td>/common/lib 
</td>
								<td>存放Tomcat服务器以及所有 Web应用都可以访问的JAR文件 
</td>
						</tr>
						<tr>
								<td>/shared/lib 
</td>
								<td>存放所有Web应用都可以访问的JAR文件 
</td>
						</tr>
						<tr>
								<td>/logs 
</td>
								<td>存放Tomcat的日志文件 
</td>
						</tr>
						<tr>
								<td>/webapps 
</td>
								<td>当发布Web应用时， 默认情况下把Web应用 文件放于此目录下 
</td>
						</tr>
						<tr>
								<td>/work 
</td>
								<td>Tomcat把由JSP生成的 Servlet放于此目录下 </td>
						</tr>
				</tbody>
		</table>
		<p style="TEXT-INDENT: 2em">从表2-1可以看出，在/server/lib目录、/common/lib和/shared/lib目录下都可以放JAR文件，它们的区别在于： 
</p>
		<p style="TEXT-INDENT: 2em">在/server/lib目录下的JAR文件只可被Tomcat服务器访问 
</p>
		<p style="TEXT-INDENT: 2em">在/shared/lib目录下的JAR文件可以被所有的Web应用访问，但不能被Tomcat服务器访问 
</p>
		<p style="TEXT-INDENT: 2em">在/common/lib目录下的JAR文件可以被Tomcat服务器和所有Web应用访问 
</p>
		<p style="TEXT-INDENT: 2em">此外，对于下面将要介绍的Java Web应用，在它的WEB-INF目录下，也可以建立lib子目录，在lib子目录下可以放各种JAR文件，这些JAR文件只能被当前Web应用访问。 
</p>
		<p style="TEXT-INDENT: 2em">在以上提到的lib目录下都只接受JAR文件，如果类压缩文件为ZIP文件，应该将它展开，重新打包为JAR文件再拷贝到lib目录中。如果直接将ZIP文件拷贝到lib目录，则会发现Tomcat服务器仍然找不到相关的类。打包命令参见2.2.8节。 
</p>
		<p style="TEXT-INDENT: 2em">2.2 创建和发布Web应用 
</p>
		<p style="TEXT-INDENT: 2em">Java Web应用由一组静态HTML页、Servlet、JSP和其他相关的class组成。每种组件在Web应用中都有固定的存放目录。Web应用的配置信息存放在web.xml文件中。在发布某些组件（如Servlet）时，必须在web.xml文件中添加相应的配置信息。 
</p>
		<p style="TEXT-INDENT: 2em">2.2.1 Web应用的目录结构 
</p>
		<p style="TEXT-INDENT: 2em">Web应用具有固定的目录结构，这里假定开发一个名为helloapp的Web应用。首先，应该在/webapps目录下创建这个Web应用的目录结构，参见表2-2。 
</p>
		<p style="TEXT-INDENT: 2em">表2-2 Web应用的目录结构 
</p>
		<table border="1">
				<tbody>
						<tr>
								<td>目 录 
</td>
								<td>描 述 
</td>
						</tr>
						<tr>
								<td>/helloapp 
</td>
								<td>Web应用的根目录， 所有的JSP和HTML文件 都存放于此目录下 
</td>
						</tr>
						<tr>
								<td>/helloapp/WEB-INF 
</td>
								<td>存放Web应用的发布描述文件web.xml 
</td>
						</tr>
						<tr>
								<td>/helloapp/WEB-INF/classes 
</td>
								<td>存放各种class文件， Servlet类文件也放于此目录下 
</td>
						</tr>
						<tr>
								<td>/helloapp/WEB-INF/lib 
</td>
								<td>存放Web应用所需的各种JAR文件 </td>
						</tr>
				</tbody>
		</table>
		<p style="TEXT-INDENT: 2em">例如，在这个目录下，可以存放JDBC驱动程序的JAR文件 
</p>
		<p style="TEXT-INDENT: 2em">从表2-2中，我们看到在classes以及lib子目录下，都可以存放Java类文件。在运行过程中，Tomcat的类装载器先装载classes目录下的类，再装载lib目录下的类。因此，如果两个目录下存在同名的类，classes目录下的类具有优先权。 
</p>
		<p style="TEXT-INDENT: 2em">本章介绍的helloapp应用的目录结构如图2-1所示，helloapp应用在Windows资源管理器中的展开如图2-2所示。 
</p>
		<p style="TEXT-INDENT: 2em">在helloapp应用中创建了如下组件： 
</p>
		<p style="TEXT-INDENT: 2em">HTML组件：index.htm 
</p>
		<p style="TEXT-INDENT: 2em">JSP组件：login.jsp和hello.jsp 
</p>
		<p style="TEXT-INDENT: 2em">Servlet组件：DispatcherServlet 
</p>
		<p style="TEXT-INDENT: 2em">这些组件之间的链接关系为： 
</p>
		<p style="TEXT-INDENT: 2em">index.htm→login.jsp→DispatcherServlet→hello.jsp <img style="BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid" src="http://tech.ccidnet.com/col/attachment/2005/6/445689.gif" /> 图2-1 helloapp应用的目录结构 <img style="BORDER-RIGHT: black 1px solid; BORDER-TOP: black 1px solid; BORDER-LEFT: black 1px solid; BORDER-BOTTOM: black 1px solid" src="http://tech.ccidnet.com/col/attachment/2005/6/445691.jpg" /> 图2-2 helloapp应用在Windows资源管理器中的展开图 
</p>
		<p style="TEXT-INDENT: 2em">2.2.2 web.xml文件 
</p>
		<p style="TEXT-INDENT: 2em">Java Web应用通过一个基于XML的发布描述符文件来配置其发布信息，这个文件名为web.xml，它存放于WEB-INF子目录下。在附录B中将详细介绍web.xml的配置方法，在附录C中将介绍XML的基本知识。在web.xml文件中可包含如下配置信息： 
</p>
		<p style="TEXT-INDENT: 2em">Servlet的定义 
</p>
		<p style="TEXT-INDENT: 2em">Servlet的初始化参数 
</p>
		<p style="TEXT-INDENT: 2em">Servlet以及JSP的映射 
</p>
		<p style="TEXT-INDENT: 2em">安全域配置参数 
</p>
		<p style="TEXT-INDENT: 2em">welcome文件清单 
</p>
		<p style="TEXT-INDENT: 2em">资源引用 
</p>
		<p style="TEXT-INDENT: 2em">环境变量的定义 
</p>
		<p style="TEXT-INDENT: 2em">现在，创建一个默认的web.xml文件，并把这个文件放到WEB-INF目录中。 
</p>
		<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
				<tbody>
						<tr>
								<td style="FONT-SIZE: 9pt" bgcolor="#e6e6e6">
										<pre>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br /><br />&lt;!DOCTYPE web-app PUBLIC<br />  '-//Sun Microsystems,<br />  Inc.//DTD Web Application 2.3<br />  //EN'<br />  'http://java.sun.com/<br />  j2ee/dtds/web-app_2_3.dtd'&gt;<br /><br />&lt;web-app&gt;<br />&lt;/web-app&gt;</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<p style="TEXT-INDENT: 2em">以上web.xml文件的第一行指定了XML的版本和字符编码，第二行DOCTYPE指定文档类型，接下来声明了一个元素，所有关于Web应用的配置元素都将加入到这个元素中。 
</p>
		<p style="TEXT-INDENT: 2em">2.2.3 在server.xml中加入元素 
</p>
		<p style="TEXT-INDENT: 2em">元素是/conf/server.xml中使用最频繁的元素，它代表了运行在上的单个Web应用。一个中可以有多个元素。每个Web应用必须有惟一的URL路径，这个URL路径在元素的path属性中设定。例如，在名为"localhost"的元素中加入如下元素： 
</p>
		<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
				<tbody>
						<tr>
								<td style="FONT-SIZE: 9pt" bgcolor="#e6e6e6">
										<pre>&lt;!-- Define the default virtual host --&gt;<br />&lt;Host name="localhost" debug="0" appBase="webapps"<br />unpackWARs="true" autoDeploy="true"&gt;<br />……<br />……<br />&lt;Context path="/helloapp"<br />docBase="helloapp" debug="0"<br />reloadable="true"/&gt;<br /><br />&lt;/Host&gt;</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<p style="TEXT-INDENT: 2em">Context元素的各个属性的说明参见表2-3。 
</p>
		<p style="TEXT-INDENT: 2em">表2-3 Context元素的属性 
</p>
		<table border="1">
				<tbody>
						<tr>
								<td>属 性 
</td>
								<td>描 述 
</td>
						</tr>
						<tr>
								<td>path 
</td>
								<td>指定访问该Web应用的URL入口 
</td>
						</tr>
						<tr>
								<td>docBase 
</td>
								<td>指定Web应用的文件路径，可以给定绝对路径，也可以给定相对于Host的appBase属性的相对路径（关于Host的appBase属性参见2.3节）。如果Web应用采用开放目录结构，则指定Web应用的根目录；如果Web应用是个WAR文件，则指定WAR文件的路径 
</td>
						</tr>
						<tr>
								<td>reloadable 
</td>
								<td>如果这个属性设为true， Tomcat服务器在运行状态下会监视在WEB-INF/classes 和WEB-INF/lib目录下class文件的改动。如果监测到有class文件被更新，服务器会自动重新加载Web应用 </td>
						</tr>
				</tbody>
		</table>
		<p style="TEXT-INDENT: 2em">在开发阶段，将reloadable属性设为true，有助于调试Servlet和其他的class文件。但是由于这一功能会加重服务器的运行负荷，因此建议在Web应用的产品发布阶段，将这个属性设为false。 <br /><br />自:<br /><a href="http://qingfengxiyu.spaces.live.com/blog/cns!e5f7a3aef9b09ed!149.entry">http://qingfengxiyu.spaces.live.com/blog/cns!e5f7a3aef9b09ed!149.entry</a></p>
<img src ="http://www.blogjava.net/jlin/aggbug/107664.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2007-03-31 17:50 <a href="http://www.blogjava.net/jlin/articles/107664.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>新手入门－JSP（完结篇）</title><link>http://www.blogjava.net/jlin/articles/74628.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Wed, 11 Oct 2006 09:16:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/articles/74628.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/74628.html</wfw:comment><comments>http://www.blogjava.net/jlin/articles/74628.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/74628.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/74628.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1. 						什么是						JSP						：																												 								     JSP														简单来说就是在一个网页中利用						&lt;%%&gt;						来嵌套						JAVA						程序片。例如：											...&nbsp;&nbsp;<a href='http://www.blogjava.net/jlin/articles/74628.html'>阅读全文</a><img src ="http://www.blogjava.net/jlin/aggbug/74628.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2006-10-11 17:16 <a href="http://www.blogjava.net/jlin/articles/74628.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个简单的servlet例子</title><link>http://www.blogjava.net/jlin/articles/63134.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Sat, 12 Aug 2006 02:32:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/articles/63134.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/63134.html</wfw:comment><comments>http://www.blogjava.net/jlin/articles/63134.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/63134.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/63134.html</trackback:ping><description><![CDATA[
		<p>以下是一个简单的servlet程序,首先见立一个目录,在D:\Tomcat\webapps\下建立servletdemo,并添加一个子目录<br />WEB-INF文件夹<br />import java.io.*;<br />import javax.servlet.*;<br />import javax.servlet.http.*;<br />public class HelloWorld extends HttpServlet {<br />  public void doGet(HttpServletRequest req, HttpServletResponse res)<br />                               throws ServletException, IOException {<br />    res.setContentType("text/html");<br />    PrintWriter out = res.getWriter();<br />    out.println("&lt;HTML&gt;");<br />    out.println("&lt;HEAD&gt;&lt;TITLE&gt;Hello World&lt;/TITLE&gt;&lt;/HEAD&gt;");<br />    out.println("&lt;BODY&gt;");<br />    out.println("&lt;BIG&gt;Hello World&lt;/BIG&gt;");<br />    out.println("&lt;/BODY&gt;&lt;/HTML&gt;");<br />  }<br /> public void doPost(HttpServletRequest req, HttpServletResponse res)<br />                              throws ServletException, IOException  {<br />                         doGet(req, res);<br />  }<br />}<br />在写一个部署的文件web.xml<br />&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;</p>
		<p>&lt;!DOCTYPE web-app<br />    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"<br />    "<a href="http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">http://java.sun.com/j2ee/dtds/web-app_2_2.dtd</a>"&gt;</p>
		<p>&lt;web-app&gt;<br />    &lt;servlet&gt;<br />        &lt;servlet-name&gt;<br />            HelloWorld<br />        &lt;/servlet-name&gt;<br />        &lt;servlet-class&gt;<br />            HelloWorld<br />        &lt;/servlet-class&gt;<br />    &lt;/servlet&gt;<br />    &lt;!--部署的第一种方式--&gt;<br />    &lt;servlet-mapping&gt;<br />        &lt;servlet-name&gt;<br />            HelloWorld<br />        &lt;/servlet-name&gt;<br />        &lt;url-pattern&gt;<br />            /HelloWorld<br />        &lt;/url-pattern&gt;<br />    &lt;/servlet-mapping&gt;<br />   &lt;!--方式2--&gt; <br />    &lt;servlet-mapping&gt;<br />        &lt;servlet-name&gt;<br />            HelloWorld<br />        &lt;/servlet-name&gt;<br />        &lt;url-pattern&gt;<br />            /HelloWorld.do<br />        &lt;/url-pattern&gt;<br />    &lt;/servlet-mapping&gt;<br />     &lt;!--方式3--&gt;  <br />     &lt;servlet-mapping&gt;<br />        &lt;servlet-name&gt;<br />            HelloWorld<br />        &lt;/servlet-name&gt;<br />        &lt;url-pattern&gt;<br />           *.hello<br />        &lt;/url-pattern&gt;<br />    &lt;/servlet-mapping&gt;<br />     &lt;!--方式4--&gt;  <br />     &lt;servlet-mapping&gt;<br />        &lt;servlet-name&gt;<br />            HelloWorld<br />        &lt;/servlet-name&gt;<br />        &lt;url-pattern&gt;<br />          /hello/*<br />        &lt;/url-pattern&gt;<br />    &lt;/servlet-mapping&gt;<br />&lt;/web-app&gt;<br />这样你就可以在浏览器中用以下url打开<br /><a href="http://localhost:8080/servletdemo/HelloWorld">http://localhost:8080/servletdemo/HelloWorld</a><br />/<u><font color="#800080">servletdemo</font></u>/HelloWorld<br />/hello.html<br />/well.hello<br />/fancy/meeting/you/here.hello<br />/hello/to/you</p>
<img src ="http://www.blogjava.net/jlin/aggbug/63134.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2006-08-12 10:32 <a href="http://www.blogjava.net/jlin/articles/63134.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsp中乱码的问题解决</title><link>http://www.blogjava.net/jlin/articles/63047.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Fri, 11 Aug 2006 09:01:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/articles/63047.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/63047.html</wfw:comment><comments>http://www.blogjava.net/jlin/articles/63047.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/63047.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/63047.html</trackback:ping><description><![CDATA[
		<p>
				<br />public static String UnicodeToChinese(String s) {<br />try {<br />if (s == null || s.equals(""))<br />return "";<br />String newstring = null;<br />newstring = new String(s.getBytes("ISO8859_1"), "gb2312");<br />return newstring;<br />} catch (UnsupportedEncodingException e) {<br />return s;<br />}<br />}</p>
		<p>public static String ChineseToUnicode(String s) {<br />try {<br />if (s == null || s.equals(""))<br />return "";<br />String newstring = null;<br />newstring = new String(s.getBytes("gb2312"), "ISO8859_1");<br />return newstring;<br />} catch (UnsupportedEncodingException e) {<br />return s;<br />}<br />}  <br />写进数据库时用ChineseToUnicode()方法进行编码,读出来的时候用UnicodeToChinese()方法进行解码既可<br /> <br /></p>
<img src ="http://www.blogjava.net/jlin/aggbug/63047.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2006-08-11 17:01 <a href="http://www.blogjava.net/jlin/articles/63047.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP中tomcat的SQL Server2000数据库连接池的配置</title><link>http://www.blogjava.net/jlin/articles/63045.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Fri, 11 Aug 2006 08:55:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/articles/63045.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/63045.html</wfw:comment><comments>http://www.blogjava.net/jlin/articles/63045.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/63045.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/63045.html</trackback:ping><description><![CDATA[
		<p>JSP中tomcat的SQL Server2000数据库连接池的配置<br />环境：<br />1. 数据库：Microsoft SQL Server 2000<br />2. 数据库驱动程序：com.microsoft.jdbc.sqlserver.SQLServerDriverr<br />JNDI（Java Naming and Directory Interface）概述：<br />Tomcat4（5）提供了一个与Java Enterprise Edition应用服务相兼容的JNDI--InitialContext实现实例。它的初始数据设置在$CATALINA_HOME/conf/server.xml文件里，并可能在网页应用环境描述（/WEB-INF/web.xml）里被下列元素引用：<br />1) &lt;env-entry&gt;--环境入口，设置应用程序如何操作。<br />2) &lt;resource-ref&gt;--资源参数，一般是数据库驱动程序、JavaMail Session、自定义类工厂等。<br />3) &lt;resource-env-ref&gt;--在Servlet 2.4里用来简化设置不需认证信息的资源资源如环境参数、resource-ref变量。<br />InitialContext在网页应用程序初始化时被设置，用来支持网页应用程序组件。所有的入口和资源都放在JNDI命名空间里的java:comp/env段里。点击下列网址以获取更多信息：<br />1) Java命名和目录接口（Java Naming and Directory Interface）<br />2) J2EE平台说明（J2EE Platform Specification）<br />设置JNDI资源<br />设置JNDI资源要在$CATALINA_HOME/conf/server.xml文件里使用下列标志符：<br />1) &lt;Environment&gt;--设置域个可变的JNDI InitialContext入口的名字和值（同上面说的&lt;env-entry&gt;等价）。<br />2) &lt;Resource&gt;--设置应用程序可用的资源的名字和类型（同上面说的&lt;resource-ref&gt;等价）。<br />3) &lt;ResourceParams&gt;--设置Java资源类工厂的名称或将用的JavaBean属性。<br />4) &lt;ResourceLink&gt;--给全局JNDI环境（JNDI Context）添加一个链接。<br />上述这些标志符必须放在&lt;Context&gt;和&lt;/Context&gt;之间（针对专门的网页应用程序）或&lt;DefaultContext&gt;和&lt;/DefaultContext&gt;之间。<br />此外，设在网页应用环境描述（Web Application Descriptor）（/WEB-INF/web.xml）里的名字和值也在初始环境（Initial Context）里被设置，当被&lt;Environemt&gt;元素值允许时将被重设初始值。<br />全局变量能在&lt;Server&gt;子元素的&lt;GlobalNamingResources&gt;里设置。<br />数据库连接池概述：<br />数据库连接是一种关键的有限的昂贵的资源，这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性，影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。<br />数据库连接池负责分配、管理和释放数据库连接，它允许应用程序重复使用一个现有的数据库连接，而再不是重新建立一个；释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。<br />数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中，这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用，连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数，当应用程序向连接池请求的连接数超过最大连接数量时，这些请求将被加入到等待队列中。数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素：<br />1) 最小连接数是连接池一直保持的数据库连接，所以如果应用程序对数据库连接的使用量不大，将会有大量的数据库连接资源被浪费；<br />2) 最大连接数是连接池能申请的最大连接数，如果数据库连接请求超过此数，后面的数据库连接请求将被加入到等待队列中，这会影响之后的数据库操作。<br />3) 如果最小连接数与最大连接数相差太大，那么最先的连接请求将会获利，之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过，这些大于最小连接数的数据库连接在使用完不会马上被释放，它将被放到连接池中等待重复使用或是空闲超时后被释放。<br />配置Tomcat数据库连接池的前提：<br />1. 必须装有Java运行环境；<br />2. 必须有SQL Server2000数据库服务器（可以不在本地）；<br />3. 必须有jtds.jar，并将它放在$CATALINA_HOME/common/lib目录下（只能是这里）。使用它是因为Microsoft公司的Java SQL Server驱动程序不支持二次查询，可到网上搜到。目前使用的是jtds-0.6.jar。<br />在$CATALINA_HOME/conf/server.xml里设置数据库连接池：<br />下面是配置的代码，必须放在&lt;Host&gt;和&lt;/Host&gt;之间。<br />&lt;Context path="/quality" docBase="quality" debug="0" reloadable="true" crossContext="true"&gt;<br />&lt;Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_quality_log." suffix=".txt" timestamp="true"/&gt;<br />&lt;Resource name="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/&gt;<br />&lt;ResourceParams name="jdbc/connectDB"&gt;<br />&lt;parameter&gt;<br />&lt;name&gt;maxActive&lt;/name&gt;<br />&lt;!-- Maximum number of DB connections in pool.Set to 0 for no limit. --&gt;<br />&lt;value&gt;100&lt;/value&gt;<br />&lt;/parameter&gt;<br />&lt;parameter&gt;<br />&lt;name&gt;maxIdle&lt;/name&gt;<br />&lt;!-- Maximum number of idle DB connections to retain in pool.Set to 0 for no limit. --&gt;<br />&lt;value&gt;30&lt;/value&gt;<br />&lt;/parameter&gt;<br />&lt;parameter&gt;<br />&lt;name&gt;maxWait&lt;/name&gt;<br />&lt;!-- Maximum time to wait for a DB connection to become available in ms.An exception is thrown if this timeout is exceeded.Set to -1 to wait indefinitely. --&gt;<br />&lt;value&gt;10000&lt;/value&gt;<br />&lt;/parameter&gt;<br />&lt;parameter&gt;<br />&lt;name&gt;removeAbandoned&lt;/name&gt;<br />&lt;!-- Abandoned DB connections are removed and recycled --&gt;<br />&lt;value&gt;true&lt;/value&gt;<br />&lt;/parameter&gt;<br />&lt;parameter&gt;<br />&lt;name&gt;removeAbandonedTimeout&lt;/name&gt;<br />&lt;!-- Use the removeAbandonedTimeout parameter to set the number of seconds a DB connection has been idle before it is considered abandoned. --&gt;<br />&lt;value&gt;60&lt;/value&gt;<br />&lt;/parameter&gt;<br />&lt;parameter&gt;<br />&lt;name&gt;logAbandoned&lt;/name&gt;<br />&lt;!-- Log a stack trace of the code which abandoned --&gt;<br />&lt;value&gt;false&lt;/value&gt;<br />&lt;/parameter&gt;<br />&lt;parameter&gt;<br />&lt;name&gt;factory&lt;/name&gt;<br />&lt;!-DBCP Basic Datasource Factory --&gt;<br />&lt;value&gt;org.apache.commons.dbcp.BasicDataSourceFactory&lt;/value&gt;<br />&lt;/parameter&gt;<br />&lt;parameter&gt;<br />&lt;name&gt;username&lt;/name&gt;<br />&lt;!-- Database User Name --&gt;<br />&lt;value&gt;Iorishinier&lt;/value&gt;<br />&lt;/parameter&gt;<br />&lt;parameter&gt;<br />&lt;name&gt;password&lt;/name&gt;<br />&lt;!-- User Password --&gt;<br />&lt;value&gt;mypasswd&lt;/value&gt;<br />&lt;/parameter&gt;<br />&lt;parameter&gt;<br />&lt;name&gt;driverClassName&lt;/name&gt;<br />&lt;!-- Database Driver Class Name --&gt;<br />&lt;value&gt;com.microsoft.jdbc.sqlserver.SQLServerDriverr&lt;/value&gt;<br />&lt;/parameter&gt;<br />&lt;parameter&gt;<br />&lt;name&gt;url&lt;/name&gt;<br />&lt;!-- Database Address --&gt;<br />&lt;value&gt;jdbc:jtds:sqlserver://127.127.127.127:1433/Northwind&lt;/value&gt;<br />&lt;/parameter&gt;<br />&lt;/ResourceParams&gt;<br />&lt;/Context&gt;<br />下面是一些参数的说明：<br />&lt;Context path="/quality" docBase="quality" debug="0" reloadable="true" crossContext="true"&gt;<br />其中：<br />1) path 指定路径，这里设定的是$CATALINA_HOME/webapps下的quality目录；<br />2) docBase 文件根目录。<br />3) reloader 当网页被更新时是否重新编译。<br />4) maxActive 连接池的最大数据库连接数。设为0表示无限制。<br />5) maxIdle 数据库连接的最大空闲时间。超过此空闲时间，数据库连接将被标记为不可用，然后被释放。设为0表示无限制。<br />6) maxWait 最大建立连接等待时间。如果超过此时间将接到异常。设为－1表示无限制。<br />7) removeAbandoned 回收被遗弃的（一般是忘了释放的）数据库连接到连接池中。<br />8) removeAbandonedTimeout 数据库连接过多长时间不用将被视为被遗弃而收回连接池中。<br />9) logAbandoned 将被遗弃的数据库连接的回收记入日志。<br />10) driverClassName JDBC驱动程序。<br />11) url 数据库连接字符串<br />在$CATALINA_HOME/webapps/quality/WEB-INF/web.xml里设置被引用的资源：<br />下面是配置代码，必须放在&lt;web-app&gt;和&lt;/web-app&gt;里。<br />&lt;!-- Database Config start --&gt;<br />&lt;resource-ref&gt;<br />&lt;description&gt;connectDB test&lt;/description&gt;<br />&lt;res-ref-name&gt;jdbc/connectDB&lt;/res-ref-name&gt;<br />&lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;<br />&lt;res-auth&gt;Container&lt;/res-auth&gt;<br />&lt;/resource-ref&gt;<br />&lt;!-- Database Config end --&gt;<br />下面是一下参数的必要说明：<br />1) description 对被引用的资源的描述。<br />2) res-ref-name 资源名称。见上面的&lt;ResourceParams name="jdbc/connectDB"&gt;<br />3) res-type 资源类型。见上面的&lt;Resource name="jdbc/connectDB" auth="Container" type="javax.sql.DataSource"/&gt;<br />在JSP中使用资源：<br />这是在$CATALINA_HOME/webapps/quality下的某级子目录里的jsp网页文件部分代码：<br />&lt;%@ page contentType="text/html;charset=GBK"%&gt;<br />&lt;%@ page errorPage="error.jsp"%&gt;<br />&lt;%@ page import="javax.naming.*"%&gt;<br />&lt;%@ page import="javax.sql.*"%&gt;<br />&lt;%@ page import="java.sql.*"%&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;%</p>
		<p>………………<br />………………</p>
		<p>// 数据库操作<br />Context ctx=null;<br />Connection cnn=null;<br />Statement stmt=null;<br />ResultSet rs=null;<br />try<br />{<br />ctx=new InitialContext();<br />if(ctx==null)<br />throw new Exception("没有匹配的环境");<br />DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");<br />if(ds==null)<br />throw new Exception("没有匹配数据库");</p>
		<p>cnn=ds.getConnection();<br />stmt=cnn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);<br />rs=stmt.executeQuery("select * from table1");</p>
		<p>………………<br />………………</p>
		<p>}<br />finally<br />{<br />if(rs!=null)<br />rs.close();<br />if(stmt!=null)<br />stmt.close();<br />if(cnn!=null)<br />cnn.close();<br />if(ctx!=null)<br />ctx.close();<br />}<br />%&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br />代码说明：<br />DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");<br />上面这句应用了刚才设的资源。<br />资源使用完要释放，尤其是Context资源，见try-catch-finally部分的finally代码段，这是一种好的习惯。资源释放时如果释放了上级资源，下级资源将先被释放。如：释放了ctx，那么资源释放顺序将是rs，stmt，cnn，ctx。换句话说，如果释放了ctx，那么rs，stmt和cnn都将不可用了。<br />这里的释放资源只是将数据库连接返回连接池中，并不是把资源真正释放掉，见数据库连接池概述。</p>
<img src ="http://www.blogjava.net/jlin/aggbug/63045.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2006-08-11 16:55 <a href="http://www.blogjava.net/jlin/articles/63045.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP连接数据库大全</title><link>http://www.blogjava.net/jlin/articles/63041.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Fri, 11 Aug 2006 08:50:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/articles/63041.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/63041.html</wfw:comment><comments>http://www.blogjava.net/jlin/articles/63041.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/63041.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/63041.html</trackback:ping><description><![CDATA[一、jsp连接Oracle8/8i/9i数据库（用thin模式） <br /><p>testoracle.jsp如下： <br />&lt; %@ page contentType="text/html;charset=gb2312"% &gt; <br />&lt; %@ page import="java.sql.*"% &gt; <br />&lt; html &gt; <br />&lt; body &gt; <br />&lt; %Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); <br />String url="jdbc:oracle:thin:@localhost:1521:orcl"; <br />//orcl为你的数据库的SID <br />String user="scott"; <br />String password="tiger"; <br />Connection conn= DriverManager.getConnection(url,user,password); <br />Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); <br />String sql="select * from test"; <br />ResultSet rs=stmt.executeQuery(sql); <br />while(rs.next()) {% &gt; <br />您的第一个字段内容为：&lt; %=rs.getString(1)% &gt; <br />您的第二个字段内容为：&lt; %=rs.getString(2)% &gt; <br />&lt; %}% &gt; <br />&lt; %out.print("数据库操作成功，恭喜你");% &gt; <br />&lt; %rs.close(); <br />stmt.close(); <br />conn.close(); <br />% &gt; <br />&lt; /body &gt; <br />&lt; /html &gt; </p><br /><p>二、jsp连接Sql Server7.0/2000数据库 </p><br /><p>testsqlserver.jsp如下： <br />&lt; %@ page contentType="text/html;charset=gb2312"% &gt; <br />&lt; %@ page import="java.sql.*"% &gt; <br />&lt; html &gt; <br />&lt; body &gt; <br />&lt; %Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); <br />String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs"; <br />//pubs为你的数据库的 <br />String user="sa"; <br />String password=""; <br />Connection conn= DriverManager.getConnection(url,user,password); <br />Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); <br />String sql="select * from test"; <br />ResultSet rs=stmt.executeQuery(sql); <br />while(rs.next()) {% &gt; <br />您的第一个字段内容为：&lt; %=rs.getString(1)% &gt; <br />您的第二个字段内容为：&lt; %=rs.getString(2)% &gt; <br />&lt; %}% &gt; <br />&lt; %out.print("数据库操作成功，恭喜你");% &gt; <br />&lt; %rs.close(); <br />stmt.close(); <br />conn.close(); <br />% &gt; <br />&lt; /body &gt; <br />&lt; /html &gt;</p><br /><p> </p><br /><p>三、jsp连接DB2数据库 </p><br /><p>testdb2.jsp如下： <br />&lt; %@ page contentType="text/html;charset=gb2312"% &gt; <br />&lt; %@ page import="java.sql.*"% &gt; <br />&lt; html &gt; <br />&lt; body &gt; <br />&lt; %Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance(); <br />String url="jdbc:db2://localhost:5000/sample"; <br />//sample为你的数据库名 <br />String user="admin"; <br />String password=""; <br />Connection conn= DriverManager.getConnection(url,user,password); <br />Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); <br />String sql="select * from test"; <br />ResultSet rs=stmt.executeQuery(sql); <br />while(rs.next()) {% &gt; <br />您的第一个字段内容为：&lt; %=rs.getString(1)% &gt; <br />您的第二个字段内容为：&lt; %=rs.getString(2)% &gt; <br />&lt; %}% &gt; <br />&lt; %out.print("数据库操作成功，恭喜你");% &gt; <br />&lt; %rs.close(); <br />stmt.close(); <br />conn.close(); <br />% &gt; <br />&lt; /body &gt; <br />&lt; /html &gt; </p><br /><p>四、jsp连接Informix数据库</p><br /><p>testinformix.jsp如下： <br />&lt; %@ page contentType="text/html;charset=gb2312"% &gt; <br />&lt; %@ page import="java.sql.*"% &gt; <br />&lt; html &gt; <br />&lt; body &gt; <br />&lt; %Class.forName("com.informix.jdbc.IfxDriver").newInstance(); <br />String url = <br />"jdbc:informix-sqli://123.45.67.89:1533/testDB:INFORMIXSERVER=myserver; <br />user=testuser;password=testpassword"; <br />//testDB为你的数据库名 </p><img src ="http://www.blogjava.net/jlin/aggbug/63041.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2006-08-11 16:50 <a href="http://www.blogjava.net/jlin/articles/63041.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个Servlet教程</title><link>http://www.blogjava.net/jlin/articles/62523.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Wed, 09 Aug 2006 02:59:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/articles/62523.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/62523.html</wfw:comment><comments>http://www.blogjava.net/jlin/articles/62523.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/62523.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/62523.html</trackback:ping><description><![CDATA[
		<font size="4">一、Servlet的基本结构。<br /><br />//Servlet de 基本结构<br /><br />import java.io.*;<br />import javax.servlet.*;<br />import javax.servlet.http.*;<br />public class SomeServlet extends HttpServlet {<br />public void doGet(HttpServletRequest request,<br />HttpServletResponse response) throws ServletException, IOException {<br /><br /><br />// 用 "request" 可以读取输入的值 (e.g. cookies)<br />// 和表单提交的数据<br />// 用 "response" 返回输出的内容<br /><br />PrintWriter out = response.getWriter();<br /><br />// 用 "out" 向浏览器写内容。<br /><br />}<br />}<br /><br /><br />Servlet都是有HttpServlet继承下来的。基本结构如上面的代码所示：<br />下面就举几个Servlet的小例子。<br /><br />//生成一般文本的例子 下载本例<br /><br />package test;<br />//用这条语句编译 javac -encoding iso8859_1 filename.java<br /><br />import java.io.*;<br />import javax.servlet.*;<br />import javax.servlet.http.*;<br /><br />public class HelloServlet extends HttpServlet {<br />public void doGet( HttpServletRequest requset,<br />HttpServletResponse response)<br />throws IOException, ServletException {<br />PrintWriter out = response.getWriter();<br />out.println("Hello,world!");<br />out.println("你好，万维网");<br />}<br />}<br /><br /><br />//生成HTML内容的例子。下载本程序<br /><br />package test;<br />//javac -encoding iso8859_1 HelloWWW.java<br />import java.io.*;<br />import javax.servlet.*;<br />import javax.servlet.http.*;<br /><br />public class HelloWWW extends HttpServlet {<br />public void doGet( HttpServletRequest requset,<br />HttpServletResponse response)<br />throws IOException, ServletException {<br />response.setContentType("text/html");<br />PrintWriter out = response.getWriter();<br />out.println("&lt;!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"&gt;"+<br />"&lt;HTML&gt;"+<br />"&lt;HEAD&gt;"+<br />"&lt;TITLE&gt;"+"Hello WWW by LoveJSP.site"+"&lt;/TITLE&gt;"+<br />"&lt;BODY&gt;"+<br />"&lt;H1&gt;Hello WWW&lt;/H1&gt;"+<br />"&lt;H1&gt;你好，万维网&lt;/H1&gt;"+<br />"&lt;h2&gt;&lt;A HREF=\"HTTP://LOVEJSP.COM\"&gt;welcom to LoveJSP.site&lt;/A&gt;&lt;/h2&gt;"+<br />"&lt;/BODY&gt;"+<br />"&lt;HTML&gt;");<br />}<br />}<br />处理表单提交的数据 Pely Gan<br /><br />在Web程序设计中，处理表单提交的数据是获取Web数据的主要方法，今天，我们来看一看Servlet中是怎样处理来自表单的数据的。<br /><br />表单数据的提交方法有两种Post方法和Get方法，当使用Post方法时，数据由标准的输入设备读入，当使用Get方法时，数据由CGI变量QUERY_STRING传递给表单数据处理程序。<br /><br />Servlet会自动将以上两种方法得到的数据进行处理，从而使用户只要简单的调用HttpServletRequest的getParameter方法，给出变量名称即可取得该变量的值。需要注意的是，变量的名称是大小写敏感的。对于Post方法或Get方法提交的数据，Servlet的处理方法是一样的。当请求的变量不存在时，将会返回一个空字符串。如果变量有多个值，你应该调用getParameterValues，这个方法将会返回一个字符串数组。使用getParameterNames可以取得所有变量的名称，该方法返回一个Emumeration方法。<br /><br />下面让我们来看一个简单的例子，下面这个Servlet读取表单中指定名称的五个字段的值。下载这个例子<br /><br />//Html file----&gt; postdata.htm 下载本文件<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;getFormData Servlet Example form LoveJSP.com&lt;/title&gt;<br />&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br />&lt;/head&gt;<br /><br />&lt;body bgcolor="#FFFFFF"&gt;<br />&lt;h1 align="center"&gt; &lt;i&gt;&lt;b&gt;Demo Page&lt;/b&gt;&lt;/i&gt;&lt;/h1&gt;<br />&lt;form action="/try/servlet/lovejsp.getFormData"&gt;<br />&lt;p&gt; &lt;/p&gt;<br />&lt;table width="41%" border="2" align="center"&gt;<br />&lt;tr bgcolor="#6633CC" align="center"&gt;<br />&lt;td colspan="2" align="center"&gt;&lt;font color='white'&gt;getFormData Servlet Demo<br />Page&lt;/font&gt;&lt;/td&gt;<br />&lt;/tr&gt;<br />&lt;tr bgcolor="#FFFFCC"&gt;<br />&lt;td align="center" width="43%"&gt;<br />&lt;div align="right"&gt;username:&lt;/div&gt;<br />&lt;/td&gt;<br />&lt;td width="57%"&gt;<br />&lt;div align="left"&gt;<br />&lt;input type="text" name="username"&gt;<br />&lt;/div&gt;<br />&lt;/td&gt;<br />&lt;/tr&gt;<br />&lt;tr bgcolor="#CCFF99"&gt;<br />&lt;td align="center" width="43%"&gt;<br />&lt;div align="right"&gt;password:&lt;/div&gt;<br />&lt;/td&gt;<br />&lt;td width="57%"&gt;<br />&lt;div align="left"&gt;<br />&lt;input type="password" name="password"&gt;<br />&lt;/div&gt;<br />&lt;/td&gt;<br />&lt;/tr&gt;<br />&lt;tr bgcolor="#FFFFCC"&gt;<br />&lt;td align="center" width="43%"&gt;<br />&lt;div align="right"&gt;Email:&lt;/div&gt;<br />&lt;/td&gt;<br />&lt;td width="57%"&gt;<br />&lt;div align="left"&gt;<br />&lt;input type="text" name="email"&gt;<br />&lt;/div&gt;<br />&lt;/td&gt;<br />&lt;/tr&gt;<br />&lt;tr bgcolor="#CCFF99"&gt;<br />&lt;td align="center" width="43%"&gt;<br />&lt;div align="right"&gt;Homepage:&lt;/div&gt;<br />&lt;/td&gt;<br />&lt;td width="57%"&gt;<br />&lt;div align="left"&gt;<br />&lt;input type="text" name="Homepage"&gt;<br />&lt;/div&gt;<br />&lt;/td&gt;<br />&lt;/tr&gt;<br />&lt;/table&gt;<br />&lt;p align="center"&gt;<br />&lt;input type="reset" name="Reset" value="clear"&gt;<br />&lt;input type="submit" name="Submit2" value="Let's Go"&gt;<br />&lt;/p&gt;<br />&lt;/form&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br /><br />//Servlet File getFormData.java 下载本文件<br /><br />package lovejsp;<br /><br />import java.io.*;<br />import javax.servlet.*;<br />import javax.servlet.http.*;<br /><br />/** Servlet getParameter Ex from Lovejsp.site(http://www.lovejsp.com)<br />*/<br /><br />public class getFormData extends HttpServlet {<br />public void doGet(HttpServletRequest request,<br />HttpServletResponse response)<br />throws ServletException, IOException {<br />response.setContentType("text/html");<br />PrintWriter out = response.getWriter();<br />String title = "读取表单数据";<br />out.println(LovejspTools.headTitle(title) + //a tools method to show the html code with title<br />"&lt;BODY BGCOLOR=\"#FDF5E6\"&gt;\n" +<br />"&lt;H1 ALIGN=CENTER&gt;" + title + "&lt;/H1&gt;\n" +<br />"&lt;UL&gt;\n" +<br />" &lt;LI&gt;&lt;B&gt;username&lt;/B&gt;: "<br />+ request.getParameter("username") + "\n" +<br />" &lt;LI&gt;&lt;B&gt;password&lt;/B&gt;: "<br />+ request.getParameter("password") + "\n" +<br />" &lt;LI&gt;&lt;B&gt;Email&lt;/B&gt;: "<br />+ request.getParameter("Email") + "\n" +<br />" &lt;LI&gt;&lt;B&gt;Homepage&lt;/B&gt;: "<br />+ request.getParameter("Homepage") + "\n" +<br />"&lt;/UL&gt;\n" +<br />"&lt;/BODY&gt;&lt;/HTML&gt;");<br />}<br />}<br /><br /><br />这个程序的运行结果如下图所示：<br /><br /><br /><br /><br /><br />大家可能注意到了，上面的结果中Email的值是null，这是因为在表单中没有这个字段，表单的email的名称是email。<br /><br />下面这个程序是getParameterNames的示例，也是调试程序的很好的工具，它的功能是显示所有的表单数据。<br /><br />//Servlet File ShowAllFormData.java 下载本文件<br /><br />package lovejsp;<br /><br />import java.io.*;<br />import javax.servlet.*;<br />import javax.servlet.http.*;<br />import java.util.*;<br /><br />public class ShowAllFormData extends HttpServlet {<br />public void doGet(HttpServletRequest request,<br />HttpServletResponse response)<br />throws ServletException, IOException {<br />response.setContentType("text/html");<br />PrintWriter out = response.getWriter();<br />String title = "显示所有的Form变量的值";<br />out.println("&lt;HTML&gt;&lt;HEAD&gt;&lt;TITLE&gt;"+title+"&lt;/TITLE&gt;&lt;/HEAD&gt;"+<br />"&lt;BODY BGCOLOR=\"#FDF5E6\"&gt;\n" +<br />"&lt;H1 ALIGN=CENTER&gt;" + title + "&lt;/H1&gt;\n" +<br />"&lt;TABLE BORDER=1 ALIGN=CENTER&gt;\n" +<br />"&lt;TR BGCOLOR=\"#FFAD00\"&gt;\n" +<br />"&lt;TH&gt;变量名称&lt;TH&gt;变量值");<br />Enumeration paramNames = request.getParameterNames();<br />while(paramNames.hasMoreElements()) {<br />String paramName = (String)paramNames.nextElement();<br />out.println("&lt;TR&gt;&lt;TD&gt;" + paramName + "\n&lt;TD&gt;");<br />String[] paramValues = request.getParameterValues(paramName);<br />if (paramValues.length == 1) {<br />String paramValue = paramValues[0];<br />if (paramValue.length() == 0)<br />out.print("&lt;I&gt;No Value&lt;/I&gt;");<br />else<br />out.print(paramValue);<br />} else {<br />out.println("&lt;UL&gt;");<br />for(int i=0; i&lt;paramValues.length; i++) {<br />out.println("&lt;LI&gt;" + paramValues[i]);<br />}<br />out.println("&lt;/UL&gt;");<br />}<br />}<br />out.println("&lt;/TABLE&gt;\n&lt;/BODY&gt;&lt;/HTML&gt;");<br />}<br /><br />public void doPost(HttpServletRequest request,<br />HttpServletResponse response)<br />throws ServletException, IOException {<br />doGet(request, response);<br />}<br />}<br /><br />运行结果：<br /><br /><br />好了，that's all for today,thank you all. see you next time<br />在Servlet中使用请求头(Request Header) LoveJSP.site<br /><br />Request Header简介<br />当一个客户端(通常是浏览器)向Web服务器发送一个请求是，它要发送一个请求的命令行，一般是GET或POST命令，当发送POST命令时，它还必须向服务器发送一个叫"Content-Length”的请求头(Request Header) 用以指明请求数据的长度，除了Content-Length之外，它还可以向服务器发送其它一些Headers，如：<br /><br />Accept 浏览器可接受的MIME类型<br />Accept-Charset 浏览器支持的字符编码<br />Accept-Encoding 浏览器知道如何解码的数据编码类型(如 gzip)。Servlets 可以预先检查浏览器是否支持gzip并可以对支持gzip的浏览器返回gzipped的HTML页面，并设置Content-Encoding回应头(response header)来指出发送的内容是已经gzipped的。在大多数情况下，这样做可以加快网页下载的速度。<br />Accept-Language 浏览器指定的语言，当Server支持多语种时起作用。<br />Authorization 认证信息，一般是对服务器发出的WWW-Authenticate头的回应。<br />Connection 是否使用持续连接。如果servlet发现这个字段的值是Keep-Alive，或者由发出请求的命令行发现浏览器支持 HTTP 1.1 (持续连接是它的默认选项)，使用持续连接可以使保护很多小文件的页面的下载时间减少。<br />Content-Length (使用POST方法提交时，传递数据的字节数)<br />Cookie (很重要的一个Header，用来进行和Cookie有关的操作，详细的信息将在后面的教程中介绍)<br />Host (主机和端口)<br />If-Modified-Since (只返回比指定日期新的文档，如果没有，将会反回304 "Not Modified")<br />Referer (URL)<br />User-Agent (客户端的类型，一般用来区分不同的浏览器)<br />如果你想更多的了解Request Header的内容，你可以访问W3C的网站。<br /><br />在Servlet中读取Request Header的内容<br /><br />在Servlet中读取Request Header的值是很简单的，只要调用HttpServletRequest的getHeader方法就可以了，当你指定要返回的Header的名称，该方法就会返回String类型的Header的内容，如果指定的Header不存在，就返回null。调用getHeaderNames可以返回包含所有Header名字的Enumeration.<br /><br />读取所有Request Header值的Servlet程序<br /><br />下面是Tomcat中所带的Servlet例子中关于Request Header的例子，下载该程序。<br /><br />import java.io.*;<br />import java.util.*;<br />import javax.servlet.*;<br />import javax.servlet.http.*;<br /><br />public class RequestHeaderExample extends HttpServlet {<br /><br />public void doGet(HttpServletRequest request, HttpServletResponse response)<br />throws IOException, ServletException<br />{<br />response.setContentType("text/html");<br />PrintWriter out = response.getWriter();<br />Enumeration e = request.getHeaderNames();<br />while (e.hasMoreElements()) {<br />String name = (String)e.nextElement();<br />String value = request.getHeader(name);<br />out.println(name + " = " + value);<br />}<br />}<br />}<br />访问标准CGI变量<br />LoveJSP.site<br />1. CGI变量简介<br />如果你在以前使用过传统的CGI，你应该对"CGI变量”的概念很熟悉。 由这些变量可以取得一些和请求（Request）有关的信息。其中一些来自于 HTTP 请求命令行（request line） 和headers （例如：在URI中问号后面的部分或者Content-Length header），一些来自于 Socket本身（例如：被请求主机的IP和名称），还有一些来自于服务器的配置信息（例如：被映射为URL目录的实际 路径）。<br /><br />2. Servlet和标准CGI变量之间的对应关系<br />下面的表格中给出了Servlet和标准CGI变量之间的对应关系，对以前使用CGI变量进行编程的朋友会有很大的帮助。 在下表中我们假设request是HttpServletRequest类型的对象。<br />CGI变量 含义 在 doGet 或 doPost 访问的办法<br />AUTH_TYPE 如果在请求中有 Authorization header ，则这个变量将会被赋值 (basic 或 digest) request.getAuthType()<br />CONTENT_LENGTH 只有当请求的方法是 POST 时这个变量才会有意义，它表示传送的数据的字节数。 String.valueOf(request.getContentLength()) （返回String） 或者 request.getContentLength()，返回一个整数（int）。<br />CONTENT_TYPE 如果被赋值，就表示数据的MIME类型。 request.getContentType()<br />DOCUMENT_ROOT 和网站根目录对应的实际路径 getServletContext().getRealPath("/") 注意：在以前的Servlet标准中，这条语句是这样写的request.getRealPath("/") 。<br />HTTP_XXX_YYY 访问任意的HTTP headers request.getHeader("Xxx-Yyy")<br />PATH_INFO URL 指向的路径的信息。由于Servlet可以和服务器直接通讯，所以这个变量对Servlet没什么作用。 request.getPathInfo()<br />PATH_TRANSLATED 在Server上被映射为web目录的目录的真实路径的信息。和上一个变量一样，对Servlet用处不大。 request.getPathTranslated()<br />QUERY_STRING 如果用 GET 方法发出请求（requests），这个变量中将会存放请求的数据，其 形式为经过URL编码的一个大字符串。在servlet中，你很少会用到这个原始的字符串。而是 用 request.getParameter 方法来访问某个特定的请求数据。 request.getQueryString()<br />REMOTE_ADDR 客户端的IP地址，是String类型的。其形式类似于 "192.9.48.9"。 request.getRemoteAddr()<br />REMOTE_HOST 发出请求的客户端的域名(例如. "java.sun.com") 如果不能检测到域名，就用客户端的IP地址代替。 request.getRemoteHost()<br />REMOTE_USER 如果 Authorization header 被赋值，则这个变量中放有用户名。 request.getRemoteUser()<br />REQUEST_METHOD 请求的类型。通常为 GET 或 POST，但也可能是 HEAD， PUT， DELETE， OPTIONS， 或者 TRACE。 request.getMethod()<br />SCRIPT_NAME srvlet的路径 request.getServletPath()<br />SERVER_NAME 服务器的名称 request.getServerName()<br />SERVER_PORT 服务器的端口 String.valueOf(request.getServerPort())（返回String类型） request.getServerPort()（返回int类型）<br />SERVER_PROTOCOL 在请求命令行中用的协议的版本号。(例如. HTTP/1.0 或 HTTP/1.1)。 request.getProtocol()<br />SERVER_SOFTWARE 所用 Web Server 软件的名称 getServletContext().getServerInfo()<br /><br /><br />3. 例子：读取CGI变量。<br />下面是一个显示除去 HTTP_XXX_YYY 外所有CGI变量的的servlet。他显示了在上面的表格中列出的所有CGI变量的值。<br />3.1 ShowCGIVariables.java<br />Download Here<br /><br />//! ####### Start ShowCGIVariables.java<br />import java.io.*;<br />import javax.servlet.*;<br />import javax.servlet.http.*;<br />import java.util.*;<br /><br /><br />public class ShowCGIVariables extends HttpServlet {<br />public void doGet(HttpServletRequest request,<br />HttpServletResponse response)<br />throws ServletException, IOException {<br />response.setContentType("text/html");<br />PrintWriter out = response.getWriter();<br />String[][] variables =<br />{ { "AUTH_TYPE", request.getAuthType() },<br />{ "CONTENT_LENGTH", String.valueOf(request.getContentLength()) },<br />{ "CONTENT_TYPE", request.getContentType() },<br />{ "DOCUMENT_ROOT", getServletContext().getRealPath("/") },<br />{ "PATH_INFO", request.getPathInfo() },<br />{ "PATH_TRANSLATED", request.getPathTranslated() },<br />{ "QUERY_STRING", request.getQueryString() },<br />{ "REMOTE_ADDR", request.getRemoteAddr() },<br />{ "REMOTE_HOST", request.getRemoteHost() },<br />{ "REMOTE_USER", request.getRemoteUser() },<br />{ "REQUEST_METHOD", request.getMethod() },<br />{ "SCRIPT_NAME", request.getServletPath() },<br />{ "SERVER_NAME", request.getServerName() },<br />{ "SERVER_PORT", String.valueOf(request.getServerPort()) },<br />{ "SERVER_PROTOCOL", request.getProtocol() },<br />{ "SERVER_SOFTWARE", getServletContext().getServerInfo() }<br />};<br />String title = "Servlet Example: 显示CGI变量";<br />out.println("&lt;HTML&gt;&lt;HEAD&gt;&lt;TITLE&gt;"+title +"&lt;/TITLE&gt;&lt;/HEAD&gt;"+<br />"&lt;BODY BGCOLOR=\"#FDF5E6\"&gt;\n" +<br />"&lt;H1 ALIGN=CENTER&gt;" + title + "&lt;/H1&gt;\n" +<br />"&lt;TABLE BORDER=1 ALIGN=CENTER&gt;\n" +<br />"&lt;TR BGCOLOR=\"#FFAD00\"&gt;\n" +<br />"&lt;TH&gt;CGI Variable Name&lt;TH&gt;Value");<br />for(int i=0; i&lt;variables.length; i++) {<br />String varName = variables[i][0];<br />String varValue = variables[i][1];<br />if (varValue == null)<br />varValue = "&lt;I&gt;没有被赋值&lt;/I&gt;";<br />out.println("&lt;TR&gt;&lt;TD&gt;" + varName + "&lt;TD&gt;" + varValue);<br />}<br />out.println("&lt;/TABLE&gt;&lt;/BODY&gt;&lt;/HTML&gt;");<br />}<br /><br />public void doPost(HttpServletRequest request,<br />HttpServletResponse response)<br />throws ServletException, IOException {<br />doGet(request, response);<br />}<br />}<br /><br />//! ####### End ShowCGIVariables.java </font>
<img src ="http://www.blogjava.net/jlin/aggbug/62523.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2006-08-09 10:59 <a href="http://www.blogjava.net/jlin/articles/62523.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>禁止Tomcat目录列表</title><link>http://www.blogjava.net/jlin/articles/57232.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Sat, 08 Jul 2006 01:32:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/articles/57232.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/57232.html</wfw:comment><comments>http://www.blogjava.net/jlin/articles/57232.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/57232.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/57232.html</trackback:ping><description><![CDATA[禁止Tomcat目录列表<br />记事本打开E:\Apache Group\Tomcat 5.0\conf\web.xml<br />查找&lt;param-name&gt;listings&lt;/param-name&gt;在下面<br />&lt;param-value&gt;true&lt;/param-value&gt;改为&lt;param-value&gt;false&lt;/param-value&gt;<img src ="http://www.blogjava.net/jlin/aggbug/57232.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2006-07-08 09:32 <a href="http://www.blogjava.net/jlin/articles/57232.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP内置对象 </title><link>http://www.blogjava.net/jlin/articles/57231.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Sat, 08 Jul 2006 01:31:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/articles/57231.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/57231.html</wfw:comment><comments>http://www.blogjava.net/jlin/articles/57231.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/57231.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/57231.html</trackback:ping><description><![CDATA[
		<p>JSP内置对象 <br />　　<br />内置对象是不需要声明，直接可以在JSP中使用的对象，JSP有以下几种内置对象： <br />　　<br />  request request表示HttpServletRequest对象。它包含了有关浏览器请求的信息，并且提供了几个用于获取cookie, header, 和session数据的有用的方法。 <br />　　<br />　response response表示HttpServletResponse对象，并提供了几个用于设置送回 浏览器的响应的方法（如cookies,头信息等） <br />　　<br />　out out 对象是javax.jsp.JspWriter的一个实例，并提供了几个方法使你能用于向浏览器回送输出结果。 <br />　　<br />　pageContext pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API，并且包装了通用的servlet相关功能的方法。 <br />　　<br />　session session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息 <br />　　<br />　application applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息 <br />　　<br />　config config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。 <br />　　<br />　page page表示从该页面产生的一个servlet实例。 </p>
		<p>--------------------------------------------------------------------------------<br /><br />  <br /> </p>
<img src ="http://www.blogjava.net/jlin/aggbug/57231.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2006-07-08 09:31 <a href="http://www.blogjava.net/jlin/articles/57231.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>