﻿<?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-无线&amp;移动互联网-文章分类-web 积累（前端 + 后台）</title><link>http://www.blogjava.net/jzone/category/39575.html</link><description>从业互联网、期盼物联网·· 不断的努力、追求，等待时机，相信该来的终究是会来的</description><language>zh-cn</language><lastBuildDate>Thu, 18 Nov 2010 13:23:53 GMT</lastBuildDate><pubDate>Thu, 18 Nov 2010 13:23:53 GMT</pubDate><ttl>60</ttl><item><title>org.hibernate.hql.antlr.HqlBaseParser.recover（NoSuchMethodError）</title><link>http://www.blogjava.net/jzone/articles/337733.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Wed, 10 Nov 2010 08:34:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/337733.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/337733.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/337733.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/337733.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/337733.html</trackback:ping><description><![CDATA[<p><span style="font-family: 微软雅黑">java.lang.NoSuchMethodError: org.hibernate.hql.antlr.HqlBaseParser.recover(Lantlr/RecognitionException;Lantlr/collections/impl/BitSet;)V</span></p>
<p><span style="font-family: 微软雅黑">描述：在线下操作无问题，发布到正式环境后报错<br />
思路：看到这个问题，首先我的第一反应是是否两个环境的jar有异同，因为经常会因为升级包导致老版本的找不到方法或者找不到类。当然，这个通过比较local跟生产机环境的jar很快就能判断猜测是否正确。<br />
其次看看HQL的语法是否正确，确实有网友说因为HQL的语法错误导致，检查了local的语法，没问题，那问题出在哪呢？再将两个生产机和local两个版本进行比较，然后得知两个HQL不同。</span></p>
 <img src ="http://www.blogjava.net/jzone/aggbug/337733.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2010-11-10 16:34 <a href="http://www.blogjava.net/jzone/articles/337733.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Appfuse快速构建J2EE应用</title><link>http://www.blogjava.net/jzone/articles/331426.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Wed, 08 Sep 2010 12:30:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/331426.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/331426.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/331426.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/331426.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/331426.html</trackback:ping><description><![CDATA[&nbsp; <span style="font-size: 10pt; color: black; font-family: 微软雅黑; letter-spacing: 0.35pt"><a href="http://www.ibm.com/developerworks/cn/java/j-lo-appfuse/">http://www.ibm.com/developerworks/cn/java/j-lo-appfuse/</a> </span>
<p style="word-break: break-all; line-height: 16.3pt; text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 微软雅黑; letter-spacing: 0.35pt">Appfuse</span><span style="font-size: 10pt; color: black; font-family: 微软雅黑; letter-spacing: 0.35pt">是由Matt Raible开发的一个指导性的入门级J2EE框架，它对如何集成流行的Spring、Hibernate、iBatis、struts、Xdcolet、junit 等基础框架给出了示范。提供了对Taperstry和JSF的支持。</span></p>
<p style="word-break: break-all; line-height: 16.3pt; text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 微软雅黑; letter-spacing: 0.35pt">　　● 在持久层方面，AppFuse可以使用Hibernate O/R映射工具（http://www.hibernate.org）、iBatis；</span></p>
<p style="word-break: break-all; line-height: 16.3pt; text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 微软雅黑; letter-spacing: 0.35pt">　　● 在容器方面，它采用了Spring Framework（http://www.springframework.org）；</span></p>
<p style="word-break: break-all; line-height: 16.3pt; text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 微软雅黑; letter-spacing: 0.35pt">　　● 在web框架方面，用户可以自由选择Struts、Spring/MVC，Webwork，Taperstry、JSF这几个web框架。</span></p>
<p style="word-break: break-all; line-height: 16.3pt; text-align: left" align="left"><span style="font-size: 10pt; color: black; font-family: 微软雅黑; letter-spacing: 0.35pt">　　● 在开发模式方面，采用TDD的开发方式，使用JUnit测试各层，甚至测试 jsp 输出的 w/o 错误。</span></p>
<p style="text-indent: 20.25pt"><span style="font-size: 10pt; color: black; font-family: 微软雅黑; letter-spacing: 0.35pt">● </span><span style="font-size: 10pt; color: black; font-family: 微软雅黑; letter-spacing: 0.35pt">简化开发方面，Appfuse预定义好了一套目录结构、基类、用来创建数据库、配置Tomcat、测试部署应用的 Ant 任务，帮助快速自动生成源程序和自动维护部分配置文件。</span></p>
<img src ="http://www.blogjava.net/jzone/aggbug/331426.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2010-09-08 20:30 <a href="http://www.blogjava.net/jzone/articles/331426.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>大型门户网站的十四大技术！！！</title><link>http://www.blogjava.net/jzone/articles/331425.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Wed, 08 Sep 2010 12:17:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/331425.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/331425.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/331425.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/331425.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/331425.html</trackback:ping><description><![CDATA[<p style="font-family: 微软雅黑">一、全文搜索（Lecene框架）<br />
<br />
二、缓存（实现页面级的URL缓存）<br />
<br />
三、生成静态文件（比如说，一个首页可能会员由多个部分组成，每个模块生成一个静态文件，然后才用服务器端包含SSI技术进行组装，其默认的后缀是.shtml）<br />
<br />
四、静态文件分布存储于独立的服务器（CSS，JS，图片，文件等，用一个Apache服务器来处理请求）<br />
<br />
五、分布式开发（各服务器间的数据同步，像www.sina.com网一样发区域的服务器数据的同步；便于使用服务器的集成，服务器可分为：WEB服务器、Session服务器、数据库服务器、静态文件服务器等等，一个WEB服务就可能由几十台机器集成后共同提供服务，负载均衡器的使用）<br />
<br />
六、数据库的拆分（数据库表的拆分和数据库表字段的拆分）<br />
<br />
七、搜索引擎优化（SEO）<br />
<br />
八、访问监控（JMS）<br />
<br />
九、单元测试，高并发访问测试<br />
<br />
十、开发文档的制作（E-R图，类关系图，需求说明书，详细设计说明书，数据字典等）<br />
<br />
十一、动态部署（Ant等工具的使用）<br />
<br />
十二、表单提交验证（客户端验证和服务器端验证，有一点要注意和说明的是：通过服务器端验证失败后，要返回到客户表单提交前的页，并把客户提交前输入所有的信息显示出来，提示客户出错的地方以便其进行修改。最好是可以定义一些全局的验证规则，如果E-mail的验证）<br />
<br />
十三、AJAX异步调用技术的使用（遮罩层的使用，应用于部分数据的验证如果登录名，加载等待信息的提示）<br />
<br />
十四、各项数据的备份（有独立的备份服务器，做到数据的同步备份）<br />
</p>
 <img src ="http://www.blogjava.net/jzone/aggbug/331425.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2010-09-08 20:17 <a href="http://www.blogjava.net/jzone/articles/331425.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Urlrewrite与Struts2.x结合使用</title><link>http://www.blogjava.net/jzone/articles/331311.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Tue, 07 Sep 2010 07:17:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/331311.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/331311.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/331311.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/331311.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/331311.html</trackback:ping><description><![CDATA[<p><span style="font-family: 微软雅黑">&nbsp;&nbsp;&nbsp;&nbsp;之前在struts1.x中就已经使用过urlrewrite(下载地址http://tuckey.org/urlrewrite/#download)这个jar包的了，有这个urlrewrite的目的就是为了简化与美观及对SEO，搜索引擎收录等方面都有好处。最近改版系统，由struts1.x升级为struts2.x，在使用时urlrewrite这个时，直接将xml文件及jar复制过来，然后就开始运行，但好遗憾的时，没有起到作用，于是上网查，查到一大堆的资料，基本上都是说加多两个配置选项，于是一样的照抄过，所以我的WEB.XML文件的配置如下(过滤器部分)： <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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;字符过滤器&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">encodingFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.springframework.web.filter.CharacterEncodingFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">encoding</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">UTF-8</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">forceEncoding</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">true</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">encodingFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/*</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;Hibernate&nbsp;Open&nbsp;Session&nbsp;In&nbsp;View&nbsp;filter(开启OSIV)</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">hibernateOpenSessionInViewFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">hibernateOpenSessionInViewFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/*</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;UrlRewriteFilter简化URL,有利于搜索引擎收录&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">UrlRewriteFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">logLevel</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">WARN</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">UrlRewriteFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/*</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;Struts2&nbsp;核心过滤器&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">struts2CleanupFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.apache.struts2.dispatcher.ActionContextCleanUp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">struts2CleanupFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/*</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">dispatcher</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">REQUEST</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">dispatcher</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">dispatcher</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">FORWARD</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">dispatcher</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">dispatcher</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">INCLUDE</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">dispatcher</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">struts2Filter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">struts2Filter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/*</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">dispatcher</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">REQUEST</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">dispatcher</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">dispatcher</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">FORWARD</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">dispatcher</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">dispatcher</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">INCLUDE</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">dispatcher</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
保存，运行，还是不成功！感觉就好似urlrewrite.jar这个包没启动成功一样，但我已经时时按网上的配置配好的了，加载顺序为： <br />
1, encodingFilter<br />
2, opensessionInviewfilter<br />
3, UrlRewriteFilter<br />
4, struts2-Cleanup<br />
5, struts2</span></p>
<p><span style="font-family: 微软雅黑">这已经是没有错的了，为什么会不成功的呢？于是再google，终于在http://wiki.springside.org.cn/display/SpringSide3/View这个页里看到一句：首先在web.xml中加入url rewrite filter,注意需放到struts2 filter的前面，然后在WEB-INF/下放一个urlrewrite.xml进行定义，然后在WEB-INF/下放一个urlrewrite.xml， 于是马上查看了一下，发现我自己的竟然写在src目录下，那些在WEB-INF目录下就是在classes生成urlrewrite.xml，于是将src目录下的删除，再将classes目录下移至WEB-INF目录下再运行。泪奔中.....实在太操心意了。&nbsp;<br />
<span style="font-family: 微软雅黑">&nbsp;&nbsp;&nbsp;&nbsp;<strong>原文出处</strong>：<a style="font-family: " href="http://it.chinawin.net/softwaredev/article-c88e.html">http://it.chinawin.net/softwaredev/article-c88e.html</a></span></span></p>
<img src ="http://www.blogjava.net/jzone/aggbug/331311.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2010-09-07 15:17 <a href="http://www.blogjava.net/jzone/articles/331311.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HttpWatch的检测指示说明：Blocked、Connect、Send、Wait、Receive</title><link>http://www.blogjava.net/jzone/articles/331308.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Tue, 07 Sep 2010 07:15:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/331308.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/331308.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/331308.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/331308.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/331308.html</trackback:ping><description><![CDATA[<span style="font-family: 微软雅黑">
<p><strong>Blocked</strong> time includes any pre-processing time (such as cache lookup) and the time spent waiting for a network connection to become available. Internet Explorer will only create a maximum of two concurrent network connections per host name (i.e. www.microsoft.com) and will queue up requests until a network connection is available. Often the Blocked time is the most significant factor in the download time of images embedded in a web page.</p>
<p><strong>闭塞时间</strong>，包括所有的过程之前的时间（像，cache对比）和等待网络链接的时间，IE在每个主机名（像www.microsoft.com）下最多只创建两个当前的网络连接，而且要排队等待直到这个网络链接可用，通常，闭塞时间影响网页中图片加载时间的重要因素。</p>
<p><strong>Connect</strong> is the time required to create a TCP connection to the web server (or proxy). If a secure HTTPS connection is being used this time includes the SSL handshake process. Keep-Alive connections are often used to avoid the overhead of repeatedly connecting to the web server.</p>
<p><strong>连接时间</strong>，是创建TCP连接到服务器或者代理服务器所花费的时间，如果一个包含SSL的安全的HTTPS连接存在，Keep-Alive链接经常被用到，以避免多次重复的连接WEB服务器。</p>
<p><strong>Send</strong> is the time required to send the HTTP request message to the server and will depend on the amount of data that is sent to the server. For example, long Send times will result from uploading files using an HTTP POST</p>
<p><strong>发送</strong>，是发送HTTP请求到服务器的时间，而且这个时间取决与发送请求的数据量的大小，例如，长的发送时间是由于用PSOT方式上传文件造成的。</p>
<p><strong>Wait</strong> is the idle time spent waiting for a response message from the server. This value includes delays introduced due to network latency and the time required to process the request on the web server.</p>
<p><strong>等待</strong>，是花费在等待服务器响应消息的空闲时间，这个值包括网络延迟和服务器处理请求的时间。</p>
<p><strong>Receive</strong> is the time taken to read the response message from the server. This value will be depend on the size of the content returned, network bandwidth and whether HTTP compression was used.</p>
<p><strong>接收</strong>，是花费在从服务器读取响应消息的时间。这个值可以受到请求消息内容的大小，网络带宽和是否使用了HTTP压缩。</p>
<p><strong>Cache</strong> Read is the time taken to read the content from the browser cache during (Cache) or 304 responses.</p>
<p><strong>缓存读取</strong>，是花费在从浏览器缓存中读取内容或者304响应的时间。</p>
<p><strong>TTFB</strong> (or Time To First Byte) is the duration from the initial network request being initiated by the browser to the first byte being received from the server. It includes TCP connection time, the time to send the request and the time taken to get the first byte of the response message.</p>
<p><strong>TTFB</strong>，是最初的网络请求被发起到从服务器接收到第一个字节这段时间，它包含了TCP连接时间，发送HTTP请求时间和获得响应消息第一个字节的时间。</p>
<p><strong>Network</strong> is the total duration of all network related operations for an HTTP request.</p>
<p><strong>Network</strong>，是所有的对一个HTTP请求的相关操作的这段时间。</p>
<p>&nbsp;</p>
</span>
<img src ="http://www.blogjava.net/jzone/aggbug/331308.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2010-09-07 15:15 <a href="http://www.blogjava.net/jzone/articles/331308.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SOA （Service-Oriented Architecture）的服务接口设计最佳实践</title><link>http://www.blogjava.net/jzone/articles/307440.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 27 Dec 2009 09:43:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/307440.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/307440.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/307440.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/307440.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/307440.html</trackback:ping><description><![CDATA[<a href="http://www.ibm.com/developerworks/cn/architecture/ar-servdsgn1/index.html">http://www.ibm.com/developerworks/cn/architecture/ar-servdsgn1/index.html</a> 
<img src ="http://www.blogjava.net/jzone/aggbug/307440.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-12-27 17:43 <a href="http://www.blogjava.net/jzone/articles/307440.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTTP &amp;&amp; HTTPS</title><link>http://www.blogjava.net/jzone/articles/307330.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Fri, 25 Dec 2009 16:57:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/307330.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/307330.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/307330.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/307330.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/307330.html</trackback:ping><description><![CDATA[http和https是web的传输协议，http是明文传送，数据没加密的。也就是说，局域网里面谁都能看到你在网页上发送的数据（使用嗅探器），比如说邮箱密码。但是https是加密传送，别人就算能看到数据，也是加密的。<br />
<br />
HTTP1.1（Hypertext Transfer Protocol Vertion 1.1）超文本传输协议-版本1.1<br />
&nbsp;&nbsp;&nbsp; 它是用来在Internet上传送超文本的传送协议。它是运行在TCP/IP协议族之上的HTTP应用协议，它可以使浏览器更加高效，使网络传输减少。任何服务器除了包括HTML文件以外，还有一个HTTP驻留程序，用于响应用用户请求。您的浏览器是HTTP客户，向服务器发送请求，当浏览器中输入了一个开始文件或点击了一个超级链接时，浏览器就向服务器发送了HTTP请求，此请求被送往由IP地址指定的URL。驻留程序接收到请求，在进行必要的操作后回送所要求的文件。<br />
&nbsp;&nbsp; HTTPS（Secure Hypertext Transfer Protocol）安全超文本传输协议<br />
&nbsp;&nbsp;&nbsp; 它是由Netscape开发并内置于其浏览器中，用于对数据进行压缩和解压操作，并返回网络上传送回的结果。HTTPS实际上应用了Netscape的完全套接字层（SSL）作为HTTP应用层的子层。（HTTPS使用端口443，而不是象HTTP那样使用端口80来和TCP/IP进行通信。）SSL使用40 位关键字作为RC4流加密算法，这对于商业信息的加密是合适的。HTTPS和SSL支持使用X.509数字认证，如果需要的话用户可以确认发送者是谁。<br />
注意：在远程管理网站默认设置是启用了SSL的时候也要用HTTPS啊!!!!!!!!!!!!!! <br />
<br />
HTTPS（Secure Hypertext Transfer Protocol）--安全超文本传输协议<br />
<br />
&nbsp;&nbsp; 它是由Netscape开发并内置于其浏览器中，用于对数据进行压缩和解压操作，并返回网络上传送回的结果。HTTPS实际上应用了Netscape的完全套接字层（SSL）作为HTTP应用层的子层。（HTTPS使用端口443，而不是象HTTP那样使用端口80来和TCP/IP进行通信。）SSL使用40 位关键字作为RC4流加密算法，这对于商业信息的加密是合适的。HTTPS和SSL支持使用X.509数字认证，如果需要的话用户可以确认发送者是谁。<br />
<br />
WWW的核心——HTTP协议<br />
<br />
众所周知，Internet的基本协议是TCP/IP协议，目前广泛采用的FTP、Archie Gopher等是建立在TCP/IP协议之上的应用层协议，不同的协议对应着不同的应用。&lt;BR&gt;&nbsp; WWW服务器使用的主要协议是HTTP协议，即超文体传输协议。由于HTTP协议支持的服务不限于WWW，还可以是其它服务，因而HTTP协议允许用户在统一的界面下，采用不同的协议访问不同的服务，如FTP、Archie、SMTP、NNTP等。另外，HTTP协议还可用于名字服务器和分布式对象管理。<br />
<br />
2.1 HTTP协议简介<br />
&nbsp; HTTP是一个属于应用层的面向对象的协议，由于其简捷、快速的方式，适用于分布式超媒体信息系统。它于1990年提出，经过几年的使用与发展，得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版，HTTP/1.1的规范化工作正在进行之中，而且HTTP-NG(Next Generation of HTTP)的建议已经提出。<br />
&nbsp; HTTP协议的主要特点可概括如下：<br />
1.支持客户/服务器模式。<br />
2.简单快速：客户向服务器请求服务时，只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。<br />
由于HTTP协议简单，使得HTTP服务器的程序规模小，因而通信速度很快。<br />
3.灵活：HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。<br />
4.无连接：无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求，并收到客户的应答后，即断开连接。采用这种方式可以节省传输时间。<br />
5.无状态：HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息，则它必须重传，这样可能导致每次连接传送的数据量增大。另一方面，在服务器不需要先前信息时它的应答就较快。<br />
<br />
2.2 HTTP协议的几个重要概念<br />
&nbsp; 1.连接(Connection)：一个传输层的实际环流，它是建立在两个相互通讯的应用程序之间。 <br />
&nbsp; 2.消息(Message)：HTTP通讯的基本单位，包括一个结构化的八元组序列并通过连接传输。<br />
&nbsp; 3.请求(Request)：一个从客户端到服务器的请求信息包括应用于资源的方法、资源的标识符和协议的版本号<br />
&nbsp; 4.响应(Response)：一个从服务器返回的信息包括HTTP协议的版本号、请求的状态(例如&#8220;成功&#8221;或&#8220;没找到&#8221;)和文档的MIME类型。<br />
&nbsp; 5.资源(Resource)：由URI标识的网络数据对象或服务。<br />
&nbsp; 6.实体(Entity)：数据资源或来自服务资源的回映的一种特殊表示方法，它可能被包围在一个请求或响应信息中。一个实体包括实体头信息和实体的本身内容。<br />
&nbsp; 7.客户机(Client)：一个为发送请求目的而建立连接的应用程序。<br />
&nbsp; 8.用户代理(User agent)：初始化一个请求的客户机。它们是浏览器、编辑器或其它用户工具。<br />
&nbsp; 9.服务器(Server)：一个接受连接并对请求返回信息的应用程序。<br />
&nbsp; 10.源服务器(Origin server)：是一个给定资源可以在其上驻留或被创建的服务器。<br />
&nbsp; 11.代理(Proxy)：一个中间程序，它可以充当一个服务器，也可以充当一个客户机，为其它客户机建立请求。请求是通过可能的翻译在内部或经过传递到其它的服务器中。一个代理在发送请求信息之前，必须解释并且如果可能重写它。<br />
&nbsp; 代理经常作为通过防火墙的客户机端的门户，代理还可以作为一个帮助应用来通过协议处理没有被用户代理完成的请求。<br />
&nbsp; 12.网关(Gateway)：一个作为其它服务器中间媒介的服务器。与代理不同的是，网关接受请求就好象对被请求的资源来说它就是源服务器；发出请求的客户机并没有意识到它在同网关打交道。<br />
&nbsp; 网关经常作为通过防火墙的服务器端的门户，网关还可以作为一个协议翻译器以便存取那些存储在非HTTP系统中的资源。<br />
&nbsp; 13.通道(Tunnel)：是作为两个连接中继的中介程序。一旦激活，通道便被认为不属于HTTP通讯，尽管通道可能是被一个HTTP请求初始化的。当被中继的连接两端关闭时，通道便消失。当一个门户(Portal)必须存在或中介(Intermediary)不能解释中继的通讯时通道被经常使用。<br />
&nbsp; 14.缓存(Cache)：反应信息的局域存储。<br />
<br />
2.3 HTTP协议的运作方式<br />
&nbsp; HTTP协议是基于请求／响应范式的。一个客户机与服务器建立连接后，发送一个请求给服务器，请求方式的格式为，统一资源标识符、协议版本号，后边是MIME信息包括请求修饰符、客户机信息和可能的内容。服务器接到请求后，给予相应的响应信息，其格式为一个状态行包括信息的协议版本号、一个成功或错误的代码，后边是MIME信息包括服务器信息、实体信息和可能的内容。<br />
&nbsp; 许多HTTP通讯是由一个用户代理初始化的并且包括一个申请在源服务器上资源的请求。最简单的情况可能是在用户代理(UA)和源服务器(O)之间通过一个单独的连接来完成(见图2-1)。<br />
图2-1<br />
&nbsp; 当一个或多个中介出现在请求／响应链中时，情况就变得复杂一些。中介由三种：代理(Proxy)、网关(Gateway)和通道(Tunnel)。一个代理根据URI的绝对格式来接受请求，重写全部或部分消息，通过URI的标识把已格式化过的请求发送到服务器。网关是一个接收代理，作为一些其它服务器的上层，并且如果必须的话，可以把请求翻译给下层的服务器协议。一个通道作为不改变消息的两个连接之间的中继点。当通讯需要通过一个中介(例如：防火墙等)或者是中介不能识别消息的内容时，通道经常被使用。 图2-2<br />
&nbsp; 上面的图2-2表明了在用户代理(UA)和源服务器(O)之间有三个中介(A,B和C)。一个通过整个链的请求或响应消息必须经过四个连接段。这个区别是重要的，因为一些HTTP通讯选择可能应用于最近的连接、没有通道的邻居，应用于链的终点或应用于沿链的所有连接。尽管图2-2是线性的，每个参与者都可能从事多重的、并发的通讯。例如，B可能从许多客户机接收请求而不通过A，并且／或者不通过C把请求送到A，在同时它还可能处理A的请求。<br />
&nbsp; 任何针对不作为通道的汇聚可能为处理请求启用一个内部缓存。缓存的效果是请求／响应链被缩短，条件是沿链的参与者之一具有一个缓存的响应作用于那个请求。下图说明结果链，其条件是针对一个未被UA或A加缓存的请求，B有一个经过C来自O的一个前期响应的缓存拷贝。<br />
图2-3<br />
&nbsp; 在Internet上，HTTP通讯通常发生在TCP/IP连接之上。缺省端口是TCP 80，但其它的端口也是可用的。但这并不预示着HTTP协议在Internet或其它网络的其它协议之上才能完成。HTTP只预示着一个可靠的传输。<br />
&nbsp; 以上简要介绍了HTTP协议的宏观运作方式，下面介绍一下HTTP协议的内部操作过程。<br />
&nbsp; 首先，简单介绍基于HTTP协议的客户/服务器模式的信息交换过程，如图2-4所示，它分四个过程，建立连接、发送请求信息、发送响应信息、关闭连接。<br />
图2-4<br />
&nbsp; 在WWW中，&#8220;客户&#8221;与&#8220;服务器&#8221;是一个相对的概念，只存在于一个特定的连接期间，即在某个连接中的客户在另一个连接中可能作为服务器。WWW服务器运行时，一直在TCP80端口(WWW的缺省端口)监听，等待连接的出现。<br />
&nbsp; 下面，讨论HTTP协议下客户/服务器模式中信息交换的实现。&nbsp;&nbsp; 1.建立连接&nbsp;&nbsp; 连接的建立是通过申请套接字(Socket)实现的。客户打开一个套接字并把它约束在一个端口上，如果成功，就相当于建立了一个虚拟文件。以后就可以在该虚拟文件上写数据并通过网络向外传送。<br />
&nbsp; 2.发送请求<br />
&nbsp; 打开一个连接后，客户机把请求消息送到服务器的停留端口上，完成提出请求动作。<br />
&nbsp; HTTP/1.0&nbsp; 请求消息的格式为：<br />
&nbsp; 请求消息=请求行(通用信息|请求头|实体头) CRLF[实体内容]<br />
&nbsp; 请求 行=方法 请求URL HTTP版本号 CRLF<br />
&nbsp; 方&nbsp; 法=GET|HEAD|POST|扩展方法<br />
&nbsp; U R&nbsp; L=协议名称+宿主名+目录与文件名<br />
&nbsp; 请求行中的方法描述指定资源中应该执行的动作，常用的方法有GET、HEAD和POST。不同的请求对象对应GET的结果是不同的，对应关系如下：<br />
&nbsp; 对象&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GET的结果<br />
&nbsp; 文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文件的内容<br />
&nbsp; 程序&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 该程序的执行结果<br />
&nbsp; 数据库查询&nbsp;&nbsp; 查询结果<br />
&nbsp; HEAD——要求服务器查找某对象的元信息，而不是对象本身。<br />
&nbsp; POST——从客户机向服务器传送数据，在要求服务器和CGI做进一步处理时会用到POST方法。POST主要用于发送HTML文本中FORM的内容，让CGI程序处理。<br />
&nbsp; 一个请求的例子为：<br />
&nbsp; GET <a href="http://networking.zju.edu.cn/zju/index.htm" target="_blank">http://networking.zju.edu.cn/zju/index.htm</a> HTTP/1.0<br />
&nbsp; 头信息又称为元信息，即信息的信息，利用元信息可以实现有条件的请求或应答 。<br />
&nbsp; 请求头——告诉服务器怎样解释本次请求，主要包括用户可以接受的数据类型、压缩方法和语言等。<br />
&nbsp; 实体头——实体信息类型、长度、压缩方法、最后一次修改时间、数据有效期等。<br />
&nbsp; 实体——请求或应答对象本身。<br />
&nbsp; 3.发送响应<br />
&nbsp; 服务器在处理完客户的请求之后，要向客户机发送响应消息。<br />
&nbsp; HTTP/1.0的响应消息格式如下：<br />
&nbsp; 响应消息=状态行(通用信息头|响应头|实体头) CRLF 〔实体内容〕<br />
&nbsp; 状 态 行=HTTP版本号 状态码 原因叙述<br />
&nbsp; 状态码表示响应类型<br />
&nbsp; 1&#215;&#215;&nbsp; 保留<br />
&nbsp; 2&#215;&#215;&nbsp; 表示请求成功地接收<br />
&nbsp; 3&#215;&#215;&nbsp; 为完成请求客户需进一步细化请求<br />
&nbsp; 4&#215;&#215;&nbsp; 客户错误<br />
&nbsp; 5&#215;&#215;&nbsp; 服务器错误 <br />
&nbsp; 响应头的信息包括：服务程序名，通知客户请求的URL需要认证，请求的资源何时能使用。<br />
&nbsp; 4.关闭连接<br />
&nbsp; 客户和服务器双方都可以通过关闭套接字来结束TCP/IP对话<br />
<img src ="http://www.blogjava.net/jzone/aggbug/307330.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-12-26 00:57 <a href="http://www.blogjava.net/jzone/articles/307330.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>优良、高效的web service 接口</title><link>http://www.blogjava.net/jzone/articles/306082.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Tue, 15 Dec 2009 16:37:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/306082.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/306082.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/306082.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/306082.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/306082.html</trackback:ping><description><![CDATA[<a href="http://www.blogjava.net/juleven/archive/2008/07/14/214836.html">http://www.blogjava.net/juleven/archive/2008/07/14/214836.html</a> <br />
<br />
<p align="center"><span lang="EN-US">Web Service</span><span>接口开发流程</span></p>
<p><span lang="EN-US"><span>1．<span>&nbsp; </span></span><span>设计数据库物理结构（可能体现为</span><span lang="EN-US">TABLE</span><span>）。</span></p>
<p><span lang="EN-US"><span>2．<span>&nbsp; </span></span><span>设计数据库的逻辑结构（可能为</span><span lang="EN-US">VIEW OR PROCEDURE</span><span>）。</span></p>
<p><span lang="EN-US"><span>3．<span>&nbsp; </span></span><span>对</span><span lang="EN-US">VIEW OR PROCEDURE </span><span>等数据库对象进行授权。</span></p>
<p><span lang="EN-US"><span>4．<span>&nbsp; </span></span><span>对数据库对象授权文档收集。（保证以后移动数据库时快速对数据库用户进行授权）</span></p>
<p><span lang="EN-US"><span>5．<span>&nbsp; </span></span><span>设计业务类库。</span></p>
<p><span lang="EN-US"><span>6．<span>&nbsp; </span></span><span>把业务类库函数的文档写到接口系统数据库以存档。</span><span lang="EN-US">(</span><span>由系统自动生成函数的唯一</span><span lang="EN-US">ID</span><span>号）</span></p>
<p><span lang="EN-US"><span>7．<span>&nbsp; </span></span><span>根据函数的唯一</span><span lang="EN-US">ID</span><span>号设计封装成</span><span lang="EN-US">Web Service</span><span>接口。</span></p>
<p><span lang="EN-US"><span>8．<span>&nbsp; </span></span><span>把接口系统数据库已存档的文档导出发给接口调用者。</span></p>
<p><span lang="EN-US">&nbsp;</span></p>
<p><span lang="EN-US">&nbsp;<a href="http://www.ibm.com/developerworks/cn/architecture/ar-servdsgn1/index.html">http://www.ibm.com/developerworks/cn/architecture/ar-servdsgn1/index.html</a> </span></p>
<p><span>说明：以上流程是在分析好需求并整理好关系后的接口开发流程。</span></p>
</span></span></span></span></span></span></span></span>
 <img src ="http://www.blogjava.net/jzone/aggbug/306082.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-12-16 00:37 <a href="http://www.blogjava.net/jzone/articles/306082.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TCP/IP 基础介绍</title><link>http://www.blogjava.net/jzone/articles/304068.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sat, 28 Nov 2009 16:30:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/304068.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/304068.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/304068.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/304068.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/304068.html</trackback:ping><description><![CDATA[<strong>TCP/IP是网络中使用的基本的通信协议。</strong>虽然从名字上看TCP/IP包括两个协议，传输控制协议(TCP)和网际协议(IP)，但TCP/IP实际上是一组协议，它包括上百个各种功能的协议，如：远程登录、文件传输和电子邮件等，而TCP协议和IP协议是保证数据完整传输的两个基本的重要协议。通常说TCP/IP是Internet协议族，而不单单是TCP和IP。 <br />
　　TCP/IP是用于计算机通信的一组协议，我们通常称它为TCP/IP协议族。它是70年代中期美国国防部为其ARPANET广域网开发的网络体系结构和协议标准，以它为基础组建的INTERNET是目前国际上规模最大的计算机网络，正因为INTERNET的广泛使用，使得TCP/IP成了事实上的标准。 <br />
　　之所以说TCP/IP是一个协议族，是因为TCP/IP协议包括TCP、IP、UDP、ICMP、RIP、TELNETFTP、SMTP、ARP、TFTP等许多协议，这些协议一起称为TCP/IP协议。以下我们对协议族中一些常用协议英文名称和用途作一介绍： <br />
<ul>
    <li>　　TCP(Transport Control Protocol)传输控制协议
    <li>　　IP(Internetworking Protocol)网间网协议
    <li>　　UDP(User Datagram Protocol)用户数据报协议
    <li>　　ICMP(Internet Control Message Protocol)互联网控制信息协议
    <li>　　SMTP(Simple Mail Transfer Protocol)简单邮件传输协议
    <li>　　SNMP(Simple Network manage Protocol)简单网络管理协议
    <li>　　FTP(File Transfer Protocol)文件传输协议
    <li>　　ARP(Address Resolation Protocol)地址解析协议 </li>
</ul>
&nbsp;&nbsp; <br />
从协议分层模型方面来讲，TCP/IP由四个层次组成：网络接口层、网间网层、传输层、应用层。其中： <br />
<ul>
    <li>　　<strong>网络接口层</strong> 这是TCP/IP软件的最低层，负责接收IP数据报并通过网络发送之，或者从网络上接收物理帧，抽出IP数据报，交给IP层。
    <li>　　<strong>网间网层</strong> 负责相邻计算机之间的通信。其功能包括三方面。一、处理来自传输层的分组发送请求，收到请求后，将分组装入IP数据报，填充报头，选择去往信宿机的路径，然后将数据报发往适当的网络接口。二、处理输入数据报：首先检查其合法性，然后进行寻径--假如该数据报已到达信宿机，则去掉报头，将剩下部分交给适当的传输协议；假如该数据报尚未到达信宿，则转发该数据报。三、处理路径、流控、拥塞等问题。
    <li>　　<strong>传输层</strong> 提供应用程序间的通信。其功能包括：一、格式化信息流；二、提供可靠传输。为实现后者，传输层协议规定接收端必须发回确认，并且假如分组丢失，必须重新发送。
    <li>　　<strong>应用层 </strong>向用户提供一组常用的应用程序，比如电子邮件、文件传输访问、远程登录等。远程登录TELNET使用TELNET协议提供在网络其它主机上注册的接口。TELNET会话提供了基于字符的虚拟终端。文件传输访问FTP使用FTP协议来提供网络内机器间的文件拷贝功能。 </li>
</ul>
<br />
　　前面我们已经学过关于OSI参考模型的相关概念，现在我们来看一看，相对于七层协议参考模型，TCP/IP协议是如何实现网络模型的。 <br />
<table class="bbcode">
    <tbody>
        <tr>
            <td>OSI中的层 </td>
            <td>　　 功能 </td>
            <td>　　 TCP/IP协议族 </td>
        </tr>
        <tr>
            <td>应用层 </td>
            <td>文件传输，电子邮件，文件服务，虚拟终端 </td>
            <td>TFTP，HTTP，SNMP，FTP，SMTP，DNS，Telnet </td>
        </tr>
        <tr>
            <td>表示层 </td>
            <td>数据格式化，代码转换，数据加密 </td>
            <td>没有协议 </td>
        </tr>
        <tr>
            <td>会话层 </td>
            <td>解除或建立与别的接点的联系 </td>
            <td>没有协议 </td>
        </tr>
        <tr>
            <td>传输层 </td>
            <td>提供端对端的接口 </td>
            <td>TCP，UDP </td>
        </tr>
        <tr>
            <td>网络层 </td>
            <td>为数据包选择路由</td>
            <td>IP，ICMP，RIP，OSPF，BGP，IGMP </td>
        </tr>
        <tr>
            <td>数据链路层 </td>
            <td>传输有地址的帧以及错误检测功能 </td>
            <td>SLIP，CSLIP，PPP，ARP，RARP，MTU </td>
        </tr>
        <tr>
            <td>物理层 </td>
            <td>以二进制数据形式在物理媒体上传输数据</td>
            <td>ISO2110，IEEE802 IEEE802.2 </td>
        </tr>
    </tbody>
</table>
　 <br />
　　数据链路层包括了硬件接口和协议ARP，RARP，这两个协议主要是用来建立送到物理层上的信息和接收从物理层上传来的信息； <br />
　　网络层中的协议主要有IP，ICMP，IGMP等，由于它包含了IP协议模块，所以它是所有基于TCP/IP协议网络的核心。在网络层中，IP模块完成大部分功能。ICMP和IGMP以及其他支持IP的协议帮助IP完成特定的任务，如传输差错控制信息以及主机/路由器之间的控制电文等。网络层掌管着网络中主机间的信息传输。 <br />
　　传输层上的主要协议是TCP和UDP。正如网络层控制着主机之间的数据传递，传输层控制着那些将要进入网络层的数据。两个协议就是它管理这些数据的两种方式：TCP是一个基于连接的协议（还记得我们在网络基础中讲到的关于面向连接的服务和面向无连接服务的概念吗？忘了的话，去看看）；UDP则是面向无连接服务的管理方式的协议。 <br />
　　应用层位于协议栈的顶端，它的主要任务就是应用了。上面的协议当然也是为了这些应用而设计的，具体说来一些常用的协议功能如下： <br />
　　Telnet：提供远程登录（终端仿真）服务，好象比较古老的BBS就是用的这个登陆。 <br />
　　FTP ：提供应用级的文件传输服务，说的简单明了点就是远程文件访问等等服务； <br />
　　SMTP：不用说拉，天天用到的电子邮件协议。 <br />
　　TFTP：提供小而简单的文件传输服务，实际上从某个角度上来说是对FTP的一种替换（在文件特别小并且仅有传输需求的时候）。 <br />
　　SNTP：简单网络管理协议。看名字就不用说什么含义了吧。 <br />
　　DNS：域名解析服务，也就是如何将域名映射城IP地址的协议。 <br />
　　HTTP：不知道各位对这个协议熟不熟悉啊？这是超文本传输协议，你之所以现在能看到网上的图片，动画，音频，等等，都是仰仗这个协议在起作用啊！ 
<img src ="http://www.blogjava.net/jzone/aggbug/304068.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-11-29 00:30 <a href="http://www.blogjava.net/jzone/articles/304068.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>access.log日志分析 --PV等</title><link>http://www.blogjava.net/jzone/articles/304014.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sat, 28 Nov 2009 04:47:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/304014.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/304014.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/304014.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/304014.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/304014.html</trackback:ping><description><![CDATA[作为一个电子商务网，必须要对自己产品市场占用率有清楚的认识，那么这个分析将是必须的；下面这个是我收集的一位哥们基于tomcat的分析<br />
&nbsp;&nbsp;<strong><span style="font-size: 10pt; color: #7b7d62; line-height: 150%; font-family: Verdana">&nbsp;<br />
</span></strong><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">常使用</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">web</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">服务器的朋友大都了解，一般的</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">web server</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">有两部分日志：</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">一是运行中的日志，它主要记录运行的一些信息，尤其是一些异常错误日志信息</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">二是访问日志信息，它记录的访问的时间，</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">IP</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">，访问的资料等相关信息。</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
&nbsp;&nbsp;&nbsp; <br />
</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">现在我来和大家介绍一下利用</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">tomcat</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">产生的访问日志数据，我们能做哪些有效的分析数据？</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
<br />
</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">首先是配置</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">tomcat</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">访问日志数据，默认情况下访问日志没有打开，配置的方式如下：</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">编辑</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"> ${catalina}/conf/server.xml</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">文件</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">.</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">注</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">:${catalina}</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">是</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">tomcat</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">的安装目录</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">把以下的注释</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">(&lt;!-- --&gt;)</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">去掉即可。</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Valve className="org.apache.catalina.valves.AccessLogValve"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directory="logs"&nbsp; prefix="localhost_access_log." suffix=".txt"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pattern="common" resolveHosts="false"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt;<br />
&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">其中</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"> directory</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">是产生的目录</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"> tomcat</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">安装</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">${catalina}</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">作为当前目录</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
&nbsp;&nbsp;&nbsp; pattern</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">表示日志生产的格式，</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">common</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">是</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">tomcat</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">提供的一个标准设置格式。其具体的表达式为</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"> %h %l %u %t "%r" %s %b<br />
&nbsp;&nbsp;&nbsp; </span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">但本人建议采用以下具体的配置，因为标准配置有一些重要的日志数据无法生。</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; %h %l %u %t "%r" %s %b %T&nbsp; <br />
</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">具体的日志产生样式说明如下</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">(</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">从官方文档中摘录</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">)</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">：</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
&nbsp;&nbsp;&nbsp; * %a - Remote IP address<br />
&nbsp;&nbsp;&nbsp; * %A - Local IP address<br />
&nbsp;&nbsp;&nbsp; * %b - Bytes sent, excluding HTTP headers, or '-' if zero<br />
&nbsp;&nbsp;&nbsp; * %B - Bytes sent, excluding HTTP headers<br />
&nbsp;&nbsp;&nbsp; * %h - Remote host name (or IP address if resolveHosts is false)<br />
&nbsp;&nbsp;&nbsp; * %H - Request protocol<br />
&nbsp;&nbsp;&nbsp; * %l - Remote logical username from identd (always returns '-')<br />
&nbsp;&nbsp;&nbsp; * %m - Request method (GET, POST, etc.)<br />
&nbsp;&nbsp;&nbsp; * %p - Local port on which this request was received<br />
&nbsp;&nbsp;&nbsp; * %q - Query string (prepended with a '?' if it exists)<br />
&nbsp;&nbsp;&nbsp; * %r - First line of the request (method and request URI)<br />
&nbsp;&nbsp;&nbsp; * %s - HTTP status code of the response<br />
&nbsp;&nbsp;&nbsp; * %S - User session ID<br />
&nbsp;&nbsp;&nbsp; * %t - Date and time, in Common Log Format<br />
&nbsp;&nbsp;&nbsp; * %u - Remote user that was authenticated (if any), else '-'<br />
&nbsp;&nbsp;&nbsp; * %U - Requested URL path<br />
&nbsp;&nbsp;&nbsp; * %v - Local server name<br />
&nbsp;&nbsp;&nbsp; * %D - Time taken to process the request, in millis<br />
&nbsp;&nbsp;&nbsp; * %T - Time taken to process the request, in seconds<br />
<br />
There is also support to write information from the cookie, incoming header, the Session or something else in the ServletRequest. It is modeled after the apache syntax:<br />
<br />
&nbsp;&nbsp;&nbsp; * %{xxx}i for incoming headers<br />
&nbsp;&nbsp;&nbsp; * %{xxx}c for a specific cookie<br />
&nbsp;&nbsp;&nbsp; * %{xxx}r xxx is an attribute in the ServletRequest<br />
&nbsp;&nbsp;&nbsp; * %{xxx}s xxx is an attribute in the HttpSession<br />
<br />
<br />
</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">现在我们回头再来看一下下面这个配置</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"> %h %l %u %t "%r" %s %b %T </span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">生产的访问日志数据，我们可以做哪些事？</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">先看一下，我们能得到的数据有</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">:<br />
&nbsp;&nbsp;&nbsp; * %h </span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">访问的用户</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">IP</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">地址</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
&nbsp;&nbsp;&nbsp; * %l </span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">访问逻辑用户名，通常返回</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">'-'<br />
&nbsp;&nbsp;&nbsp; * %u </span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">访问验证用户名，通常返回</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">'-'<br />
&nbsp;&nbsp;&nbsp; * %t </span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">访问日时</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
&nbsp;&nbsp;&nbsp; * %r </span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">访问的方式</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">(post</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">或者是</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">get)</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">，访问的资源和使用的</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">http</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">协议版本</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
&nbsp;&nbsp;&nbsp; * %s </span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">访问返回的</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">http</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">状态</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
&nbsp;&nbsp;&nbsp; * %b </span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">访问资源返回的流量</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
&nbsp;&nbsp;&nbsp; * %T </span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">访问所使用的时间</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
&nbsp;&nbsp;&nbsp; <br />
</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">有了这些数据，我们可以根据时间段做以下的分析处理</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">(</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">图片使用</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">jfreechart</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">工具动态生成</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">)</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">：</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
&nbsp; * </span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">独立</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">IP</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">数统计</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
&nbsp; * </span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">访问请求数统计</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
&nbsp; * </span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">访问资料文件数统计</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
&nbsp; * </span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">访问流量统计</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
&nbsp; * </span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">访问处理响应时间统计</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
&nbsp; * </span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">统计所有</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">404</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">错误页面</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
&nbsp; * </span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">统计所有</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana">500</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">错误的页面</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
&nbsp; * </span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">统计访问最频繁页面</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
&nbsp; * </span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">统计访问处理时间最久页面</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
&nbsp; * </span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">统计并发访问频率最高的页面</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
<br />
<img height="69" alt="" src="http://www.blogjava.net/images/blogjava_net/jzone/20091128/fenxi1.jpg" width="754" border="0" /><br />
<img height="386" alt="" src="http://www.blogjava.net/images/blogjava_net/jzone/20091128/fenxi2.jpg" width="762" border="0" /><br />
<img height="386" alt="" src="http://www.blogjava.net/images/blogjava_net/jzone/20091128/fenxi3.jpg" width="754" border="0" /><br />
<img height="381" alt="" src="http://www.blogjava.net/images/blogjava_net/jzone/20091128/fenxi4.jpg" width="754" border="0" /><br />
<img height="381" alt="" src="http://www.blogjava.net/images/blogjava_net/jzone/20091128/fenxi5.jpg" width="754" border="0" /><br />
<img height="380" alt="" src="http://www.blogjava.net/images/blogjava_net/jzone/20091128/fenxi6.jpg" width="754" border="0" /><br />
<img height="383" alt="" src="http://www.blogjava.net/images/blogjava_net/jzone/20091128/fenxi7.jpg" width="754" border="0" /><br />
<br />
<img height="382" alt="" src="http://www.blogjava.net/images/blogjava_net/jzone/20091128/fenxi8.jpg" width="754" border="0" /><br />
<img height="382" alt="" src="http://www.blogjava.net/images/blogjava_net/jzone/20091128/fenxi9.jpg" width="754" border="0" /><br />
<img height="343" alt="" src="http://www.blogjava.net/images/blogjava_net/jzone/20091128/fenxi10.jpg" width="754" border="0" /><br />
<img height="337" alt="" src="http://www.blogjava.net/images/blogjava_net/jzone/20091128/fenxi11.jpg" width="754" border="0" /><br />
<img height="338" alt="" src="http://www.blogjava.net/images/blogjava_net/jzone/20091128/fenxi12.jpg" width="754" border="0" /><br />
<img height="230" alt="" src="http://www.blogjava.net/images/blogjava_net/jzone/20091128/fenxi13.jpg" width="213" border="0" /><br />
&nbsp;
<p><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">分析工具包括两大部分：</span></p>
<p><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">一个是后台解释程序，每天执行一次对后台日志数据进行解析后保存到数据库中。</span><span style="font-size: 9pt; color: #7b7d62; font-family: Verdana"><br />
</span><span style="font-size: 9pt; color: #7b7d62; font-family: 宋体">第二个是显示程序，从数据库中查询数据并生成相应的图表信息。<br />
<br />
下面的是当前我们系统的PV，IP流量统计<br />
</span></p>
<img height="359" alt="" src="http://www.blogjava.net/images/blogjava_net/jzone/20091128/fenxi14.jpg" width="1027" border="0" /><br />
</span>
<img src ="http://www.blogjava.net/jzone/aggbug/304014.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-11-28 12:47 <a href="http://www.blogjava.net/jzone/articles/304014.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Lucene简单应用</title><link>http://www.blogjava.net/jzone/articles/303391.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Mon, 23 Nov 2009 14:25:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/303391.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/303391.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/303391.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/303391.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/303391.html</trackback:ping><description><![CDATA[  <img src ="http://www.blogjava.net/jzone/aggbug/303391.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-11-23 22:25 <a href="http://www.blogjava.net/jzone/articles/303391.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTTP 状态码</title><link>http://www.blogjava.net/jzone/articles/295145.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Tue, 15 Sep 2009 06:26:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/295145.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/295145.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/295145.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/295145.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/295145.html</trackback:ping><description><![CDATA[<ul>
    <li><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small"><strong>200</strong> - 服务器成功返回网页 </span></span></span></li>
    <li><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small"><strong>404</strong> - 请求的网页不存在 </span></span></span></li>
    <li><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small"><strong>503</strong> - 服务器超时 </span></span></span></li>
</ul>
<p><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">以下是 HTTP 状态码的完整列表。您也可以访问 </span></span></span><a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">HTTP 状态码上的 W3C 页以了解更多信息</span></span></span></a><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">。</span></span></span></p>
<p><strong><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">1xx 状态码</span></span></span></strong></p>
<p><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">表示临时响应并需要请求者继续执行操作的状态码。</span></span></span></p>
<p>
<table border="1">
    <tbody>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">100（继续）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分，正在等待其余部分。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">101（切换协议）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">请求者已要求服务器切换协议，服务器已确认并准备切换。</span></span></span></td>
        </tr>
    </tbody>
</table>
</p>
<p><strong><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">2xx 状态码</span></span></span></strong></p>
<p><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">表示成功处理了请求的状态码。</span></span></span></p>
<p>
<table border="1">
    <tbody>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">200（成功）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">服务器已成功处理了请求。通常，这表示服务器提供了请求的网页。如果针对您的 robots.txt 文件显示此状态码，则表示 Googlebot 已成功检索到该文件。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">201（已创建）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">请求成功并且服务器创建了新的资源。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">202（已接受）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">服务器已接受请求，但尚未处理。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">203（非授权信息）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">服务器已成功处理了请求，但返回的信息可能来自另一来源。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">204（无内容）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">服务器成功处理了请求，但没有返回任何内容。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">205（重置内容）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">服务器成功处理了请求，但没有返回任何内容。与 204 响应不同，此响应要求请求者重置文档视图（例如，清除表单内容以输入新内容）。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">206（部分内容）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">服务器成功处理了部分 GET 请求。</span></span></span></td>
        </tr>
    </tbody>
</table>
</p>
<p><strong><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">3xx 状态码</span></span></span></strong></p>
<p><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">要完成请求，需要进一步操作。通常，这些状态码用来重定向。建议您在每次请求中使用重定向不要超过 5 次。您可以使用网站管理员工具查看一下 Googlebot 在抓取重定向网页时是否遇到问题。<strong>诊断</strong>下的</span></span></span><a href="https://www.google.com/support/webmasters/bin/answer.py?answer=35156"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">网络抓取</span></span></span></a><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">页列出了由于重定向错误导致 Googlebot 无法抓取的网址。</span></span></span></p>
<p>
<table border="1">
    <tbody>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">300（多种选择）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">针对请求，服务器可执行多种操作。服务器可根据请求者 (user-agent) 选择一项操作，或提供操作列表供请求者选择。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">301（永久移动）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">请求的网页已永久移动到新位置。服务器返回此响应（对 GET 或 HEAD 请求的响应）时，会自动将请求者转到新位置。您应使用此代码告诉 Googlebot 某个网页或网站已永久移动到新位置。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">302（临时移动）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">服务器目前从不同位置的网页响应请求，但申请人应当继续使用原有位置来响应以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似，会自动将请求者转到不同的位置，但不应使用此代码来告诉 Googlebot 页面或网站已经移动，因为 Googlebot 要继续抓取原来的位置并编制索引。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">303（查看其他位置）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">请求者应当对不同的位置使用单独的 GET 请求来检索响应时，服务器返回此代码。对于除 HEAD 之外的所有请求，服务器会自动转到其他位置。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">304（未修改）</span></span></span></td>
            <td valign="top">
            <p><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">自从上次请求后，请求的网页未修改过。服务器返回此响应时，不会返回网页内容。</span></span></span></p>
            <p><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">如果网页自请求者上次请求后再也没有更改过，您应当将服务器配置为返回此响应（称为 If-Modified-Since HTTP 标头）。由于服务器可以告诉 Googlebot 自从上次抓取后网页没有变更，因此可节省带宽和开销。</span></span></span></p>
            </td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">305（使用代理）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">请求者只能使用代理访问请求的网页。如果服务器返回此响应，还表示请求者应当使用代理。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">307（临时重定向）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">服务器目前从不同位置的网页响应请求，但请求者应当继续使用原有位置来响应以后的请求。此代码与响应 GET 和 HEAD 请求的 &lt;a href=answer.py?answer=&gt;301&lt;/a&gt; 代码类似，会自动将请求者转到不同的位置，但您不应使用此代码来告诉 Googlebot 某个网页或网站已经移动，因为 Googlebot 会继续抓取原有位置并编制索引。</span></span></span></td>
        </tr>
    </tbody>
</table>
</p>
<p><strong><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">4xx 状态码</span></span></span></strong></p>
<p><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">这些状态码表示请求可能出错，这妨碍了服务器的处理。</span></span></span></p>
<p>
<table border="1">
    <tbody>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">400（错误请求）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">服务器不理解请求的语法。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">401（身份验证错误）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">此页要求授权。您可能不希望将此网页纳入索引。如果您的 Sitemap 中列出该网页，您可以将其删除。但如果您将其保留在您的 Sitemap 中，我们就不会抓取或索引该网页（尽管该网页将继续保持错误状态在此处列出）。如果我们将其作为搜索抓取的一部分抓取，您可以在我们的</span></span></span><a href="https://www.google.com/support/webmasters/bin/answer.py?answer=33574"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">网站管理员信息</span></span></span></a><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">中查阅其原因。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">403（禁止）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">服务器拒绝请求。如果您在 Googlebot 尝试抓取您网站上的有效网页时看到此状态码（可以在 Google 网站管理员工具&lt;strong&gt;诊断&lt;/strong&gt;下的&lt;strong&gt;网络抓取&lt; /strong&gt;页面上看到此信息），可能是您的服务器或主机拒绝 Googlebot 访问。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">404（未找到）</span></span></span></td>
            <td valign="top">
            <p><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">服务器找不到请求的网页。例如，对于服务器上不存在的网页经常会返回此代码。</span></span></span></p>
            <p><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">如果您的网站上没有 robots.txt 文件，而您在 Google 网站管理员工具</span></span></span><a href="https://www.google.com/support/webmasters/bin/answer.py?answer=35237"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">"诊断"标签的 robots.txt 页</span></span></span></a><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">上看到此状态码，那么这是正确的状态码。但是，如果您有 robots.txt 文件而又看到此状态码，则说明您的 robots.txt 文件可能命名错误或位于错误的位置（该文件应当位于顶级域，名为 robots.txt）。</span></span></span></p>
            <p><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">如果对于 Googlebot 尝试抓取的网址看到此状态码（在"诊断"标签的 </span></span></span><a href="https://www.google.com/support/webmasters/bin/answer.py?answer=35122"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">HTTP 错误页面</span></span></span></a><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">上），则表示 Googlebot 追踪的可能是另一个页面的无效链接（是旧链接或输入有误的链接）。</span></span></span></p>
            </td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">405（方法禁用）</span></span></span></td>
            <td valign="top">
            <p><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">禁用请求中指定的方法。</span></span></span></p>
            </td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">406（不接受）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">无法使用请求的内容特性响应请求的网页。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">407（需要代理授权）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">此状态码与 401 类似，但指定请求者必须授权使用代理。如果服务器返回此响应，还表示请求者应当使用代理。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">408（请求超时）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">服务器等候请求时发生超时。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">409（冲突）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息。服务器在响应与前一个请求相冲突的 PUT 请求时可能会返回此代码，以及两个请求的差异列表。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">410（已删除）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">请求的资源永久删除后，服务器返回此响应。该代码与 404（未找到）代码相似，但在资源以前存在而现在不存在的情况下，有时会用来替代 404 代码。如果资源已永久删除，您应当使用 301 指定资源的新位置。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">411（需要有效长度）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">服务器不接受不含有效内容长度标头字段的请求。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">412（未满足前提条件）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">服务器未满足请求者在请求中设置的其中一个前提条件。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">413（请求实体过大）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">服务器无法处理请求，因为请求实体过大，超出服务器的处理能力。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">414（请求的 URI 过长）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">请求的 URI（通常为网址）过长，服务器无法处理。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">415（不支持的媒体类型）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">请求的格式不受请求页面的支持。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">416（请求范围不符合要求）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">如果页面无法提供请求的范围，则服务器会返回此状态码。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">417（未满足期望值）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">服务器未满足"期望"请求标头字段的要求。</span></span></span></td>
        </tr>
    </tbody>
</table>
</p>
<p><strong><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">5xx 状态码</span></span></span></strong></p>
<p><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">这些状态码表示服务器在处理请求时发生内部错误。这些错误可能是服务器本身的错误，而不是请求出错。</span></span></span></p>
<p>
<table border="1">
    <tbody>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">500（服务器内部错误）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">服务器遇到错误，无法完成请求。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">501（尚未实施）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">服务器不具备完成请求的功能。例如，服务器无法识别请求方法时则会返回此代码。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">502（错误网关）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">服务器作为网关或代理，从上游服务器收到无效响应。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">503（服务不可用）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">服务器目前无法使用（由于超载或停机维护）。通常，这只是暂时状态。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">504（网关超时）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">服务器作为网关或代理，但是没有及时从上游服务器收到请求。</span></span></span></td>
        </tr>
        <tr>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">505（HTTP 版本不受支持）</span></span></span></td>
            <td valign="top"><span style="font-size: small"><span style="font-size: x-small"><span style="font-size: small">服务器不支持请求中所用的 HTTP 协议版本。</span></span></span></td>
        </tr>
    </tbody>
</table>
<font face="#ce_temp_font#"></font></p>
<img src ="http://www.blogjava.net/jzone/aggbug/295145.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-09-15 14:26 <a href="http://www.blogjava.net/jzone/articles/295145.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>web 单点登录</title><link>http://www.blogjava.net/jzone/articles/294499.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Wed, 09 Sep 2009 10:21:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/294499.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/294499.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/294499.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/294499.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/294499.html</trackback:ping><description><![CDATA[<a href="http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/index.html#rate">http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/index.html#rate</a> 
<img src ="http://www.blogjava.net/jzone/aggbug/294499.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-09-09 18:21 <a href="http://www.blogjava.net/jzone/articles/294499.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Listener 监听器的整理</title><link>http://www.blogjava.net/jzone/articles/293508.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Tue, 01 Sep 2009 14:47:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/293508.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/293508.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/293508.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/293508.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/293508.html</trackback:ping><description><![CDATA[<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">package</span><span style="color: #000000">&nbsp;com.Gavin.tools.sessioncount;<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;java.util.ArrayList;<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.List;<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.ServletContext;<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.HttpSession;<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.HttpSessionBindingEvent;<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.HttpSessionBindingListener;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img id="Codehighlighter1_272_666_Open_Image" onclick="this.style.display='none'; Codehighlighter1_272_666_Open_Text.style.display='none'; Codehighlighter1_272_666_Closed_Image.style.display='inline'; Codehighlighter1_272_666_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_272_666_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_272_666_Closed_Text.style.display='none'; Codehighlighter1_272_666_Open_Image.style.display='inline'; Codehighlighter1_272_666_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_272_666_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_272_666_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;不需要在web.xml中部署<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;向session绑定一个属性时调用。<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;每一个会话过程均启动一个监听器<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;HttpSessionBindingListener必须实例化后放入某一个session中，才可以进行监听。&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;session.setAttribute("listener",sessionListener);&nbsp;&nbsp;将监听器植入HttpSession，这将激发监听器调用valueBound方法<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&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;session.removeAttribute("listener")<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;Time&nbsp;Out<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.invalidate()<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.setAttribute("onlineUserListener",&nbsp;"其他对象");&nbsp;即可自动调用监听器的valueUnbound方法。<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img id="Codehighlighter1_748_1760_Open_Image" onclick="this.style.display='none'; Codehighlighter1_748_1760_Open_Text.style.display='none'; Codehighlighter1_748_1760_Closed_Image.style.display='inline'; Codehighlighter1_748_1760_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_748_1760_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_748_1760_Closed_Text.style.display='none'; Codehighlighter1_748_1760_Open_Image.style.display='inline'; Codehighlighter1_748_1760_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;HttpSessionBindingEventTest&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;HttpSessionBindingListener&nbsp;</span><span id="Codehighlighter1_748_1760_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_748_1760_Open_Text"><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;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;username;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_831_862_Open_Image" onclick="this.style.display='none'; Codehighlighter1_831_862_Open_Text.style.display='none'; Codehighlighter1_831_862_Closed_Image.style.display='inline'; Codehighlighter1_831_862_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_831_862_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_831_862_Closed_Text.style.display='none'; Codehighlighter1_831_862_Open_Image.style.display='inline'; Codehighlighter1_831_862_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;HttpSessionBindingEventTest(String&nbsp;username)&nbsp;</span><span id="Codehighlighter1_831_862_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_831_862_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">this</span><span style="color: #000000">.username&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;username;<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" />&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;onlineUserList&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</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_952_1398_Open_Image" onclick="this.style.display='none'; Codehighlighter1_952_1398_Open_Text.style.display='none'; Codehighlighter1_952_1398_Closed_Image.style.display='inline'; Codehighlighter1_952_1398_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_952_1398_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_952_1398_Closed_Text.style.display='none'; Codehighlighter1_952_1398_Open_Image.style.display='inline'; Codehighlighter1_952_1398_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">void</span><span style="color: #000000">&nbsp;valueBound(HttpSessionBindingEvent&nbsp;event)&nbsp;</span><span id="Codehighlighter1_952_1398_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_952_1398_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;HttpSession&nbsp;session&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;event.getSession();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletContext&nbsp;application&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;session.getServletContext();<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">&nbsp;把用户名放入在线列表</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;List&nbsp;onlineUserList&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(List)&nbsp;application.getAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">onlineUserList</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;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;第一次使用前，需要初始化</span><span style="color: #008000"><br />
<img id="Codehighlighter1_1197_1301_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1197_1301_Open_Text.style.display='none'; Codehighlighter1_1197_1301_Closed_Image.style.display='inline'; Codehighlighter1_1197_1301_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1197_1301_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1197_1301_Closed_Text.style.display='none'; Codehighlighter1_1197_1301_Open_Image.style.display='inline'; Codehighlighter1_1197_1301_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">if</span><span style="color: #000000">&nbsp;(onlineUserList&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 id="Codehighlighter1_1197_1301_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_1197_1301_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;onlineUserList&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList();<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;application.setAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">onlineUserList</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;onlineUserList);<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"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onlineUserList.add(</span><span style="color: #0000ff">this</span><span style="color: #000000">.username);<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;</span><span style="color: #008000">//</span><span style="color: #008000">username已经通过构造方法传递给&nbsp;listener，在数据绑定时，可以直接把它放入用户列表。</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/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_1458_1696_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1458_1696_Open_Text.style.display='none'; Codehighlighter1_1458_1696_Closed_Image.style.display='inline'; Codehighlighter1_1458_1696_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1458_1696_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1458_1696_Closed_Text.style.display='none'; Codehighlighter1_1458_1696_Open_Image.style.display='inline'; Codehighlighter1_1458_1696_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">void</span><span style="color: #000000">&nbsp;valueUnbound(HttpSessionBindingEvent&nbsp;event)&nbsp;</span><span id="Codehighlighter1_1458_1696_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_1458_1696_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;HttpSession&nbsp;session&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;event.getSession();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletContext&nbsp;application&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;session.getServletContext();</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;从在线列表中删除用户名&nbsp;&nbsp;</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;List&nbsp;onlineUserList&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(List)&nbsp;application.getAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">onlineUserList</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;onlineUserList.remove(</span><span style="color: #0000ff">this</span><span style="color: #000000">.username);<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_1730_1758_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1730_1758_Open_Text.style.display='none'; Codehighlighter1_1730_1758_Closed_Image.style.display='inline'; Codehighlighter1_1730_1758_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1730_1758_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1730_1758_Closed_Text.style.display='none'; Codehighlighter1_1730_1758_Open_Image.style.display='inline'; Codehighlighter1_1730_1758_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;List&nbsp;getOnlineCount()&nbsp;</span><span id="Codehighlighter1_1730_1758_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_1730_1758_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;onlineUserList;<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/ExpandedBlockEnd.gif" align="top" />}</span></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: #008000">//</span><span style="color: #008000">把用户名放入在线列表<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">//</span><span style="color: #008000">session.setAttribute("onlineUserList",&nbsp;new&nbsp;HttpSessionBindingEventTest(username));</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<br />
<br />
<p>HttpSessionListener:一旦，进入一个网站，这个网站就自动为浏览器分配一个session,调用sessionCreated(),当session过期或销毁时候，调用sessionDestroyed，这时候有两种方法：session.invalidate();和等待session自动过期。</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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">session-config</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">session-timeout</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">1</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">session-timeout</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">session-config</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p>#session过期时间，时间单位是一分钟，并且只能是整数，如果是零或负数，那么会话就永远不会超时。&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;public void sessionCreated(HttpSessionEvent arg0) {}<br />
&nbsp;public void sessionDestroyed(HttpSessionEvent arg0) {}&nbsp;<br />
例：<a href="http://www.blogjava.net/jzone/articles/284193.html">http://www.blogjava.net/jzone/articles/284193.html</a> <br />
<br />
HttpSessionAttributeListener:在向session增加、删除和修改属性时调用<br />
&nbsp;public void attributeAdded(HttpSessionBindingEvent arg0) {}<br />
&nbsp;public void attributeRemoved(HttpSessionBindingEvent arg0) {}<br />
&nbsp;public void attributeReplaced(HttpSessionBindingEvent arg0) {}</p>
<p><br />
HttpSessionActivationListener:分布式环境下Session激活和失活时调用 <br />
&nbsp;public void sessionDidActivate(HttpSessionEvent arg0) {}<br />
&nbsp;public void sessionWillPassivate(HttpSessionEvent arg0) {}</p>
<p><br />
ServletContextListener:在一个application启动和结束时调用&nbsp; <br />
&nbsp;public void contextDestroyed(ServletContextEvent arg0) {}<br />
&nbsp;public void contextInitialized(ServletContextEvent arg0) {}<br />
例：<a href="http://www.cnblogs.com/jackyrong/archive/2006/09/04/494759.html">http://www.cnblogs.com/jackyrong/archive/2006/09/04/494759.html</a> <br />
<a href="http://www.qqgb.com/Program/Java/JavaBlog/Program_145756.html">http://www.qqgb.com/Program/Java/JavaBlog/Program_145756.html</a> <br />
<br />
<br />
ServletContextAttributeListener:在向application增加、删除和修改 Attributes时调用<br />
&nbsp;public void attributeAdded(ServletContextAttributeEvent arg0) {}<br />
&nbsp;public void attributeRemoved(ServletContextAttributeEvent arg0) {}<br />
&nbsp;public void attributeReplaced(ServletContextAttributeEvent arg0) {}</p>
<img src ="http://www.blogjava.net/jzone/aggbug/293508.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-09-01 22:47 <a href="http://www.blogjava.net/jzone/articles/293508.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对 WEB 过滤器的思考</title><link>http://www.blogjava.net/jzone/articles/292730.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Wed, 26 Aug 2009 15:28:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/292730.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/292730.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/292730.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/292730.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/292730.html</trackback:ping><description><![CDATA[<p><strong>过滤器基本概念：</strong><br />
<br />
过滤器能够对目标资源的请求和响应进行截取，在过滤器中对用户请求进行统一处理。<br />
<br />
&nbsp;过滤器是一个程序，它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet或JSP页面上，并且可以检查<br />
<br />
进入这些资源的请求信息。过滤器是双向的，容器接受到一个对资源的请求时，它将判断是否有过滤器与这个资源相关联。如果有，那么容器将<br />
<br />
把请求交给过滤器进行处理。在过滤器中，你可以改变请求的内容，或者重新设置请求的报头信息，然后再将请求发送给目标资源。当目标资源<br />
<br />
对请求作出响应时候，容器同样会将响应先转发给过滤器，再过滤器中，你可以对响应的内容进行转换，然后再将响应发送到客户端<br />
<br />
<br />
<strong>过滤器的构造的全面解析：</strong><br />
<br />
任何一个过滤器，都要实现Filter接口，重写init,doFilter,destory方法。<br />
<br />
<strong>①</strong></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 id="Codehighlighter1_62_63_Open_Image" onclick="this.style.display='none'; Codehighlighter1_62_63_Open_Text.style.display='none'; Codehighlighter1_62_63_Closed_Image.style.display='inline'; Codehighlighter1_62_63_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_62_63_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_62_63_Closed_Text.style.display='none'; Codehighlighter1_62_63_Open_Image.style.display='inline'; Codehighlighter1_62_63_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;init(FilterConfig&nbsp;config)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;ServletException&nbsp;</span><span id="Codehighlighter1_62_63_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_62_63_Open_Text"><span style="color: #000000">{}</span></span></div>
<p>init会在容器初始化时被调用<br />
<br />
init方法只会在该Filter第一次被调用时初始化。对于简单的过滤器，可提供此方法的一个空体，但有两个原因需要使用init。首先，FilterConfig对象提<br />
<br />
供对servlet环境及web.xml文件中指派的过滤器名的访问。因此，普遍的办法是利用init将FilterConfig对象存放在一个字段中，以便doFilter方法能够访<br />
<br />
问servlet环境或过滤器名。其次，FilterConfig对象具有一个getInitParameter方法，它能够访问部署描述符文件（web.xml）中分配的过滤器初始化参<br />
<br />
数。<br />
<br />
</p>
<p>FilterConfig接口：</p>
<p>javax.servlet.FilterConfig接口类似于javax.servlet.ServletConfig接口，用于在过滤器初始化时，向其传递信息。ilterConfig</p>
<p>接口有容器实现，容器将其作为参数传入过滤器对象的init()方法中。在FilterConfig接口，定义了4个方法： </p>
<p>&#183;public java.lang.String getFilterName() </p>
<p>得到描述符中指定的过滤器的名字。<br />
&nbsp;</p>
<p>&#183;public java.lang.String getInitParameter(java.lang.String name)</p>
<p>&nbsp; 返回在部署描述中指定的名字为name的初始化参数的值。如果不存在返回null.<br />
&nbsp;</p>
<p>&#183;public java.util.Enumeration getInitParameterNames()</p>
<p>&nbsp; 返回过滤器的所有初始化参数的名字的枚举集合。<br />
&nbsp;</p>
<p>&#183;public ServletContext getServletContext()</p>
<p>&nbsp; 返回Servlet上下文对象的引用。<br />
<br />
<strong>②</strong><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 id="Codehighlighter1_127_128_Open_Image" onclick="this.style.display='none'; Codehighlighter1_127_128_Open_Text.style.display='none'; Codehighlighter1_127_128_Closed_Image.style.display='inline'; Codehighlighter1_127_128_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_127_128_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_127_128_Closed_Text.style.display='none'; Codehighlighter1_127_128_Open_Image.style.display='inline'; Codehighlighter1_127_128_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;doFilter(ServletRequest&nbsp;request,&nbsp;ServletResponse&nbsp;response,&nbsp;FilterChain&nbsp;chain)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;IOException,&nbsp;ServletException&nbsp;</span><span id="Codehighlighter1_127_128_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_127_128_Open_Text"><span style="color: #000000">{}</span></span></div>
<p>1.ServletRequest对象，此对象给过滤器提供了对进入的信息（包括表单数据、cookie和HTTP请求头）的完全访问，多数情况下，需要将<br />
<br />
ServletRequest对象构造成HttpServletRequest对象。<br />
<br />
2.ServletResponse对象，简单过滤器则忽略该对象。<br />
<br />
3.FilterChain对象，在调用此对象的doFilter方法时，激活下一个相关的过滤器。如果没有另一个过滤器与servlet或JSP页面关联，则servlet或JSP页面被<br />
<br />
激活。<br />
<br />
对于doFilter方法，是每次请求与此过滤器相关的servlet或JSP页面都会调用的方法。除了在两个情形下要使用它以外，通常忽略这个参数。首先，如<br />
<br />
果希望完全阻塞对相关servlet或JSP页面的访问。可调用response.getWriter并直接发送一个响应到客户机。其次，如果希望修改相关的servlet或JSP页<br />
<br />
面的输出，可把响应包含在一个收集所有发送到它的输出的对象中。然后，在调用serlvet或JSP页面后，过滤器可检查输出，如果合适就修改它，<br />
<br />
之后发送到客户机。<br />
<br />
<strong>③</strong></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 id="Codehighlighter1_22_23_Open_Image" onclick="this.style.display='none'; Codehighlighter1_22_23_Open_Text.style.display='none'; Codehighlighter1_22_23_Closed_Image.style.display='inline'; Codehighlighter1_22_23_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_22_23_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_22_23_Closed_Text.style.display='none'; Codehighlighter1_22_23_Open_Image.style.display='inline'; Codehighlighter1_22_23_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;destroy()&nbsp;</span><span id="Codehighlighter1_22_23_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_22_23_Open_Text"><span style="color: #000000">{}</span></span></div>
<p>此方法在利用一个给定的过滤器对象永久地终止服务器（如关闭服务器）时调用。大多数过滤器简单地为此方法提供一个空体，不过，可利用它<br />
<br />
来完成诸如关闭过滤器使用的文件或数据库连接池等清除任务。<br />
<br />
说说FilterChain对象的doFilter方法，Filter接口的doFilter方法以一个FilterChain对象作为它的第三个参数。在调用该对象的doFilter方法时，激活下一个<br />
<br />
相关的过滤器。这个过程一般持续到链中最后一个过滤器为止。在最后一个过滤器调用其FilterChain对象的doFilter方法时，激活servlet或页面自身。<br />
<br />
但是，链中的任意过滤器都可以通过不调用其FilterChain的doFilter方法中断这个过程。在这样的情况下，不再调用JSP页面的serlvet，并且中断此调<br />
<br />
用过程的过滤器负责将输出提供给客户机。<br />
<br />
web.xml中对Filter的标准配置</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">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter</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">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">EncodingUTF8</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</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">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">yixun.wap.filter.SetCharacterEncodingFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-class</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">init-param</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;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">encoding</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</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;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">UTF-8</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</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">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<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">filter</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">filter-mapping</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">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">EncodingUTF8</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</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">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">*.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<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">dispatcher</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">REQUEST</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">dispatcher</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<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">filter-mapping</span><span style="color: #0000ff">&gt;</span></div>
<p><strong><br />
注：</strong>默认情况下，过滤器是按照配置文件中添加的顺序应用于收到的数据。<br />
<br />
激活器servlet<br />
<br />
</p>
<p>要传递参数的时候最好使用form进行传参，如果使用链接的话当中文字符的时候过滤器转码是不会起作用的，还有就是页面上form的method也要设<br />
<br />
置为post，不然过滤器也起不了作用。<br />
<br />
<strong>过滤器的工作方式：</strong><br />
<br />
一：request过滤器<br />
<span style="font-family: 宋体">请求直接从客户端发过来</span><br />
通过在<span lang="EN-US">&lt;dispatcher&gt;</span>元素中指定值<span lang="EN-US">REQUEST</span>，或者不写任何<span lang="EN-US">&lt;dispatcher&gt;</span>元素的方式指定<br />
<br />
二：forward过滤器<br />
<span lang="EN-US">web</span>组件使用<span lang="EN-US">forward()</span>调用匹配<span lang="EN-US">&lt;url-pattern&gt;</span>或<span lang="EN-US">&lt;servlet-name&gt;</span>。<br />
这通过在<span lang="EN-US">&lt;dispatcher&gt;</span>元素中设定值<span lang="EN-US">FORWARD</span>指定<br />
<br />
三：include过滤器<br />
<span lang="EN-US">web</span>组件使用<span lang="EN-US">include()</span>调用匹配<span lang="EN-US">&lt;url-pattern&gt;</span>或<span lang="EN-US">&lt;servlet-name&gt;</span>。<br />
这通过在<span lang="EN-US">&lt;dispatcher&gt;</span>元素中设置值<span lang="EN-US">INCLUDE</span>指定<br />
<br />
四：error过滤器<br />
<span style="font-family: 宋体">请求使用在&#8220;错误处理&#8221;中描述的错误机制进行处理，让错误资源匹配<span lang="EN-US">&lt;url-pattern&gt;</span>。这通过在<span lang="EN-US">&lt;dispatcher&gt;</span>元素中设置值<span lang="EN-US">ERROR</span>指定</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">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">filter</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">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">ErrorPage</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</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">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">yixun.wap.filter.ErrorPageFilter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-class</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">filter</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">filter-mapping</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">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">ErrorPage</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</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">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/error.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</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">dispatcher</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">ERROR</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">dispatcher</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">filter-mapping</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">error-page</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">exception-type</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">NullPointerException</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">exception-type</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">location</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/error.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">location</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">error-page</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" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">error-page</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">error-code</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">500</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">error-code</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">location</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/error.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">location</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">error-page</span><span style="color: #0000ff">&gt;</span></div>
<p>对于上面配置，当出现空指针，或空指针时，就会跳转到error.jsp页面，在访问error.jsp页面前，由于对error.jsp进行了过滤，先执行ErrorPageFilter，然后转向error.jsp<br />
<br />
</span>如果我们实际访问时，如果这个页面中有response.sendError(500,"出错了！")，或者手动抛出空指针时，;那么该错误页面仍然会被调用，过滤器也会工作。<br />
<br />
<strong>过滤器的实践：</strong><br />
<br />
一：统一过滤HTTP请求（响应）头（如：使浏览器不缓存页面的过滤器&nbsp;&nbsp;）<br />
<br />
二、权限控制（对不同角色在系统中跳转进行检查控制）<br />
<br />
三、字符编码的过滤器&nbsp;（对post数据起效）<br />
<br />
四、资源保护过滤器&nbsp;（检测用户是否登陆的过滤器&nbsp;）&nbsp;&nbsp; <br />
<br />
五、阻塞请求<br />
<br />
<br />
参考文献：<a href="http://www.vipcn.com/wangluobiancheng/JSP/servletheJSPguoluqiFilter.html">http://www.vipcn.com/wangluobiancheng/JSP/servletheJSPguoluqiFilter.html</a>&nbsp; </p>
<img src ="http://www.blogjava.net/jzone/aggbug/292730.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-08-26 23:28 <a href="http://www.blogjava.net/jzone/articles/292730.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HttpServletRequest getQueryString();</title><link>http://www.blogjava.net/jzone/articles/292014.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Thu, 20 Aug 2009 14:35:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/292014.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/292014.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/292014.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/292014.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/292014.html</trackback:ping><description><![CDATA[<p>今天出了很大的纰漏，我们站上工行充值渠道疯狂掉单，原因是开发包陈旧，但是没法查到日志，写的日志全是空文件，原因就是我将request.getQueryString()写到文件中当日志，怪我对这个方法理解不透，回来好好反省一下，查了api，写了这个方法：<br />
<br />
api第一句：Returns the query string that is contained in the request URL after the path，这就说明它只对get方法抛的数据有效。post方法传的参数getQueryString将什么都得不到。<br />
<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.UnsupportedEncodingException;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.net.URLEncoder;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Enumeration;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.http.HttpServletRequest;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><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';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><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';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_176_2024_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><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';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><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';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_277_303_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;encode(name,&nbsp;value);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><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';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><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';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_363_410_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;encode(name,&nbsp;value);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><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';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><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';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></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';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><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';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_482_624_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><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';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_665_693_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><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';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><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';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_727_757_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;query.toString();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><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';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><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';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_786_810_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;getQuery();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><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';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><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';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;直接接受request<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;注：request中提供的getQueryString方法只对Get方法才能生效，<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;在我们不知道方法的情况下最好重写getQueryString<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;request<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@return</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&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';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><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';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1018_1809_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><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';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></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';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><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';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1200_1216_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><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';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1407_1759_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><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';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1506_1605_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></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 src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><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';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1681_1754_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;strbuf.toString();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><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';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1853_2022_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&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 src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<img src ="http://www.blogjava.net/jzone/aggbug/292014.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-08-20 22:35 <a href="http://www.blogjava.net/jzone/articles/292014.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>支付接口的开发</title><link>http://www.blogjava.net/jzone/articles/290438.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 09 Aug 2009 06:23:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/290438.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/290438.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/290438.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/290438.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/290438.html</trackback:ping><description><![CDATA[最近在开发充值模块的时候，遇到很多的问题，之前也没接触过，都有摸索着来的。终于结束了，来留下点什么。对照着传智播客视频，做了点讲义。<br />
<br />
<p>支付的两种形式：<br />
1.直接与银行对接。<br />
2.通过中间公司间接与银行对接</p>
<p><br />
第一种形式：<br />
优点：因为直接与银行进行财务结算，交易资金结算比较安全。适合资金流量比较大的企业，这种方案适合于:每月结算金额百万以上的企业。<br />
缺点：开发工作量比较大，而且银行会不定期升级交易系统，随着银行系统的升级，企业也需要做相应改动，所以维护量也是比较大，而且企业每年还需要向银行交纳一定数量的接口使用费。</p>
<p>第二种形式：<br />
优点：开发量少，因为使用的是中间企业提供的接入规范，所以银行升级系统，不需要企业作相应修改，除非中间企业接入规范发生了改变，企业才作相应修改，相对前一种方案，这种方案维护工作量比较少，因为只与一家企业对接，所以接入费用相对比较低。这种方案适合于：每月结算金额在几十万以下的中小企业。<br />
缺点：因为是与中间企业进行资金结算，目前所有中间企业都是私企，资金安全是个大问题。</p>
<p>目前国内比较好的中间支付公司<br />
1.守信易支付 www.beijing.com.cn<br />
每年需要交纳一定的接口使用费，并且从交易金额中扣除1%的手续费，像当当网，红孩子，东京商城使用了守信易支付<br />
2.易宝支付 www.yeepay.com<br />
接入免费，只从交易额中扣除1%的手续费，像盛大，e龙网，巴巴运动网使用了易宝支付。</p>
<p>其中我们这个项目中，除了手机卡充值是易宝支付，其他都是直接跟银行对接的。<br />
</p>
<p>通过目前项目的开发，也算是能说对支付接口开发有一定见解了，毕竟在这次开发中，总共开发了7种渠道：银联，工行，建行，招行，支付宝，财付通，易宝。从微观来说，每中渠道支付都是不一样的，但是从宏观上来说，又都拥有相同之处：按照双方约定（报文文档是其依据，非常重要），向对方抛数据，对方通过后，接收对方返回的信息，确定成功与否。&nbsp;</p>
<img src ="http://www.blogjava.net/jzone/aggbug/290438.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-08-09 14:23 <a href="http://www.blogjava.net/jzone/articles/290438.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于 web.xml 全面解析</title><link>http://www.blogjava.net/jzone/articles/288647.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Mon, 27 Jul 2009 14:33:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/288647.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/288647.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/288647.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/288647.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/288647.html</trackback:ping><description><![CDATA[<a href="http://blog.csdn.net/SDMRauquin/archive/2008/12/23/3590844.aspx">http://blog.csdn.net/SDMRauquin/archive/2008/12/23/3590844.aspx</a> <br />
<br />
<a href="http://www.hackhome.com/InfoView/Article_120872.html">http://www.hackhome.com/InfoView/Article_120872.html</a> <br />
<br />
今天心血来潮，想系统复习一下web.xml，随即在网上查查，摘了下文：<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">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</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">web-app&nbsp;</span><span style="color: #ff0000">version</span><span style="color: #0000ff">="2.4"</span><span style="color: #ff0000">&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;xmlns</span><span style="color: #0000ff">="http://java.sun.com/xml/ns/j2ee"</span><span style="color: #ff0000">&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</span><span style="color: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000">&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000ff">="http://java.sun.com/xml/ns/j2ee&nbsp;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"</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">welcome-file-list</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">welcome-file</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">index.jsp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">welcome-file</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">welcome-file-list</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;<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">context-param</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">description</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">description</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">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">context</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</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">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">try</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</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">context-param</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;<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">description</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">description</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;<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">display-name</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">display-name</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;<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">filter</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">filter-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">fileter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-name</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">filter-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">com.yixun.wap.tools</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">filter-class</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">filter</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">filter-mapping</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">filter-name</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">filter-name</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">url-pattern</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">url-pattern</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">dispatcher</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">dispatcher</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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">filter-mapping</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;<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">listener</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">description</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">description</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">display-name</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">display-name</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">icon</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">icon</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">listener-class</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">listener-class</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">listener</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;<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">servlet</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">servlet-name</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">servlet-name</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">servlet-class</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">servlet-class</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">servlet</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">servlet-mapping</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">servlet-name</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">servlet-name</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">url-pattern</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">url-pattern</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">servlet-mapping</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;<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">session-config</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">session-timeout</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">session-timeout</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">session-config</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">web-app</span><span style="color: #0000ff">&gt;</span></div>
<br />
<p>　　在每一个Web应用程序路径的Web-INF下和conf下存在一个Web.xml配置文件，</p>
<p>　　用来设定Web应用程序的配置。在Web.xml中的设定非常多，</p>
<p>　　接下来分段来说明它的各项设定：<br />
<br />
　　下列部分描述根元素 &lt;Web-APP&gt;下的 Web.xml Schema 中定义的部署描述符元素。 </p>
<p>　　context-param </p>
<p>　　description </p>
<p>　　display-name </p>
<p>　　distributable </p>
<p>　　ejb-ref </p>
<p>　　ejb-local-ref </p>
<p>　　env-entry </p>
<p>　　error-page </p>
<p>　　filter </p>
<p>　　filter-mapping </p>
<p>　　icon </p>
<p>　　listener </p>
<p>　　login-config </p>
<p>　　mime-mapping </p>
<p>　　resource-env-ref </p>
<p>　　resource-ref </p>
<p>　　security-constraint </p>
<p>　　security-role </p>
<p>　　Servlet </p>
<p>　　servlet-mapping </p>
<p>　　session-config </p>
<p>　　taglib </p>
<p>　　Web-app </p>
<p>　　welcome-file-list </p>
<p>　　--------------------------------------------------------------------------------</p>
<p>　　icon </p>
<p>　　icon 元素指定用于在 GUI 工具中表示 Web 应用程序的大小图像在 Web 应用程序中的位置。（servlet 元素中也有一个名为 icon 的元素，用于提供在 GUI 工具中表示 servlet 的图标。） </p>
<p>　　下表描述可以在 icon 元素中定义的元素。</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　可选 用于在 GUI 工具中表示 Web 应用程序的 .gif 或 .jpg 小图像（16x16 像素）的位置。当前 WebLogic Server 尚不使用此元素。 </p>
<p>　　可选 用于在 GUI 工具中表示 Web 应用程序的 .gif 或 .jpg 大图像（32x32 像素）的位置。当前 WebLogic Server 尚不使用此元素。 </p>
<p>　　--------------------------------------------------------------------------------</p>
<p>　　display-name </p>
<p>　　可选的 display-name 元素指定 Web 应用程序的显示名称（可以由 GUI 工具显示的简短名称）。 </p>
<p>　　元素 必需/可选 描述 </p>
<p>　　可选 当前 WebLogic Server 尚不使用此元素。 </p>
<p>　　--------------------------------------------------------------------------------</p>
<p>　　description </p>
<p>　　可选的 description 元素提供关于 Web 应用程序的描述性文本。 </p>
<p>　　元素 必需/可选 描述 </p>
<p>　　可选 当前 WebLogic Server 尚不使用此元素。 </p>
<p>　　--------------------------------------------------------------------------------</p>
<p>　　distributable </p>
<p>　　WebLogic Server 不使用 distributable 元素。</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　可选 当前 WebLogic Server 尚不使用此元素。 </p>
<p>　　--------------------------------------------------------------------------------</p>
<p>　　context-param </p>
<p>　　可选的 context-param 元素中包含 Web 应用程序的 Servlet 上下文初始化参数的声明。下表描述 Web 应用程序容器所使用的保留上下文参数，在 Weblogic.xml 中已不赞成使用这些参数，而提供了替换参数。</p>
<p>　　不赞成使用的参数 描述 Weblogic.xml 中的替换元素 </p>
<p>　　Weblogic.httpd.inputCharset 定义非 unicode 操作的代码集行为。 Weblogic.xml 中的 input-charset（在 charset-param 内定义）。请参阅 input-charset。 </p>
<p>　　Weblogic.httpd.servlet.reloadCheckSecs 定义 WebLogic Server 检查 servlet 是否发生修改的频率，如果已修改，则重新加载。值为 -1 则永不重新加载，值为 0 则始终重新加载。默认设置为 1 秒。 Weblogic.xml 中的 servlet-reload-check-secs（在 container-descriptor 中定义）。请参阅 container-descriptor。 </p>
<p>　　Weblogic.httpd.servlet.classpath 设置此值后，容器会将此路径追加到 Web 应用程序类路径上。不建议采用此方法，对于此方法的支持仅为向后兼容。 无替换。使用其他方法，例如清单类路径或 Web-INF/lib 或 Web-INF/classes 或虚拟目录。 </p>
<p>　　Weblogic.httpd.defaultServlet 设置 Web 应用程序的默认 servlet。不建议采用此方法，</p>
<p>　　对于此方法的支持仅为向后兼容。 无替换。而是使用 Web.xml 中的 servlet 和 servlet-mapping 元素定义默认 servlet。默认 servlet 的 URL 模式应该是&#8220;/&#8221;。请参阅 servlet-mapping。有关 servlet 映射的其他示例，请参阅 Servlet 映射。 </p>
<p>　　以下 context-param 参数仍有效。 </p>
<p>　　元素 必需/可选 描述 </p>
<p>　　Weblogic.httpd.</p>
<p>　　clientCertProxy optional 此特性指定 Web 应用程序客户端的证书由代理插件或 HttpClusterServlet所发送的特殊 WL-Proxy-Client-Cert 头提供。 </p>
<p>　　如果在代理服务器上执行用户身份验证，则此设置适用 &#8211; 设置 clientCertProxy 会使代理服务器在特殊的头 WL-Proxy-Client-Cert中将证书传递给群集。 </p>
<p>　　WL-Proxy-Client-Cert 头可以由能够访问 WebLogic Server 的任意客户端提供。WebLogic Server 从该头中获取证书信息，信任它来自安全来源（该插件）并使用该信息来对用户进行身份验证。 </p>
<p>　　出于此原因，如果您设置 clientCertProxy，请使用连接筛选器确保 WebLogic Server 仅接受来自正在运行该插件的计算机的连接。 </p>
<p>　　除为单个 Web 应用程序设置此特性外，您还可以定义此特性： </p>
<p>　　在管理控制台中的&#8220;服务器&#8221;--&gt;&#8220;配置&#8221;--&gt;&#8220;常规&#8221;页面上，为服务器示例承载的所有 Web 应用程序设置该特性 </p>
<p>　　在&#8220;群集&#8221;--&gt;&#8220;配置&#8221;--&gt;&#8220;常规&#8221;页面上，为群集中服务器实例所承载的所有 Web 应用程序设置该特性 </p>
<p>　　--------------------------------------------------------------------------------</p>
<p>　　filter </p>
<p>　　filter 元素定义筛选器类及其初始化特性。有关筛选器的详细信息，请参阅配置筛选器。 </p>
<p>　　下表描述可在 filter 元素中定义的元素。</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　可选 指定用于在 GUI 工具中表示筛选器的大小图像在 Web 应用程序中的位置。包含小图标和大图标元素。 </p>
<p>　　当前 WebLogic Server 尚不使用此元素。 </p>
<p>　　必需 定义筛选器的名称，用于在部署描述符中的其他位置上引用筛选器定义。 </p>
<p>　　可选 希望由 GUI 工具显示的简短名称。 </p>
<p>　　可选 筛选器的文字描述。 </p>
<p>　　必需 筛选器的完全限定类名。 </p>
<p>　　可选 包含名/值对并用作筛选器的初始化特性。 </p>
<p>　　每个特性使用独立的一组 标记。 </p>
<p>　　--------------------------------------------------------------------------------</p>
<p>　　filter-mapping </p>
<p>　　下表描述可在 filter-mapping元素中定义的元素。</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　必需 要将 URL 模式或 servlet 映射至的筛选器的名称。该名称对应于使用 元素在 元素中分配的名称。 </p>
<p>　　必需 - 或由 映射 描述用于解析 URL 的模式。将 http://host:port+ ContextPath 之后的 URL 部分与 WebLogic Server 的 进行比较。如果模式匹配，则将调用该元素中映射的筛选器。 </p>
<p>　　示例模式： </p>
<p>　　/soda/grape/*</p>
<p>　　/foo/* </p>
<p>　　/contents</p>
<p>　　*.foo </p>
<p>　　URL 必须遵循 Servlet 2.3 规范中指定的规则。 </p>
<p>　　必需 - 或由 映射 Servlet 的名称，如果调用它，则会执行该筛选器。 </p>
<p>　　--------------------------------------------------------------------------------</p>
<p>　　listener </p>
<p>　　使用 listener 元素定义应用程序监听器。</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　可选 响应 Web 应用程序事件的类的名称。 </p>
<p>　　有关详细信息，请参阅配置事件监听器类。 </p>
<p>　　--------------------------------------------------------------------------------</p>
<p>　　servlet </p>
<p>　　servlet 元素中包含 servlet 的声明性数据。 </p>
<p>　　如果指定了 jsp-file 且存在 元素，则将在 WebLogic Server 启动时预编译和加载该 JSP。 </p>
<p>　　下表描述可在 servlet 元素中定义的元素。</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　可选 用于在 GUI 工具中表示 servlet 的大小图像在 Web 应用程序中的位置。包含小图标和大图标元素。 </p>
<p>　　当前 WebLogic Server 尚不使用此元素。 </p>
<p>　　必需 定义 servlet 的规范名称，用于在部署描述符中的其他位置上引用 servlet 定义。 </p>
<p>　　可选 希望由 GUI 工具显示的简短名称。 </p>
<p>　　可选 servlet 的文字描述。 </p>
<p>　　必需（或使用 </p>
<p>　　file&gt;） servlet 的完全限定类名。 </p>
<p>　　在 servlet 正文中仅使用 标记或 标记中的任意一种。 </p>
<p>　　必需（或使用 </p>
<p>　　class&gt;） Web 应用程序中的 JSP 文件相对于 Web 应用程序根目录的完整路径。 </p>
<p>　　在 servlet 正文中仅使用 标记或 标记中的任意一种。 </p>
<p>　　可选 包含名/值对并用作 servlet 的初始化特性。 </p>
<p>　　每个特性使用独立的一组 标记。 </p>
<p>　　可选 当 WebLogic Server 启动时，WebLogic Server 将初始化此 servlet。此元素内容可选，但必须是正整数，它指明 servlet 的加载顺序。指定了低整数的 servlet 将于高整数 servlet 之前加载。如果没有指定任何值，或如果所指定的值不是正整数，则在应用程序启动期间，WebLogic Server 可以以任意顺序加载 servlet。 </p>
<p>　　可选 指定将用于 Web 应用程序执行的 run-as 标识。该元素包含可选描述和安全角色的名称。 </p>
<p>　　 </p>
<p>ref&gt;　　ref&gt; 可选 用于将 所定义的安全角色名链接到使用 Servlet 逻辑进行硬编码的备用角色名。使用此附加提取层，可以在部署时配置 Servlet，且不必更改 Servlet 代码。 </p>
<p>　　icon </p>
<p>　　这是 Servlet 内的元素。 </p>
<p>　　icon 元素指定用于在 GUI 工具中表示 servlet 的大小图像在 Web 应用程序中的位置。 </p>
<p>　　下表描述可以在 icon 元素中定义的元素。</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　可选 指定用于在 GUI 工具中表示 servlet 的 .gif 或 .jpg 小图像（16x16 像素）在 Web 应用程序内的位置。 </p>
<p>　　当前 WebLogic Server 尚不使用此元素。 </p>
<p>　　可选 指定用于在 GUI 工具中表示 servlet 的 .gif 或 .jpg 小图像（32x32 像素）在 Web 应用程序内的位置。 </p>
<p>　　当前 WebLogic Server 尚不使用此元素。 </p>
<p>　　init-param </p>
<p>　　这是 Servlet 内的元素。 </p>
<p>　　可选的 init-param元素中包含用作 servlet 的初始化特性的名/值对。每个特性使用独立的一组 init-param 标记。 </p>
<p>　　您可以使用 javax.servlet.ServletConfig.getInitParameter() 方法访问这些特性。 </p>
<p>　　下表描述可在 init-param元素中定义的元素。</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　必需 定义此特性的名称。 </p>
<p>　　必需 为此特性定义一个 String 值。 </p>
<p>　　可选 初始化特性的文字描述。 </p>
<p>　　security-role-ref </p>
<p>　　这是 Servlet 内的元素。 </p>
<p>　　security-role-ref 元素将 定义的安全角色名链接到使用 Servlet 逻辑进行硬编码的备用角色名。使用此附加提取层，可以在部署时配置 Servlet，且不必更改 Servlet 代码。 </p>
<p>　　下表描述可在 security-role-ref元素中定义的元素。</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　可选 角色的文字描述。 </p>
<p>　　必需 定义在 Servlet 代码中使用的安全角色或委托人的名称。 </p>
<p>　　必需 定义稍后将在部署描述符中的 元素中定义的安全角色的名称。 </p>
<p>　　--------------------------------------------------------------------------------</p>
<p>　　servlet-mapping </p>
<p>　　servlet-mapping 元素定义 servlet 和 URL 模式之间的映射。 </p>
<p>　　下表描述可在 servlet-mapping元素中定义的元素。</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　必需 要将 URL 模式映射至的 servlet 的名称。该名称对应于您在 声明标记中为 servlet 分配的名称。 </p>
<p>　　必需 描述用于解析 URL 的模式。将 http://host:port+ WebAppName 之后的 URL 部分与 WebLogic Server 的 进行比较。如果模式匹配，则将调用该元素中映射的 servlet。 </p>
<p>　　示例模式： </p>
<p>　　/soda/grape/*</p>
<p>　　/foo/* </p>
<p>　　/contents</p>
<p>　　*.foo </p>
<p>　　URL 必须遵循 Servlet 2.3 规范中指定的规则。 </p>
<p>　　有关 Servlet 映射的其他示例，请参阅 Servlet 映射。 </p>
<p>　　--------------------------------------------------------------------------------</p>
<p>　　session-config </p>
<p>　　session-config 元素为此 Web 应用程序定义会话特性。 </p>
<p>　　下表描述可在 session-config 元素中定义的元素。</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　可选 会话过期分钟数，该 Web 应用程序中的会话将在此时间后过期。除非输入此处列出的某个特殊值，否则此元素中设置的值将替代 WebLogic 特定部署描述符 Weblogic.xml 中的 元素的 TimeoutSecs 特性中设置的值。 </p>
<p>　　默认值：-2 </p>
<p>　　最大值：Integer.MAX_VALUE ? </p>
<p>　　特殊值： </p>
<p>　　-2 表示使用 Weblogic.xml的 元素中的 TimeoutSecs 设置的值。 </p>
<p>　　-1 表示会话永不超时。将忽略 Weblogic.xml 的 元素中设置的值。 </p>
<p>　　有关详细信息，请参阅 session-descriptor。 </p>
<p>　　--------------------------------------------------------------------------------</p>
<p>　　mime-mapping </p>
<p>　　mime-mapping 元素定义扩展名和 mime 类型之间的映射。 </p>
<p>　　下表描述可在 mime-mapping元素中定义的元素。</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　必需 描述扩展名的字符串，例如：txt。 </p>
<p>　　必需 描述定义的 mime 类型的字符串，例如：text/plain。 </p>
<p>　　--------------------------------------------------------------------------------</p>
<p>　　welcome-file-list </p>
<p>　　可选的 welcome-file-list 元素中包含 welcome-file 元素的有序列表。 </p>
<p>　　当 URL 请求是一个目录名时，WebLogic Server 将提供此元素中指定的第一个文件。如果找不到该文件，则服务器会尝试列表中的下一个文件。 </p>
<p>　　有关详细信息，请参阅配置欢迎文件。 </p>
<p>　　下表描述可在 welcome-file-list 元素中定义的元素。</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　可选 用作默认欢迎文件的文件名，例如 index.html </p>
<p>　　--------------------------------------------------------------------------------</p>
<p>　　error-page </p>
<p>　　可选的 error-page 元素指定错误代码或异常类型与 Web 应用程序中资源路径之间的映射。 </p>
<p>　　WebLogic Server 响应 HTTP 请求的过程中发生错误或由于 Java 异常而发生错误时，WebLogic Server 会返回一个 HTML 页面，其中显示 HTTP 错误代码或包含 Java 错误信息的页面。可以定义显示自己的 HTML 页面，而不显示这些默认错误页面，或响应 Java 异常。 </p>
<p>　　有关详细信息，请参阅自定义 HTTP 错误响应。 </p>
<p>　　下表描述可以在 error-page 元素中定义的元素。 </p>
<p>　　注意： 定义 或 ，但两者不能同时定义。 </p>
<p>　　元素 必需/可选 描述 </p>
<p>　　可选 有效的 HTTP 错误代码，例如 404。 </p>
<p>　　可选 Java 异常类型的完全限定类名，例如 java.lang.string </p>
<p>　　必需 为响应错误而显示的资源的位置。例如，/myErrorPg.html。 </p>
<p>　　--------------------------------------------------------------------------------</p>
<p>　　taglib </p>
<p>　　可选的 taglib 元素描述 JSP 标记库。 </p>
<p>　　该元素将 JSP 标记库描述符（Tag Library Descriptor，简称 TLD）与 URI 模式关联起来。尽管您可以在相对于 Web-INF 目录的 JSP 中指定 TLD，但部署您的 Web 应用程序时，您仍可以使用 标记配置 TLD。每个 TLD 使用独立的元素。 </p>
<p>　　下表描述可在 taglib元素中定义的元素。</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　必需 给出相对于 Web 应用程序根目录的标记库描述符的文件名。将标记库描述符文件存储在 Web-INF 目录下是一个好主意，这样可以避免通过 HTTP 请求公开提供该文件。 </p>
<p>　　必需 描述相对于 Web.xml 文档位置的 URI，标识 Web 应用程序中使用的标记库。 </p>
<p>　　如果该 URI 匹配 JSP 页面上 taglib 指令中使用的 URI 字符串，则使用此 taglib。 </p>
<p>　　--------------------------------------------------------------------------------</p>
<p>　　resource-env-ref </p>
<p>　　resource-env-ref 元素包含 Web 应用程序对 Web 应用程序环境中的资源所关联的受管理对象的引用的声明。它包括可选的描述、资源环境引用名，还指明了 Web 应用程序代码所预期的资源环境引用类型。 </p>
<p>　　例如： </p>
<p>　　jms/StockQueue javax.jms.Queue下表描述可在 resource-env-ref 元素中定义的元素。</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　可选 提供资源环境引用的描述。 </p>
<p>　　必需 指定资源环境引用的名称；其值为 Web 应用程序代码中使用的环境条目名称。名称是相对于 java:comp/env 上下文的 JNDI 名称，该名称在 Web 应用程序中必须唯一。 </p>
<p>　　必需 指定资源环境引用的类型。它是 Java 语言类或接口的完全限定名称。 </p>
<p>　　--------------------------------------------------------------------------------</p>
<p>　　resource-ref </p>
<p>　　可选的 resource-ref 元素定义外部资源的引用查找名。这使得 servlet 代码能够通过&#8220;虚拟&#8221;名称查找资源，该虚拟名称将映射至部署时的实际位置。 </p>
<p>　　使用独立的 元素定义每个外部资源名称。在 WebLogic 特定部署描述符 Weblogic.xml 中，外部资源名称映射至部署时的资源实际位置名称。 </p>
<p>　　下表描述可在 resource-ref元素中定义的元素。</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　可选 文字描述。 </p>
<p>　　必需 JNDI 树中使用的资源的名称。Web 应用程序中的 Servlet 使用此名称查找资源引用。 </p>
<p>　　必需 与引用名称相对应的资源的 Java 类型。使用 Java 类型的完整包名。 </p>
<p>　　必需 用于控制资源安全登录。 </p>
<p>　　如果设置为 APPLICATION，则表明应用程序组件代码将以编程方式执行资源登录。如果设置为 CONTAINER，则 WebLogic Server 将使用随 login-config 元素建立的安全上下文。请参阅 login-config。 </p>
<p>　　可选 指定是否可以共享通过给定资源管理器连接工厂引用获取的连接。 </p>
<p>　　有效值： </p>
<p>　　Shareable（可共享） </p>
<p>　　Unshareable（不可共享） </p>
<p>　　--------------------------------------------------------------------------------</p>
<p>　　security-constraint </p>
<p>　　security-constraint 元素定义对 &lt;Web-RESOURCE-COLLECTION&gt;元素所定义的资源集合的访问权限。 </p>
<p>　　有关在 Web 应用程序中配置安全的详细说明和示例，请参阅&#8220;确保 WebLogic 资源安全&#8221;。另外，有关 WebLogic 安全的详细信息，请参阅WebLogic 安全性编程。 </p>
<p>　　下表描述可在 security-constraint 元素中定义的元素。</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　&lt;Web-RESOURCE-&lt; p&gt; </p>
<p>collection&gt;　　collection&gt; 必需 定义应用此安全约束的 Web 应用程序的组件。 </p>
<p>　　可选 定义哪些组或委托人可以访问此安全约束内定义的 Web 资源集合。另请参阅 auth-constraint。 </p>
<p>　　 </p>
<p>constraint&gt;　　constraint&gt; 可选 定义客户端如何与服务器进行通信。 </p>
<p>　　另请参阅 user-data-constraint </p>
<p>　　Web-resource-collection </p>
<p>　　每个 元素必须具有一个或多个 &lt;Web-RESOURCE-COLLECTION&gt;元素。它们定义应用此安全约束的 Web 应用程序的区域。 </p>
<p>　　这是 security-constraint 内的元素。 </p>
<p>　　下表描述可在 Web-resource-collection 元素中定义的元素。</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　&lt;Web-RESOURCE-&lt; p&gt; </p>
<p>name&gt;　　name&gt; 必需 此 Web 资源集合的名称。 </p>
<p>　　可选 此安全约束的文字描述。 </p>
<p>　　可选 使用一个或多个 元素声明此安全约束将应用至的 URL 模式。如果您不使用其中至少一个元素，则 WebLogic Server 将忽略 &lt;Web-RESOURCE-COLLECTION&gt;。 </p>
<p>　　可选 使用一个或多个 元素声明受身份验证约束的 HTTP 方法（通常是 GET 或 POST）。如果忽略 元素，则默认行为是向所有 HTTP 方法应用安全约束。 </p>
<p>　　auth-constraint </p>
<p>　　这是 security-constraint 内的元素。 </p>
<p>　　可选的 auth-constraint 元素定义哪些组或委托人有权访问在此安全约束中定义的 Web 资源集合。 </p>
<p>　　下表描述可以在 auth-constraint 元素中定义的元素。</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　可选 此安全约束的文字描述。 </p>
<p>　　可选 定义哪些安全角色可以访问在此安全约束中定义的资源。安全角色名映射至使用 security-role-ref 的委托人。请参阅 security-role-ref。 </p>
<p>　　user-data-constraint </p>
<p>　　这是 security-constraint 内的元素。 </p>
<p>　　user-data-constraint元素定义客户端如何与服务器进行通信。 </p>
<p>　　下表描述可在 user-data-constraint元素中定义的元素。</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　可选 文字描述。 </p>
<p>　　 </p>
<p>guarantee&gt;　　guarantee&gt; 必需 指定客户端和服务器之间的通信。 </p>
<p>　　当使用 INTEGRAL 或 CONFIDENTIAL 传输保证对用户进行身份验证时，WebLogic Server 会建立安全套接口层 (SSL) 连接。 </p>
<p>　　值范围： </p>
<p>　　NONE- 应用程序不需要任何传输保证。 </p>
<p>　　INTEGRAL- 应用程序要求数据在客户端和服务器之间传输的过程中不会被更改。 </p>
<p>　　CONFIDENTIAL- 应用程序要求传输数据以防止其他实体观察到传输的内容。 </p>
<p>　　--------------------------------------------------------------------------------</p>
<p>　　login-config </p>
<p>　　使用可选的 login-config 元素配置如何对用户进行身份验证；应用于此应用程序的领域名称；表单登录机制所需要的特性。 </p>
<p>　　如果使用此元素，则用户必须经过身份验证才能访问受 Web 应用程序中所定义的 约束的所有资源。一旦通过身份验证，则可以授权用户访问具有访问权限的其他资源。 </p>
<p>　　下表描述可在 login-config元素中定义的元素。</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　可选 指定用于对用户进行身份验证的方法。可能的值： </p>
<p>　　BASIC - 使用浏览器身份验证。（这是默认值。）</p>
<p>　　FORM - 使用用户编写的 HTML 表单。</p>
<p>　　CLIENT-CERT </p>
<p>　　注意： 您可以通过逗号分隔列表定义多个身份验证方法，以便提供应变机制。将按照在 auth-method 列表中定义值的顺序尝试进行身份验证。请参阅&#8220;WebLogic 安全性编程&#8221;中的为身份验证方法提供应变机制。 </p>
<p>　　可选 对用户凭据进行身份验证时所引用的领域名称。如果忽略，则默认使用管理控制台中的&#8220;Web 应用程序&#8221;&#8220;配置&#8221;&#8220;其他&#8221;选项卡上的&#8220;身份验证领域名&#8221;字段中定义的领域。 </p>
<p>　　注意： 元素不引用 WebLogic Server 内的系统安全领域。该元素定义 HTTP 基本身份验证中使用的领域名称。系统安全领域是在服务器上执行特定操作时将检查的安全信息的集合。servlet 安全领域是访问页面和使用基本身份验证时要检查的另外一组安全信息的集合。 </p>
<p>　　 </p>
<p>config&gt;　　config&gt; 可选 如果您在 FORM 中配置 ，请使用此元素。请参阅 form-login-config。 </p>
<p>　　form-login-config </p>
<p>　　这是 login-config 内的元素。 </p>
<p>　　如果您在 FORM 中配置 ，请使用 元素。 </p>
<p>　　.</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　必需 相对于文档根目录的 Web 资源 URI，用于对用户进行身份验证。这可以是 HTML 页面、JSP 或 HTTP servlet，且必须返回一个包含符合特定命名约定的、基于 FORM 的身份验证的 HTML 页面。 </p>
<p>　　必需 相对于文档根目录的 Web 资源 URI，会将它发送给用户以响应失败的身份验证登录。 </p>
<p>　　--------------------------------------------------------------------------------</p>
<p>　　security-role </p>
<p>　　下表描述可在 security-role元素中定义的元素。</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　可选 此安全角色的文字描述。 </p>
<p>　　必需 角色名。此处使用的名称在 WebLogic 特定的部署描述符 Weblogic.xml 中必须有对应的条目，该部署描述符将角色映射到安全领域中的委托人。有关详细信息，请参阅 security-role-assignment。 </p>
<p>　　--------------------------------------------------------------------------------</p>
<p>　　env-entry </p>
<p>　　可选的 env-entry 元素声明用于应用程序的环境条目。每个环境条目使用独立的元素。 </p>
<p>　　下表描述可以在 env-entry 元素中定义的元素。</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　可选 文字描述。 </p>
<p>　　必需 环境条目的名称。 </p>
<p>　　必需 环境条目的值。 </p>
<p>　　必需 环境条目的类型。 </p>
<p>　　可以设置为下列 Java 类型之一： </p>
<p>　　java.lang.Boolean </p>
<p>　　java.lang.String </p>
<p>　　java.lang.Integer </p>
<p>　　java.lang.Double </p>
<p>　　java.lang.Float </p>
<p>　　--------------------------------------------------------------------------------</p>
<p>　　ejb-ref </p>
<p>　　可选的 ejb-ref 元素定义对 EJB 资源的引用。通过在 WebLogic 特定的部署描述符文件 Weblogic.xml 中定义映射，将该引用映射至部署时的 EJB 实际位置。使用独立的 元素定义每个引用 EJB 名称。 </p>
<p>　　下表描述可以在 ejb-ref 元素中定义的元素。</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　可选 引用的文字描述。 </p>
<p>　　必需 Web 应用程序中使用的 EJB 的名称。在 WebLogic 特定的部署描述符 Weblogic.xml 中，该名称映射至 JNDI 树。有关详细信息，请参阅 ejb-reference-description。 </p>
<p>　　必需 所引用的 EJB 的预期 Java 类类型。 </p>
<p>　　必需 EJB Home 接口的完全限定类名。 </p>
<p>　　必需 EJB 远程接口的完全限定类名。 </p>
<p>　　可选 在包含的 J2EE 应用程序包中的 EJB 的 。 </p>
<p>　　可选 安全角色，其安全上下文将应用于所引用的 EJB。必须是使用 元素定义的安全角色。 </p>
<p>　　--------------------------------------------------------------------------------</p>
<p>　　ejb-local-ref </p>
<p>　　ejb-local-ref 元素用于声明对企业 Bean 本地主目录的引用。声明包括： </p>
<p>　　可选的描述 </p>
<p>　　用于在 Web 应用程序代码中引用企业 Bean 的 EJB 引用名称。所引用的企业 Bean 的预期类型 </p>
<p>　　所引用的企业 Bean 的预期本地主目录和本地接口 </p>
<p>　　可选的 ejb-link 信息，用于指定所引用的企业 Bean </p>
<p>　　下表描述可以在 ejb-local-ref 元素中定义的元素。</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　可选 引用的文字描述。 </p>
<p>　　必需 包含 EJB 引用的名称。EJB 引用是 Web 应用程序环境中的一个条目，它相对于 java:comp/env 上下文。该名称在 Web 应用程序中必须唯一。建议该名称使用前缀 ejb/。 </p>
<p>　　例如： </p>
<p>　　ejb/Payroll </p>
<p>　　必需 ejb-ref-type 元素包含所引用企业 Bean 的预期类型。ejb-ref-type 元素必须是以下某项： </p>
<p>　　EntitySession </p>
<p>　　必需 包含企业 Bean 的本地 Home 接口的完全限定名称。 </p>
<p>　　必需 包含企业 Bean 的本地接口的完全限定名称。 </p>
<p>　　可选 ejb-link 元素用于 ejb-ref 或 ejb-local-ref 元素中以指定 EJB 上链接一个 EJB 引用。 </p>
<p>　　ejb-link 元素中的名称包括一个路径名。该路径名指定包含所引用 EJB 的 ejb-jar，且追加了目标 Bean 的 ejb-name 并通过 # 与路径名隔开。 </p>
<p>　　该路径名相对于包含引用 EJB 的 Web 应用程序的 WAR 文件。因此能够唯一标识具有相同 ejb-name 的多个 EJB。 </p>
<p>　　用于：ejb-local-ref 和 ejb-ref 元素。 </p>
<p>　　示例： </p>
<p>　　EmployeeRecord </p>
<p>　　../products/product.jar#ProductEJB </p>
<p>　　--------------------------------------------------------------------------------</p>
<p>　　Web-app </p>
<p>　　Servlet 2.4 部署描述符的 XML Schema。WebLogic Server 完全支持 HTTP Servlet，如 Sun Microsystems 的 Servlet 2.4 specification 所定义。但是，version 特性必须设置为 2.4，才能执行 2.4 行为。 </p>
<p>　　下表描述可以在 Web-app 元素中定义的元素。</p>
<p>　　元素 必需/可选 描述 </p>
<p>　　必需 所有 Servlet 部署描述符必须指明 2.4 版本的 Schema，以便执行 Servlet 2.4 行为。<br />
</p>
<img src ="http://www.blogjava.net/jzone/aggbug/288647.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-07-27 22:33 <a href="http://www.blogjava.net/jzone/articles/288647.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>servlet-api基本类和接口介绍</title><link>http://www.blogjava.net/jzone/articles/286332.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Fri, 10 Jul 2009 15:19:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/286332.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/286332.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/286332.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/286332.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/286332.html</trackback:ping><description><![CDATA[<p>基本类和接口</p>
<p><strong style="font-size: 14pt; font-family: Comic Sans MS">一、javax.servlet.Servlet接口</strong></p>
<p>servlet抽象集是javax.servlet.Servlet接口，它规定了必须由Servlet类实现由servlet引擎识别和管理的方法集。<br />
Servlet接口的基本目标是提供生命期方法init()、service()和destroy()方法。</p>
<p>&nbsp;<br />
servlet接口中的方法&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void init(ServletConfit config)throws ServletException&nbsp;&nbsp;&nbsp; 在 servlet被载入后和实施服务前由servlet引擎进行?次性调用。如果init()产生溢出UnavailableException，则 servle退出服务。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
ServletConfig getServletConfig()&nbsp;&nbsp;&nbsp; 返回传递到servlet的init()方法的ServletConfig对象&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void service(ServletRequest request, ServletResponse response)throws ServletException,IOException&nbsp;&nbsp;&nbsp; 处理request对象中描述的请求，使用response对象返回请求结果&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getServletInfo()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 返回描述servlet的一个字符串&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void destory()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当servlet将要卸载时由servlet引擎调用&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><strong style="font-size: 14pt; font-family: Comic Sans MS">二、javax.servlet.GenericServlet类（协议无关版本）</strong></p>
<p>GenericServlet是一种与协议无关的servlet，是一种跟本不对请求提供服务的servlet，而是简单地从init()方法启动后台线程并在destory()中杀死。它可以用于模拟操作系统的端口监控进程。<br />
servlet API提供了Servlet接口的直接实现，称为GenericServlet。此类提供除了service()方法外所有接口中方法的缺省实现。这意味着通过简单地扩展GenericServlte可以编写一个基本的servlet。<br />
除了Servlet接口外，GenericServlet也实现了ServletConfig接口，处理初始化参数和servlet上下文，提供对授权传递到init()方法中的ServletConfig对象的方法。</p>
<p>&nbsp;<br />
GenericServlet类中的方法&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void destory()&nbsp;&nbsp;&nbsp; 编飞组成单词&#8220;destory&#8221;的一个注册入口&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getInitParameter(String name)&nbsp;&nbsp;&nbsp; 返回具有指定名称的初始化参数值。通过凋用config.getInitParameter(name)实现。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Enumeration getInitParameterNames()&nbsp;&nbsp;&nbsp; 返回此serv]et已编码的所有初始化参数的?个枚举类型值。调用config.getInitParameterNames()获得列表。如果未提供初始化参数，则返回?个空的枚举类型值（但不是null）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
ServletConfig getServletConfig()&nbsp;&nbsp;&nbsp; 返回传递到init()方法的ServletConfig对象&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
ServletContext getServletContext()&nbsp;&nbsp;&nbsp; 返回在config对象中引用的ServletContext&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getServletInfo()&nbsp;&nbsp;&nbsp; 返回空字符串&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void init(ServletConfig config)throws ServletException&nbsp;&nbsp;&nbsp; 在一实例变量中保存config对象。编写组成单词&#8220;init&#8221;的注册入口,然后调用方法init()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void init()throws ServletException&nbsp;&nbsp;&nbsp; 可以被跳过以处理servlet初始化.在config对象被保存后init(ServletConfig config)的结尾处自动被调用.servlet作者经常会忘记调用super.init(config)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void log(String msg)&nbsp;&nbsp;&nbsp; 编写注册servlet的入口.为此调用servlet上下文的log()方法.servlet的名字被加到消息文本的开头。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void log(String msg,Throwable t)&nbsp;&nbsp;&nbsp; 编写一个入口和servlet注册的栈轨迹。此方法也是ServletContext中相应方法的一个副本。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
abstract void service(Request request,Response response)throws ServletException,IOException&nbsp;&nbsp;&nbsp; 由 servlet引擎调用为请求对象描述的请求提供服务。这是GenericServlet中唯一的抽象方法。因此它也是唯一必须被子类所覆盖的方法。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getServletName()&nbsp;&nbsp;&nbsp; 返回在Web应用发布描述器（web.xml）中指定的servlet的名字。&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><span style="font-family: Comic Sans MS"><strong style="font-size: 14pt">三、javax.servlet.http.HttpServlet类（HTTP版本）</strong></span></p>
<p>虽然servlet API允许扩展到其它协议，但最终所有的servlet均在Web环境下实施操作，只有几种servlet直接扩展了GenericServlet。对servlet更一般的是扩展其HTTP子类HttpServlet。<br />
HttpServlet 类通过调用指定到HTTP请求方法的方法实现service()，亦即对DELETE、HEAD、GET、OPTIONS、POST、PUT和 TRACE，分别调用doDelete()、doHead()、doGet()、doOptions()、doPost()、doPut()和 doTrace()方法，将请求和响应对象置入其HTTP指定子类。</p>
<p>HttpServlet类中的方法&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException&nbsp;&nbsp;&nbsp; 由 servlet引擎调用用处理一个HTTP GET请求。输入参数、HTTP头标和输入流可从request对象、response头标和 response对象的输出流中获得。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException&nbsp;&nbsp;&nbsp; 由 servlet引擎调用用处理一个HTTP POST请求。输入参数、HTTP头标和输入流可从request对象、response头标和 response对象的输出流中获得。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Void doPut(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException&nbsp;&nbsp;&nbsp; 由 servlet引擎调用用处理一个HTTP PUT请求。本方法中请求URI指出被载入的文件位置。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Void doDelete(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException&nbsp;&nbsp;&nbsp; 由 servlet引擎调用用处理一个HTTP DELETE请求。请求URI指出资源被删除。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Void doOptions(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException&nbsp;&nbsp;&nbsp; 由 servlet引擎调用用处理一个HTTP OPTIONS请求。返回一个Allow响应头标表明此servlet支持的HTTP方法。一个 servlet不需要覆盖此方法，因为HttpServlet方法已经实现规范所需的功能。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Void doTrace(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException&nbsp;&nbsp;&nbsp; 由 servlet引擎调用用处理一个HTTP TRACE请求。使得请求头标被反馈成响应关标。一个servlet不需要覆盖此方法，因为 HttpServlet方法已经实现HTTP规范所需的功能。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Void service(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException&nbsp;&nbsp;&nbsp; Service(Request request,Response response) 调用的一个立即方法，带有指定HTTP请求和响应。此方法实际上将请求导向doGet()、doPost()等等。不应该覆盖此方法。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Void service(Request request,Response response)throws ServletException,IOException&nbsp;&nbsp;&nbsp; 将请求和响应对象置入其指定的HTTP子类，并调用指定HTTP的service()方法。&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><span style="font-size: 14pt; font-family: Comic Sans MS"><strong>四、javax.servlet.ServletRequest类（协议无关版本）</strong></span></p>
<p>ServletRequest接口封装了客户端请求的细节。它与协议无关，并有一个指定HTTP的子接口。<br />
ServletRequest主要处理：<br />
1.找到客户端的主机名和IP地址<br />
2.检索请求参数<br />
3.取得和设置属性<br />
4.取得输入和输出流</p>
<p>&nbsp;<br />
ServletRequest类中的方法&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Object getAttribute(String name)&nbsp;&nbsp;&nbsp; 返回具有指定名字的请求属性，如果不存在则返回null。属性可由servlet引擎设置或使用setAttribute()显式加入。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Enumeration getAttributeName()&nbsp;&nbsp;&nbsp; 返回请求中所有属性名的枚举。如果不存在属性，则返回一个空的枚举。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getCharacteEncoding()&nbsp;&nbsp;&nbsp; 返回请求所用的字符编码。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Int getContentLength()&nbsp;&nbsp;&nbsp; 指定输入流的长度，如果未知则返回-1。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
ServletInputStream getInputStream()throws IOException&nbsp;&nbsp;&nbsp; 返回与请求相关的（二进制）输入流。可以调用getInputStream()或getReader()方法之一。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getParameter(String name)&nbsp;&nbsp;&nbsp; 返回指定输入参数，如果不存在，返回null。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Enumeration getParameterName()&nbsp;&nbsp;&nbsp; 返回请求中所有参数名的一个可能为空的枚举。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String[] getParameterValues(String name)&nbsp;&nbsp;&nbsp; 返回指定输入参数名的取值数组，如果取值不存在则返回null。它在参数具有多个取值的情况下十分有用。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String get Protocol()&nbsp;&nbsp;&nbsp; 返回请求使用协议的名称和版本。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getScheme()&nbsp;&nbsp;&nbsp; 返回请求URI的子串，但不包含第一个冒号前的内容。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getServerName()&nbsp;&nbsp;&nbsp; 返回处理请求的服务器的主机名。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getServerPort()&nbsp;&nbsp;&nbsp; 返回接收主机正在侦听的端口号。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
BufferedReader getReader()throws IOException&nbsp;&nbsp;&nbsp; 返回与请求相关输入数据的一个字符解读器。此方法与getInputStream()只可分别调用，不能同时使用。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getRemoteAddr()&nbsp;&nbsp;&nbsp; 返回客户端主机的数字型IP地址。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getRemoteHost()&nbsp;&nbsp;&nbsp; 如果知道，返回客户端主机名。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void setAttribute(String name,Object obj)&nbsp;&nbsp;&nbsp; 以指定名称保存请求中指定对象的引用。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void removeAttribute(String name)&nbsp;&nbsp;&nbsp; 从请求中删除指定属性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Locale getLocale()&nbsp;&nbsp;&nbsp; 如果已知，返回客户端的第一现场或者为null。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Enumeration getLocales()&nbsp;&nbsp;&nbsp; 如果已知，返回客户端的第一现场的一个枚举，否则返回服务器第一现场。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
boolean isSecure()&nbsp;&nbsp;&nbsp; 如果请求使用了如HTTPS安全隧道，返回true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
RequestDispatcher getRequestDispatcher(String name)&nbsp;&nbsp;&nbsp; 返回指定源名称的RequsetDispatcher对象。&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><strong style="font-size: 14pt; font-family: Comic Sans MS">五、javax.servlet.http.HttpServletRequest接口（HTTP版本）</strong></p>
<p>HttpServletRequest类主要处理：<br />
1.读取和写入HTTP头标<br />
2.取得和设置cookies<br />
3.取得路径信息<br />
4.标识HTTP会话。</p>
<p>&nbsp;<br />
HttpServletRequest接口中的方法&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getAuthType()&nbsp;&nbsp;&nbsp; 如果servlet由一个鉴定方案所保护，如HTTP基本鉴定，则返回方案名称。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getContextPath()&nbsp;&nbsp;&nbsp; 返回指定servlet上下文（web应用）的URL的前缀。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Cookie[] getCookies()&nbsp;&nbsp;&nbsp; 返回与请求相关cookie的一个数组。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Long getDateHeader(String name)&nbsp;&nbsp;&nbsp; 将输出转换成适合构建Date对象的long类型取值的getHeader()的简化版。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getHeader(String name)&nbsp;&nbsp;&nbsp; 返回指定的HTTP头标指。如果其由请求给出，则名字应为大小写不敏感。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Enumeration getHeaderNames()&nbsp;&nbsp;&nbsp; 返回请求给出的所有HTTP头标名称的权举值。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Enumeration getHeaders(String name)&nbsp;&nbsp;&nbsp; 返回请求给出的指定类型的所有HTTP头标的名称的枚举值，它对具有多取值的头标非常有用。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
int getIntHeader(String name)&nbsp;&nbsp;&nbsp; 将输出转换为int取值的getHeader()的简化版。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getMethod()&nbsp;&nbsp;&nbsp; 返回HTTP请求方法（例如GET、POST等等）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getPathInfo()&nbsp;&nbsp;&nbsp; 返回在URL中指定的任意附加路径信息。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getPathTranslated()&nbsp;&nbsp;&nbsp; 返回在URL中指定的任意附加路径信息，被子转换成一个实际路径。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getQueryString()&nbsp;&nbsp;&nbsp; 返回查询字符串，即URL中?后面的部份。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getRemoteUser()&nbsp;&nbsp;&nbsp; 如果用户通过鉴定，返回远程用户名，否则为null。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getRequestedSessionId()&nbsp;&nbsp;&nbsp; 返回客户端的会话ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getRequestURI()&nbsp;&nbsp;&nbsp; 返回URL中一部分，从&#8220;/&#8221;开始，包括上下文，但不包括任意查询字符串。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getServletPath()&nbsp;&nbsp;&nbsp; 返回请求URI上下文后的子串&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
HttpSession getSession()&nbsp;&nbsp;&nbsp; 调用getSession(true)的简化版。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
HttpSession getSession(boolean create)&nbsp;&nbsp;&nbsp; 返回当前HTTP会话，如果不存在，则创建一个新的会话，create参数为true。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Principal getPrincipal()&nbsp;&nbsp;&nbsp; 如果用户通过鉴定，返回代表当前用户的java.security.Principal对象，否则为null。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
boolean isRequestedSessionIdFromCookie()&nbsp;&nbsp;&nbsp; 如果请求的会话ID由一个Cookie对象提供，则返回true，否则为false。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
boolean isRequestedSessionIdFromURL()&nbsp;&nbsp;&nbsp; 如果请求的会话ID在请求URL中解码，返回true，否则为false&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
boolean isRequestedSessionIdValid()&nbsp;&nbsp;&nbsp; 如果客户端返回的会话ID仍然有效，则返回true。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Boolean isUserInRole(String role)&nbsp;&nbsp;&nbsp; 如果当前已通过鉴定用户与指定角色相关，则返回true，如果不是或用户未通过鉴定，则返回false。&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><span style="font-family: Comic Sans MS"><strong style="font-size: 14pt">六、javax.servlet.ServletResponse接口（协议无关版本）</strong></span></p>
<p>ServletResponse对象将一个servlet生成的结果传到发出请求的客户端。ServletResponse操作主要是作为输出流及其内容类型和长度的包容器，它由servlet引擎创建.</p>
<p>&nbsp;<br />
ServletResponse接口中的方法&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void flushBuffer()throws IOException&nbsp;&nbsp;&nbsp; 发送缓存到客户端的输出内容。因为HTTP需要头标在内容前被发送，调用此方法发送状态行和响应头标，以确认请求。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
int getBufferSize()&nbsp;&nbsp;&nbsp; 返回响应使用的缓存大小。如果缓存无效则返加0。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getCharacterEncoding()&nbsp;&nbsp;&nbsp; 返回响应使用字符解码的名字。除非显式设置，否则为ISO-8859-1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Locale getLocale()&nbsp;&nbsp;&nbsp; 返回响应使用的现场。除非用setLocale()修改，否则缺省为服务器现场。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
OutputStream getOutputStream()throws IOException&nbsp;&nbsp;&nbsp; 返回用于将返回的二进制输出写入客户端的流，此方法和getWrite()方法二者只能调用其一。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Writer getWriter()throws IOException&nbsp;&nbsp;&nbsp; 返回用于将返回的文本输出写入客户端的一个字符写入器，此方法和getOutputStream()二者只能调用其一。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
boolean isCommitted()&nbsp;&nbsp;&nbsp; 如果状态和响应头标已经被发回客户端，则返回true，在响应被确认后发送响应头标毫无作用。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void reset()&nbsp;&nbsp;&nbsp; 清除输出缓存及任何响应头标。如果响应已得到确认，则引发事件IllegalStateException。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void setBufferSize(int nBytes)&nbsp;&nbsp;&nbsp; 设置响应的最小缓存大小。实际缓存大小可以更大，可以通过调用getBufferSize()得到。如果输出已被写入，则产生IllegalStateException。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void setContentLength(int length)&nbsp;&nbsp;&nbsp; 设置内容体的长度。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void setContentType(String type)&nbsp;&nbsp;&nbsp; 设置内容类型。在HTTP servlet中即设置Content-Type头标。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void setLocale(Locale locale)&nbsp;&nbsp;&nbsp; 设置响应使用的现场。在HTTP servlet中，将对Content-Type头标取值产生影响。&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><strong style="font-size: 14pt; font-family: Comic Sans MS">七、javax.servlet.http.HttpServletResponse接口（HTTP版本）</strong></p>
<p>HttpServletResponse加入表示状态码、状态信息和响应头标的方法，它还负责对URL中写入一Web页面的HTTP会话ID进行解码。</p>
<p>&nbsp;<br />
HttpServletResponse接口中的方法&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void addCookie(Cookie cookie)&nbsp;&nbsp;&nbsp; 将一个Set-Cookie头标加入到响应。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void addDateHeader(String name,long date)&nbsp;&nbsp;&nbsp; 使用指定日期值加入带有指定名字（或代换所有此名字头标）的响应头标的方法。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void setHeader(String name,String value)&nbsp;&nbsp;&nbsp; 设置具有指定名字和取值的一个响应头标。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void addIntHeader(String name,int value)&nbsp;&nbsp;&nbsp; 使用指定整型值加入带有指定名字的响应头标（或代换此名字的所有头标）。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
boolean containsHeader(String name)&nbsp;&nbsp;&nbsp; 如果响应已包含此名字的头标，则返回true。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String encodeRedirectURL(String url)&nbsp;&nbsp;&nbsp; 如果客户端不知道接受cookid，则向URL加入会话ID。第一种形式只对在sendRedirect()中使用的URL进行调用。其他被编码的URLs 应被传递到encodeURL()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String encodeURL(String url)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void sendError(int status)&nbsp;&nbsp;&nbsp; 设置响应状态码为指定值（可选的状态信息）。HttpServleetResponse定义了一个完整的整数常量集合表示有效状态值。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void sendError(int status,String msg)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void setStatus(int status)&nbsp;&nbsp;&nbsp; 设置响应状态码为指定指。只应用于不产生错误的响应，而错误响应使用sendError()。&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><strong style="font-size: 14pt; font-family: Comic Sans MS">八、javax.servlet.ServletContext接口</strong></p>
<p>一个servlet上下文是servlet引擎提供用来服务于Web应用的接口。Servlet上下文具有名字（它属于Web应用的名字）唯一映射到文件系统的一个目录。<br />
一个servlet可以通过ServletConfig对象的getServletContext()方法得到servlet上下文的引用，如果servlet直接或间接调用子类GenericServlet，则可以使用getServletContext()方法。<br />
Web应用中servlet可以使用servlet上下文得到：<br />
1.在调用期间保存和检索属性的功能，并与其他servlet共享这些属性。<br />
2.读取Web应用中文件内容和其他静态资源的功能。<br />
3.互相发送请求的方式。<br />
4.记录错误和信息化消息的功能。</p>
<p>&nbsp;<br />
ServletContext接口中的方法&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Object getAttribute(String name)&nbsp;&nbsp;&nbsp; 返回servlet上下文中具有指定名字的对象，或使用已指定名捆绑一个对象。从Web应用的标准观点看，这样的对象是全局对象，因为它们可以被同一 servlet在另一时刻访问。或上下文中任意其他servlet访问。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void setAttribute(String name,Object obj)&nbsp;&nbsp;&nbsp; 设置servlet上下文中具有指定名字的对象。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Enumeration getAttributeNames()&nbsp;&nbsp;&nbsp; 返回保存在servlet上下文中所有属性名字的枚举。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
ServletContext getContext(String uripath)&nbsp;&nbsp;&nbsp; 返回映射到另一URL的servlet上下文。在同一服务器中URL必须是以&#8220;/&#8221;开头的绝对路径。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getInitParameter(String name)&nbsp;&nbsp;&nbsp; 返回指定上下文范围的初始化参数值。此方法与ServletConfig方法名称不一样，后者只应用于已编码的指定servlet。此方法应用于上下文中所有的参数。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Enumeration getInitParameterNames()&nbsp;&nbsp;&nbsp; 返回（可能为空）指定上下文范围的初始化参数值名字的枚举值。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
int getMajorVersion()&nbsp;&nbsp;&nbsp; 返回此上下文中支持servlet API级别的最大和最小版本号。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
int getMinorVersion()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getMimeType(String fileName)&nbsp;&nbsp;&nbsp; 返回指定文件名的MIME类型。典型情况是基于文件扩展名，而不是文件本身的内容（它可以不必存在）。如果MIME类型未知，可以返回null。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
RequestDispatcher getNameDispatcher(String name)&nbsp;&nbsp;&nbsp; 返回具有指定名字或路径的servlet或JSP的RequestDispatcher。如果不能创建RequestDispatch，返回null。如果指定路径，必须心&#8220;/&#8221;开头，并且是相对于servlet上下文的顶部。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
RequestDispatcher getNameDispatcher(String path)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getRealPath(String path)&nbsp;&nbsp;&nbsp; 给定一个URI，返回文件系统中URI对应的绝对路径。如果不能进行映射，返回null。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
URL getResource(String path)&nbsp;&nbsp;&nbsp; 返回相对于servlet上下文或读取URL的输入流的指定绝对路径相对应的URL，如果资源不存在则返回null。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
InputStream getResourceAsStream(String path)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getServerInfo()&nbsp;&nbsp;&nbsp; 返顺servlet引擎的名称和版本号。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void log(String message)<br />
void log(String message,Throwable t)&nbsp;&nbsp;&nbsp; 将一个消息写入servlet注册，如果给出Throwable参数，则包含栈轨迹。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void removeAttribute(String name)&nbsp;&nbsp;&nbsp; 从servlet上下文中删除指定属性。&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p><span style="font-family: Comic Sans MS"><strong style="font-size: 14pt">九、javax.servlet.http.HttpSession接口</strong></span></p>
<p>HttpSession 类似于哈希表的接口，它提供了setAttribute()和getAttribute()方法存储和检索对象。HttpSession提供了一个会话 ID关键字，一个参与会话行为的客户端在同一会话的请求中存储和返回它。servlet引擎查找适当的会话对象，并使之对当前请求可用。</p>
<p>&nbsp;<br />
HttpSession接口中的方法&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Object getAttribute(String name)&nbsp;&nbsp;&nbsp; 将会话中一个对象保存为指定名字，返回或删除前面保存的此名称对象。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void setAttribute(String name,Object value)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void removeAttribute(String name)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
Enumeration getAttributeName()&nbsp;&nbsp;&nbsp; 返回捆绑到当前会话的所有属性名的枚举值。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
long getCreationTime()&nbsp;&nbsp;&nbsp; 返回表示会话创建和最后访问日期和时间的一个长整型，该整型形式为java.util.Date()构造器中使用的形式。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
long getLastAccessedTime()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
String getId()&nbsp;&nbsp;&nbsp; 返回会话ID，servlet引擎设置的一个唯一关键字。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
ing getMaxInactiveInterval()&nbsp;&nbsp;&nbsp; 如果没有与客户端发生交互，设置和返回会话存活的最大秒数。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void setMasInactiveInterval(int seconds)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
void invalidate()&nbsp;&nbsp;&nbsp; 使得会话被终止，释放其中任意对象。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
boolean isNew()&nbsp;&nbsp;&nbsp; 如果客户端仍未加入到会话，返回true。当会话首次被创建，会话ID被传入客户端，但客户端仍未进行包含此会话ID的第二次请示时，返回true。</p>
<img src ="http://www.blogjava.net/jzone/aggbug/286332.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-07-10 23:19 <a href="http://www.blogjava.net/jzone/articles/286332.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Servlet 中request 常用GET方法（摘）</title><link>http://www.blogjava.net/jzone/articles/285983.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Wed, 08 Jul 2009 15:12:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/285983.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/285983.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/285983.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/285983.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/285983.html</trackback:ping><description><![CDATA[
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        ServletContext servletContext </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> ActionContext.getServletContext();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        HttpServletRequest request </span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000"> ActionContext.getRequest();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_179_247_Open_Image" onclick="this.style.display='none'; Codehighlighter1_179_247_Open_Text.style.display='none'; Codehighlighter1_179_247_Closed_Image.style.display='inline'; Codehighlighter1_179_247_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_179_247_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_179_247_Closed_Text.style.display='none'; Codehighlighter1_179_247_Open_Image.style.display='inline'; Codehighlighter1_179_247_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />        </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000"> (servletContext </span>
				<span style="COLOR: #000000">==</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">null</span>
				<span style="COLOR: #000000">) </span>
				<span id="Codehighlighter1_179_247_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 src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_179_247_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            System.out.println(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">servletContext is null</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />        }</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img id="Codehighlighter1_278_339_Open_Image" onclick="this.style.display='none'; Codehighlighter1_278_339_Open_Text.style.display='none'; Codehighlighter1_278_339_Closed_Image.style.display='inline'; Codehighlighter1_278_339_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_278_339_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_278_339_Closed_Text.style.display='none'; Codehighlighter1_278_339_Open_Image.style.display='inline'; Codehighlighter1_278_339_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />        </span>
				<span style="COLOR: #0000ff">if</span>
				<span style="COLOR: #000000"> (request </span>
				<span style="COLOR: #000000">==</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">null</span>
				<span style="COLOR: #000000">) </span>
				<span id="Codehighlighter1_278_339_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 src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_278_339_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            System.out.println(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">request is null</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />        }</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        System.out.println(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">servletContext.getContextPath()=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> servletContext.getContextPath());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        System.out.println(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">servletContext.getRealPath(\</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">\</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">)=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> servletContext.getRealPath(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        System.out.println(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">servletContext.getRealPath(\</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">\</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">)=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> servletContext.getRealPath(</span>
				<span style="COLOR: #000000">""</span>
				<span style="COLOR: #000000">));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        System.out.println(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">servletContext.getContextPath()=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> servletContext.getContextPath());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        System.out.println(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">servletContext.getServerInfo()=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> servletContext.getServerInfo());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_848_964_Open_Image" onclick="this.style.display='none'; Codehighlighter1_848_964_Open_Text.style.display='none'; Codehighlighter1_848_964_Closed_Image.style.display='inline'; Codehighlighter1_848_964_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_848_964_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_848_964_Closed_Text.style.display='none'; Codehighlighter1_848_964_Open_Image.style.display='inline'; Codehighlighter1_848_964_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />        </span>
				<span style="COLOR: #0000ff">try</span>
				<span style="COLOR: #000000"> </span>
				<span id="Codehighlighter1_848_964_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 src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_848_964_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            System.out.println(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">servletContext.getResource(\</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">/</span>
						<span style="COLOR: #000000">\</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">)=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000"> servletContext.getResource(</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">/</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />        }</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img id="Codehighlighter1_1006_1049_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1006_1049_Open_Text.style.display='none'; Codehighlighter1_1006_1049_Closed_Image.style.display='inline'; Codehighlighter1_1006_1049_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_1006_1049_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1006_1049_Closed_Text.style.display='none'; Codehighlighter1_1006_1049_Open_Image.style.display='inline'; Codehighlighter1_1006_1049_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />        </span>
				<span style="COLOR: #0000ff">catch</span>
				<span style="COLOR: #000000"> (MalformedURLException e) </span>
				<span id="Codehighlighter1_1006_1049_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 src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_1006_1049_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            e.printStackTrace();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />        }</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        </span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000"> request</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">        System.out.println(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">request.getContextPath()=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> request.getContextPath());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        System.out.println(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">request.getLocalAddr()=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> request.getLocalAddr());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        System.out.println(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">request.getLocalName()=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> request.getLocalName());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        System.out.println(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">request.getLocalPort()=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> request.getLocalPort());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        System.out.println(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">request.getPathInfo()=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> request.getPathInfo());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        System.out.println(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">request.getPathTranslated()=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> request.getPathTranslated());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        System.out.println(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">request.getProtocol()=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> request.getProtocol());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        System.out.println(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">request.getQueryString()=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> request.getQueryString());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        System.out.println(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">request.getRealPath(\</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">\</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">)已过时=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> request.getRealPath(</span>
				<span style="COLOR: #000000">""</span>
				<span style="COLOR: #000000">));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        System.out.println(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">request.getRemoteAddr()=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> request.getRemoteAddr());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        System.out.println(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">request.getRemoteHost()=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> request.getRemoteHost());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        System.out.println(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">request.getRemotePort()=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> request.getRemotePort());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        System.out.println(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">request.getRemoteUser()=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> request.getRemoteUser());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        System.out.println(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">request.getRequestURI()=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> request.getRequestURI());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        System.out.println(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">request.getRequestURL()=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> request.getRequestURL());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        System.out.println(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">request.getScheme()=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> request.getScheme());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        System.out.println(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">request.getServerName()=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> request.getServerName());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        System.out.println(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">request.getServerPort()=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> request.getServerPort());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        System.out.println(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">request.getServletPath()=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> request.getServletPath());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        System.out.println(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">request.getUserPrincipal()=</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #000000">+</span>
				<span style="COLOR: #000000"> request.getUserPrincipal());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        servletContext.getContextPath()</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        servletContext.getRealPath(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">)</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">F:\ess</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">branch\web\<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        servletContext.getRealPath(</span>
				<span style="COLOR: #000000">""</span>
				<span style="COLOR: #000000">)</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">F:\ess</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">branch\web<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        servletContext.getContextPath()</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        servletContext.getServerInfo()</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">Apache Tomcat</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">6.0</span>
				<span style="COLOR: #000000">.</span>
				<span style="COLOR: #000000">18</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        servletContext.getResource(</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">"</span>
				<span style="COLOR: #000000">)</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">jndi:</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">localhost</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        request.getContextPath()</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        request.getLocalAddr()</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">127.0</span>
				<span style="COLOR: #000000">.</span>
				<span style="COLOR: #000000">0.1</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        request.getLocalName()</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">localhost<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        request.getLocalPort()</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">8090</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        request.getPathInfo()</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #0000ff">null</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        request.getPathTranslated()</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #0000ff">null</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        request.getProtocol()</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">HTTP</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">1.1</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        request.getQueryString()</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #0000ff">null</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        request.getRealPath(</span>
				<span style="COLOR: #000000">""</span>
				<span style="COLOR: #000000">)已过时</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">F:\ess</span>
				<span style="COLOR: #000000">-</span>
				<span style="COLOR: #000000">branch\web<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        request.getRemoteAddr()</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">127.0</span>
				<span style="COLOR: #000000">.</span>
				<span style="COLOR: #000000">0.1</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        request.getRemoteHost()</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">127.0</span>
				<span style="COLOR: #000000">.</span>
				<span style="COLOR: #000000">0.1</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        request.getRemotePort()</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">3288</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        request.getRemoteUser()</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #0000ff">null</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        request.getRequestURI()</span>
				<span style="COLOR: #000000">=/</span>
				<span style="COLOR: #000000">support</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">indexinfo</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">uploadPicture.htm<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        request.getRequestURL()</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">http:</span>
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">localhost:8090/support/indexinfo/uploadPicture.htm</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">        request.getScheme()</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">http<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        request.getServerName()</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">localhost<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        request.getServerPort()</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #000000">8090</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        request.getServletPath()</span>
				<span style="COLOR: #000000">=/</span>
				<span style="COLOR: #000000">support</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">indexinfo</span>
				<span style="COLOR: #000000">/</span>
				<span style="COLOR: #000000">uploadPicture.htm<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />        request.getUserPrincipal()</span>
				<span style="COLOR: #000000">=</span>
				<span style="COLOR: #0000ff">null</span>
		</div>
<img src ="http://www.blogjava.net/jzone/aggbug/285983.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-07-08 23:12 <a href="http://www.blogjava.net/jzone/articles/285983.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>弱智的二级联动菜单--（摘）</title><link>http://www.blogjava.net/jzone/articles/284848.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Tue, 30 Jun 2009 15:23:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/284848.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/284848.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/284848.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/284848.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/284848.html</trackback:ping><description><![CDATA[呵，其实有些时候要求的没那么严格的话，用JS就能搞定了。我从网上找了一段，<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&lt;</span><span style="color: #000000">form&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">frm</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">select&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">s1</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;onChange</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">redirec(document.frm.s1.options.selectedIndex)</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">option&nbsp;selected</span><span style="color: #000000">&gt;</span><span style="color: #000000">请选择</span><span style="color: #000000">&lt;/</span><span style="color: #000000">option</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">option&nbsp;value</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">1</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">脚本语言</span><span style="color: #000000">&lt;/</span><span style="color: #000000">option</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">option&nbsp;value</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">2</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">高级语言</span><span style="color: #000000">&lt;/</span><span style="color: #000000">option</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">option&nbsp;value</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">3</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000">其他语言</span><span style="color: #000000">&lt;/</span><span style="color: #000000">option</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">select</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">select&nbsp;name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">s2</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">option&nbsp;value</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">请选择</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;selected</span><span style="color: #000000">&gt;</span><span style="color: #000000">请选择</span><span style="color: #000000">&lt;/</span><span style="color: #000000">option</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">select</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">form</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;</span><span style="color: #000000">script&nbsp;language</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">javascript</span><span style="color: #000000">"</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">获取一级菜单长度</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;select1_len&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.frm.s1.options.length;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;select2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Array(select1_len);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">把一级菜单都设为数组</span><span style="color: #008000"><br />
<img id="Codehighlighter1_485_514_Open_Image" onclick="this.style.display='none'; Codehighlighter1_485_514_Open_Text.style.display='none'; Codehighlighter1_485_514_Closed_Image.style.display='inline'; Codehighlighter1_485_514_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_485_514_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_485_514_Closed_Text.style.display='none'; Codehighlighter1_485_514_Open_Image.style.display='inline'; Codehighlighter1_485_514_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">select1_len;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)</span><span id="Codehighlighter1_485_514_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_485_514_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;select2[i]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Array();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">定义基本选项</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">select2[</span><span style="color: #000000">0</span><span style="color: #000000">][</span><span style="color: #000000">0</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Option(</span><span style="color: #000000">"</span><span style="color: #000000">请选择</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">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />select2[</span><span style="color: #000000">1</span><span style="color: #000000">][</span><span style="color: #000000">0</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Option(</span><span style="color: #000000">"</span><span style="color: #000000">PHP</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">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />select2[</span><span style="color: #000000">1</span><span style="color: #000000">][</span><span style="color: #000000">1</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Option(</span><span style="color: #000000">"</span><span style="color: #000000">ASP</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">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />select2[</span><span style="color: #000000">1</span><span style="color: #000000">][</span><span style="color: #000000">2</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Option(</span><span style="color: #000000">"</span><span style="color: #000000">JSP</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">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />select2[</span><span style="color: #000000">2</span><span style="color: #000000">][</span><span style="color: #000000">0</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Option(</span><span style="color: #000000">"</span><span style="color: #000000">C/C++</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">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />select2[</span><span style="color: #000000">2</span><span style="color: #000000">][</span><span style="color: #000000">1</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Option(</span><span style="color: #000000">"</span><span style="color: #000000">Java</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">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />select2[</span><span style="color: #000000">2</span><span style="color: #000000">][</span><span style="color: #000000">2</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Option(</span><span style="color: #000000">"</span><span style="color: #000000">C#</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">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />select2[</span><span style="color: #000000">3</span><span style="color: #000000">][</span><span style="color: #000000">0</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Option(</span><span style="color: #000000">"</span><span style="color: #000000">Perl</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">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />select2[</span><span style="color: #000000">3</span><span style="color: #000000">][</span><span style="color: #000000">1</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Option(</span><span style="color: #000000">"</span><span style="color: #000000">Ruby</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">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />select2[</span><span style="color: #000000">3</span><span style="color: #000000">][</span><span style="color: #000000">2</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Option(</span><span style="color: #000000">"</span><span style="color: #000000">Python</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">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">联动函数</span><span style="color: #008000"><br />
<img id="Codehighlighter1_963_1136_Open_Image" onclick="this.style.display='none'; Codehighlighter1_963_1136_Open_Text.style.display='none'; Codehighlighter1_963_1136_Closed_Image.style.display='inline'; Codehighlighter1_963_1136_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_963_1136_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_963_1136_Closed_Text.style.display='none'; Codehighlighter1_963_1136_Open_Image.style.display='inline'; Codehighlighter1_963_1136_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">function</span><span style="color: #000000">&nbsp;redirec(x)</span><span id="Codehighlighter1_963_1136_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_963_1136_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;temp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;document.frm.s2;&nbsp;<br />
<img id="Codehighlighter1_1029_1102_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1029_1102_Open_Text.style.display='none'; Codehighlighter1_1029_1102_Closed_Image.style.display='inline'; Codehighlighter1_1029_1102_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1029_1102_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1029_1102_Closed_Text.style.display='none'; Codehighlighter1_1029_1102_Open_Image.style.display='inline'; Codehighlighter1_1029_1102_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">select2[x].length;i</span><span style="color: #000000">++</span><span style="color: #000000">)</span><span id="Codehighlighter1_1029_1102_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1029_1102_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.options[i]</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Option(select2[x][i].text,select2[x][i].value);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;temp.options[</span><span style="color: #000000">0</span><span style="color: #000000">].selected</span><span style="color: #000000">=</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&lt;/</span><span style="color: #000000">script</span><span style="color: #000000">&gt;</span></div>
<br />
<br />
像这种常见的就是省--市--县等的联动了。那个网上一大堆，也幸苦那些作者了。
<img src ="http://www.blogjava.net/jzone/aggbug/284848.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-06-30 23:23 <a href="http://www.blogjava.net/jzone/articles/284848.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>二级联动菜单（jsp + jstl + tag + ajax + servlet + 业务处理）</title><link>http://www.blogjava.net/jzone/articles/284527.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 28 Jun 2009 14:36:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/284527.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/284527.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/284527.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/284527.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/284527.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 处理动态的二级联动菜单，宗旨，通过ajax异步提交，将通过java业务处理（一些getxx的业务处理方法就省略了）的联动数据，再通过ajax塞到jsp里showSubSpace.jsp：接收数据显示联动效果，这个页面需要初始化自动加载JS&nbsp; &lt;body onload="showSubSpace()"&gt;&nbsp; *** &lt;/body&gt;findallS...&nbsp;&nbsp;<a href='http://www.blogjava.net/jzone/articles/284527.html'>阅读全文</a><img src ="http://www.blogjava.net/jzone/aggbug/284527.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-06-28 22:36 <a href="http://www.blogjava.net/jzone/articles/284527.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JNDI</title><link>http://www.blogjava.net/jzone/articles/284481.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 28 Jun 2009 07:27:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/284481.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/284481.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/284481.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/284481.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/284481.html</trackback:ping><description><![CDATA[JNDI：Java Naming and Directory Interface，用于定位查找服务对象
<img src ="http://www.blogjava.net/jzone/aggbug/284481.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-06-28 15:27 <a href="http://www.blogjava.net/jzone/articles/284481.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP 统计在线人数</title><link>http://www.blogjava.net/jzone/articles/284193.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Thu, 25 Jun 2009 15:44:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/284193.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/284193.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/284193.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/284193.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/284193.html</trackback:ping><description><![CDATA[网上众说纷纭，呵，什么记录文件啊，什么记录数据库啊，都能实现，关键是效率问题。这里，我用的是我项目中用过的一个工具，非常好用，话不多说，看招：<br />
SessionCounter.java<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">package</span><span style="color: #000000">&nbsp;com.Gavin.tools.sessioncount;<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.</span><span style="color: #000000">*</span><span style="color: #000000">;<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.</span><span style="color: #000000">*</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">import</span><span style="color: #000000">&nbsp;java.io.</span><span style="color: #000000">*</span><span style="color: #000000">;<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.</span><span style="color: #000000">*</span><span style="color: #000000">;<br />
<img id="Codehighlighter1_131_329_Open_Image" onclick="this.style.display='none'; Codehighlighter1_131_329_Open_Text.style.display='none'; Codehighlighter1_131_329_Closed_Image.style.display='inline'; Codehighlighter1_131_329_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_131_329_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_131_329_Closed_Text.style.display='none'; Codehighlighter1_131_329_Open_Image.style.display='inline'; Codehighlighter1_131_329_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_131_329_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_131_329_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;**********************************************<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;@description&nbsp;记录在线人数<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;Gavin.lee<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;@date&nbsp;Jun&nbsp;25,&nbsp;2009&nbsp;&nbsp;&nbsp;&nbsp;3:39:34&nbsp;PM<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;</span><span style="color: #808080">@version</span><span style="color: #008000">&nbsp;1.0<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;***********************************************<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_410_1017_Open_Image" onclick="this.style.display='none'; Codehighlighter1_410_1017_Open_Text.style.display='none'; Codehighlighter1_410_1017_Closed_Image.style.display='inline'; Codehighlighter1_410_1017_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_410_1017_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_410_1017_Closed_Text.style.display='none'; Codehighlighter1_410_1017_Open_Image.style.display='inline'; Codehighlighter1_410_1017_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;SessionCounter&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;HttpServlet&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;HttpSessionListener&nbsp;</span><span id="Codehighlighter1_410_1017_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_410_1017_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000"><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;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;activeSessions&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_806_834_Open_Image" onclick="this.style.display='none'; Codehighlighter1_806_834_Open_Text.style.display='none'; Codehighlighter1_806_834_Closed_Image.style.display='inline'; Codehighlighter1_806_834_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_806_834_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_806_834_Closed_Text.style.display='none'; Codehighlighter1_806_834_Open_Image.style.display='inline'; Codehighlighter1_806_834_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">int</span><span style="color: #000000">&nbsp;getActiveSessions()&nbsp;</span><span id="Codehighlighter1_806_834_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_806_834_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;activeSessions;<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_900_923_Open_Image" onclick="this.style.display='none'; Codehighlighter1_900_923_Open_Text.style.display='none'; Codehighlighter1_900_923_Closed_Image.style.display='inline'; Codehighlighter1_900_923_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_900_923_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_900_923_Closed_Text.style.display='none'; Codehighlighter1_900_923_Open_Image.style.display='inline'; Codehighlighter1_900_923_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">void</span><span style="color: #000000">&nbsp;sessionCreated(HttpSessionEvent&nbsp;httpSessionEvent)&nbsp;</span><span id="Codehighlighter1_900_923_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_900_923_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;activeSessions</span><span style="color: #000000">++</span><span style="color: #000000">;<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_992_1015_Open_Image" onclick="this.style.display='none'; Codehighlighter1_992_1015_Open_Text.style.display='none'; Codehighlighter1_992_1015_Closed_Image.style.display='inline'; Codehighlighter1_992_1015_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_992_1015_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_992_1015_Closed_Text.style.display='none'; Codehighlighter1_992_1015_Open_Image.style.display='inline'; Codehighlighter1_992_1015_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">void</span><span style="color: #000000">&nbsp;sessionDestroyed(HttpSessionEvent&nbsp;httpSessionEvent)&nbsp;</span><span id="Codehighlighter1_992_1015_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_992_1015_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;activeSessions</span><span style="color: #000000">--</span><span style="color: #000000">;<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/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<br />
count.jsp<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_2_47_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2_47_Open_Text.style.display='none'; Codehighlighter1_2_47_Closed_Image.style.display='inline'; Codehighlighter1_2_47_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_2_47_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2_47_Closed_Text.style.display='none'; Codehighlighter1_2_47_Open_Image.style.display='inline'; Codehighlighter1_2_47_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_47_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_2_47_Open_Text"><span style="color: #000000; background-color: #f5f5f5">@&nbsp;page&nbsp;import</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">com.Gavin.tools.sessioncount.*</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 id="Codehighlighter1_53_140_Open_Image" onclick="this.style.display='none'; Codehighlighter1_53_140_Open_Text.style.display='none'; Codehighlighter1_53_140_Closed_Image.style.display='inline'; Codehighlighter1_53_140_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_53_140_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_53_140_Closed_Text.style.display='none'; Codehighlighter1_53_140_Open_Image.style.display='inline'; Codehighlighter1_53_140_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_53_140_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_53_140_Open_Text"><span style="color: #000000; background-color: #f5f5f5">@&nbsp;page&nbsp;language</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">java</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;&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=UTF-8</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;pageEncoding</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">gb2312</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: #ff00ff">DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"</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><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">Insert&nbsp;title&nbsp;here</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 />
</span><span style="color: #000000"><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">body&nbsp;</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: #000000; background-color: #ffff00">&lt;%</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;SessionCounter.getActiveSessions()&nbsp;</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><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<br />
web.xml<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">&lt;</span><span style="color: #800000">listener</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<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">listener-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">com.Gavin.tools.sessioncount.SessionCounter</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">listener-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<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">listener</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;</span></div>
<img src ="http://www.blogjava.net/jzone/aggbug/284193.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-06-25 23:44 <a href="http://www.blogjava.net/jzone/articles/284193.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FCK edit 使用细节</title><link>http://www.blogjava.net/jzone/articles/282217.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 14 Jun 2009 13:54:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/282217.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/282217.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/282217.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/282217.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/282217.html</trackback:ping><description><![CDATA[这个以前常用的，刚好总结一下 ，理论就不说太多了，不是教各位怎么使用，只是告诉自己不要忘了狠久狠久以前用过这个插件。<br />
废话不多说，先去下载FCKedit包，解压后将需要的jar文件加载上，把FCKeditor 放到WebRoot下，完了之后配置web.xml，我都贴下面了，呵呵，多贴了不会错。其中含义去google吧。<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Connector</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">com.fredck.FCKeditor.connector.ConnectorServlet</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">baseDir</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/uploadFile/</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">debug</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">false</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">load-on-startup</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">1</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">load-on-startup</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Connector</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/FCKeditor/editor/filemanager/browser/default/connectors/jsp/connector</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">SimpleUploader</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">com.fredck.FCKeditor.uploader.SimpleUploaderServlet</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">baseDir</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/uploadFile/</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">debug</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">false</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">enabled</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">true</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">AllowedExtensionsFile</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">DeniedExtensionsFile</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">php|php3|php5|phtml|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg|cgi</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">AllowedExtensionsImage</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">jpg|gif|jpeg|png|bmp</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">DeniedExtensionsImage</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">AllowedExtensionsFlash</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">swf|fla</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">DeniedExtensionsFlash</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">load-on-startup</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">1</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">load-on-startup</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span></div>
<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">div&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">="shortcut_content"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">div&nbsp;</span><span style="color: #ff0000">style</span><span style="color: #0000ff">="&nbsp;vertical-align:text-top;&nbsp;height:20px;&nbsp;float:left;&nbsp;line-height:20px;"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">div</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">FCK:editor&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="content"</span><span style="color: #ff0000">&nbsp;basePath</span><span style="color: #0000ff">="FCKeditor/"</span><span style="color: #ff0000">&nbsp;&nbsp;toolbarSet</span><span style="color: #0000ff">="Default"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">请点击这里回复</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">FCK:editor</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">div</span><span style="color: #0000ff">&gt;</span></div>
<br />
JSP 页面配一下taglib <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 id="Codehighlighter1_2_64_Open_Image" onclick="this.style.display='none'; Codehighlighter1_2_64_Open_Text.style.display='none'; Codehighlighter1_2_64_Closed_Image.style.display='inline'; Codehighlighter1_2_64_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_2_64_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_2_64_Closed_Text.style.display='none'; Codehighlighter1_2_64_Open_Image.style.display='inline'; Codehighlighter1_2_64_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #000000; background-color: #ffff00">&lt;%</span><span id="Codehighlighter1_2_64_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_2_64_Open_Text"><span style="color: #000000; background-color: #f5f5f5">@&nbsp;taglib&nbsp;uri</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">http://fckeditor.net/tags-fckeditor</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">&nbsp;prefix</span><span style="color: #000000; background-color: #f5f5f5">=</span><span style="color: #000000; background-color: #f5f5f5">"</span><span style="color: #000000; background-color: #f5f5f5">FCK</span><span style="color: #000000; background-color: #f5f5f5">"</span></span><span style="color: #000000; background-color: #ffff00">%&gt;</span></div>
<br />
这里可以修改toolbarSet的值，这个具体的去google吧。呵呵，以前就是这样用的。<br />
<img src ="http://www.blogjava.net/jzone/aggbug/282217.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-06-14 21:54 <a href="http://www.blogjava.net/jzone/articles/282217.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>smartupload.jar 实现文件上传下载</title><link>http://www.blogjava.net/jzone/articles/282137.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 14 Jun 2009 04:26:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/282137.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/282137.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/282137.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/282137.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/282137.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在找common-upload文件上传的时候顺便熟悉了一下这里有一篇不错的。http://wtxawr.javaeye.com/blog/309221 【上传】前台：&lt;form&nbsp;action="uploadimage.jsp"&nbsp;method="post"&nbsp;enctype="multipart/form-data"&nbsp;name="form1...&nbsp;&nbsp;<a href='http://www.blogjava.net/jzone/articles/282137.html'>阅读全文</a><img src ="http://www.blogjava.net/jzone/aggbug/282137.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-06-14 12:26 <a href="http://www.blogjava.net/jzone/articles/282137.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>commons-upload.jar 实现文件的上传下载</title><link>http://www.blogjava.net/jzone/articles/282086.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sat, 13 Jun 2009 14:31:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/282086.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/282086.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/282086.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/282086.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/282086.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天帮个朋友部署了他的博客（JSP + JAVA + SQLSERVER 2000），设计到头像上传，部署完了，bean有下小叉叉，郁闷，当时就糗了。恨不得找个地缝钻进去。晚上回来找找资料，总结了一把，也算是有点收获了。这个我以前用过，呵，都忘了具体怎么实现的了。就象网上杂七杂八说的一样，很多种实现方法，多利用各种插件，我这里就是用apache的commons-fileupload。先去下这个包。...&nbsp;&nbsp;<a href='http://www.blogjava.net/jzone/articles/282086.html'>阅读全文</a><img src ="http://www.blogjava.net/jzone/aggbug/282086.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-06-13 22:31 <a href="http://www.blogjava.net/jzone/articles/282086.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有状态和无状态会话bean  ---JSP中文网</title><link>http://www.blogjava.net/jzone/articles/279920.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Wed, 03 Jun 2009 15:47:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/279920.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/279920.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/279920.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/279920.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/279920.html</trackback:ping><description><![CDATA[现实中，很多朋友对两种session bean存在误解，认为有状态是实例一直存在，保存每次调用后的状态，并对下一次调用起作用，而认为无状态是每次调用实例化一次，不保留用户信息。仔细分析并用实践检验后，你会发现，事实恰好相反：<br />
<br />
有状态和无状态会话bean的本质区别是它们的生命期。<br />
<br />
首先解释一个下面要用到的概念－－用户：session bean 的用户实际上就是直接调用ejb的类的实例，甚至是这个实例的某个方法。同一个类的不同实例对于session bean 来说是不同的用户。<br />
<br />
有状态会话bean ：每个用户有自己特有的一个实例，在用户的生存期内，bean保持了用户的信息，即&#8220;有状态&#8221;；一旦用户灭亡（调用结束或实例结束），bean的生命期也告结束。即每个用户最初都会得到一个初始的bean。<br />
<br />
无状态会话bean ：bean一旦实例化就被加进会话池中，各个用户都可以共用。即使用户已经消亡，bean 的生命期也不一定结束，它可能依然存在于会话池中，供其他用户调用。由于没有特定的用户，那么也就不能保持某一用户的状态，所以叫无状态bean。但无状态会话bean 并非没有状态，如果它有自己的属性（变量），那么这些变量就会受到所有调用它的用户的影响，这是在实际应用中必须注意的。<br />
<img src ="http://www.blogjava.net/jzone/aggbug/279920.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-06-03 23:47 <a href="http://www.blogjava.net/jzone/articles/279920.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>POST &amp;&amp; GET区别</title><link>http://www.blogjava.net/jzone/articles/277464.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sat, 23 May 2009 03:24:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/277464.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/277464.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/277464.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/277464.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/277464.html</trackback:ping><description><![CDATA[
		<p>既然这里都叫 WEB相关了，这两个肯定是要谈的，话不多说了，下面是我以前写的一点总结，给转到这里。<br />在说get &amp;&amp; post前，就要引入request response。</p>
		<p>请求消息：request</p>
		<p>GET /myweb/login.do?username=brady&amp;password=1111 HTTP/1.1</p>
		<p>Host: localhost</p>
		<p>User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6</p>
		<p>Accept: text/html;image/png,*/*</p>
		<p>Accept-Language: zh-cn</p>
		<p>Accept-Encoding: gzip,deflate</p>
		<p>Accept-Charset: gb2312</p>
		<p>Keep-Alive: 300</p>
		<p>Connection: keep-alive</p>
		<p>Cookie: who=brady.zh</p>
		<p>
				<br />POST /myweb/login.do HTTP/1.1</p>
		<p>Host: localhost</p>
		<p>User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6</p>
		<p>Accept: text/html;image/png,*/*</p>
		<p>Accept-Language: zh-cn</p>
		<p>Accept-Encoding: gzip,deflate</p>
		<p>Accept-Charset: gb2312</p>
		<p>Keep-Alive: 300</p>
		<p>Connection: keep-alive</p>
		<p>Cookie: who=brady.zh</p>
		<p>Content-Type: application/x-www-form-urlencoded</p>
		<p>Content-Length: 28</p>
		<p> </p>
		<p>username=brady&amp;password=1111</p>
		<p>
				<br />响应信息：response</p>
		<p>HTTP/1.1 200 OK</p>
		<p>Server: Apache-Coyote/1.1</p>
		<p>Set-Cookie: JSESSIONID=38034AF1E97054BE745275ADC90DB5C4; Path=/myweb</p>
		<p>Content-Type: text/html;charset=UTF-8</p>
		<p>Content-Length: 189</p>
		<p>Date: Sun, 23 Nov 2008 14:28:04 GMT</p>
		<p>
				<br />&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;</p>
		<p>&lt;html&gt;</p>
		<p>&lt;head&gt;</p>
		<p>    &lt;title&gt;test&lt;/title&gt;</p>
		<p>&lt;/head&gt;</p>
		<p>
				<br />&lt;body&gt;</p>
		<p>    This is my test page. &lt;br&gt;</p>
		<p>&lt;/body&gt;</p>
		<p>&lt;/html&gt;</p>
		<p> </p>
		<p>GET/POST 都是发送请求的方法</p>
		<p>从上面我们不难看出一些区别：</p>
		<p>GET:</p>
		<p>1.       用于直接从SERVER端检索信息(如文档、图像或数据库请求结果)</p>
		<p>2.       请求信息作为查询字符串发送</p>
		<p>3.       安全性不高</p>
		<p>4.       发送的内容长度有限（content &lt; 512 bit）</p>
		<p>POST：</p>
		<p>1.       用户发送敏感信息（如信用卡号）或要保存到数据库中的信息</p>
		<p>2.       发送长度在请求头下空一行</p>
		<p>3.       安全性好</p>
		<p>4.       发送的长度不高<br /> </p>
		<p>csdn上看到这个文章，觉得放在这里非常合适。2009年7月10日23:13:38<br />HTTP请求头概述 （HttpServletRequest） <br />　　 HTTP客户程序（例如浏览器），向服务器发送请求的时候必须指明请求类型（一般是GET或者POST）。如有必要，客户程序还可以选择发送其他的请求头。大多数请求头并不是必需的，但Content-Length除外。对于POST请求来说Content-Length必须出现。 <br />　下面是一些最常见的请求头 </p>
		<p>　　　Accept：浏览器可接受的MIME类型。 </p>
		<p>　　　Accept-Charset：浏览器可接受的字符集。 </p>
		<p>　　　Accept-Encoding：浏览器能够进行解码的数据编码方式，比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间。 </p>
		<p>　　　Accept-Language：浏览器所希望的语言种类，当服务器能够提供一种以上的语言版本时要用到。 </p>
		<p>　　　Authorization：授权信息，通常出现在对服务器发送的WWW-Authenticate头的应答中。 </p>
		<p>　　　Connection：表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”，或者看到请求使用的是HTTP 1.1（HTTP 1.1默认进行持久连接），它就可以利用持久连接的优点，当页面包含多个元素时（例如Applet，图片），显著地减少下载所需要的时间。要实现这一点，Servlet需要在应答中发送一个Content-Length头，最简单的实现方法是：先把内容写入 ByteArrayOutputStream，然后在正式写出内容之前计算它的大小。 </p>
		<p>　　　Content-Length：表示请求消息正文的长度。 </p>
		<p>　　　Cookie：这是最重要的请求头信息之一</p>
		<p>　　　From：请求发送者的email地址，由一些特殊的Web客户程序使用，浏览器不会用到它。 </p>
		<p>　　　Host：初始URL中的主机和端口。 </p>
		<p>　　　If-Modified-Since：只有当所请求的内容在指定的日期之后又经过修改才返回它，否则返回304“Not Modified”应答。 </p>
		<p>　　　Pragma：指定“no-cache”值表示服务器必须返回一个刷新后的文档，即使它是代理服务器而且已经有了页面的本地拷贝。 </p>
		<p>　　　Referer：包含一个URL，用户从该URL代表的页面出发访问当前请求的页面。 </p>
		<p>　　　User-Agent：浏览器类型，如果Servlet返回的内容与浏览器类型有关则该值非常有用。 </p>
		<p>　　　UA-Pixels，UA-Color，UA-OS，UA-CPU：由某些版本的IE浏览器所发送的非标准的请求头，表示屏幕大小、颜色深度、操作系统和CPU类型。 </p>
		<p>　　有关HTTP头完整、详细的说明，请参见<a href="http://www.w3.org/Protocols/">http://www.w3.org/Protocols/</a>的HTTP规范。 </p>
		<p>HTTP应答头概述（HttpServletResponse）<br />　　 Web服务器的HTTP应答一般由以下几项构成：一个状态行，一个或多个应答头，一个空行，内容文档。设置HTTP应答头往往和设置状态行中的状态代码结合起来。例如，有好几个表示“文档位置已经改变”的状态代码都伴随着一个Location头，而401（Unauthorized）状态代码则必须伴随一个WWW-Authenticate头。 </p>
		<p>　　 然而，即使在没有设置特殊含义的状态代码时，指定应答头也是很有用的。应答头可以用来完成：设置Cookie，指定修改日期，指示浏览器按照指定的间隔刷新页面，声明文档的长度以便利用持久HTTP连接，……等等许多其他任务。 </p>
		<p>　　 设置应答头最常用的方法是HttpServletResponse的setHeader，该方法有两个参数，分别表示应答头的名字和值。和设置状态代码相似，设置应答头应该在发送任何文档内容之前进行。 </p>
		<p>　　 setDateHeader方法和setIntHeadr方法专门用来设置包含日期和整数值的应答头，前者避免了把Java时间转换为GMT时间字符串的麻烦，后者则避免了把整数转换为字符串的麻烦。 </p>
		<p>　　 HttpServletResponse还提供了许多设置</p>
		<p>setContentType：设置Content-Type头。大多数Servlet都要用到这个方法。 <br />setContentLength：设置Content-Length头。对于支持持久HTTP连接的浏览器来说，这个函数是很有用的。 <br />addCookie：设置一个Cookie（Servlet API中没有setCookie方法，因为应答往往包含多个Set-Cookie头）。 <br />另外，如上节介绍，sendRedirect方法设置状态代码302时也会设置Location头。 </p>
		<p>　　 有关HTTP头详细和完整的说明，请参见<a href="http://www.w3.org/Protocols/">http://www.w3.org/Protocols/</a>规范。 </p>
		<p>HTTP应答头 说明 <br />Allow 服务器支持哪些请求方法（如GET、POST等）。 </p>
		<p>Content-Encoding 文档的编码（Encode）方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。Java的GZIPOutputStream可以很方便地进行gzip压缩，但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。因此，Servlet应该通过查看Accept-Encoding头（即request.getHeader("Accept- Encoding")）检查浏览器是否支持gzip，为支持gzip的浏览器返回经gzip压缩的HTML页面，为其他浏览器返回普通页面。 </p>
		<p>Content-Length 表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。如果你想要利用持久连接的优势，可以把输出文档写入 ByteArrayOutputStram，完成后查看其大小，然后把该值放入Content-Length头，最后通过 byteArrayStream.writeTo(response.getOutputStream()发送内容。 </p>
		<p>Content-Type 表示后面的文档属于什么MIME类型。Servlet默认为text/plain，但通常需要显式地指定为text/html。由于经常要设置 Content-Type，因此HttpServletResponse提供了一个专用的方法setContentTyep。 </p>
		<p>Date 当前的GMT时间。你可以用setDateHeader来设置这个头以避免转换时间格式的麻烦。 </p>
		<p>Expires 应该在什么时候认为文档已经过期，从而不再缓存它？ </p>
		<p>Last-Modified 文档的最后改动时间。客户可以通过If-Modified-Since请求头提供一个日期，该请求将被视为一个条件GET，只有改动时间迟于指定时间的文档才会返回，否则返回一个304（Not Modified）状态。Last-Modified也可用setDateHeader方法来设置。 <br />Location 表示客户应当到哪里去提取文档。Location通常不是直接设置的，而是通过HttpServletResponse的sendRedirect方法，该方法同时设置状态代码为302。 </p>
		<p>Refresh 表示浏览器应该在多少时间之后刷新文档，以秒计。除了刷新当前文档之外，你还可以通过setHeader("Refresh", "5; URL=http://host/path")让浏览器读取指定的页面。注意这种功能通常是通过设置HTML页面HEAD区的&lt;META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://host/path"&gt;实现，这是因为，自动刷新或重定向对于那些不能使用CGI或Servlet的 HTML编写者十分重要。但是，对于Servlet来说，直接设置Refresh头更加方便。注意Refresh的意义是“N秒之后刷新本页面或访问指定页面”，而不是“每隔N秒刷新本页面或访问指定页面”。因此，连续刷新要求每次都发送一个Refresh头，而发送204状态代码则可以阻止浏览器继续刷新，不管是使用Refresh头还是&lt;META HTTP-EQUIV="Refresh" ...&gt;。注意Refresh头不属于HTTP 1.1正式规范的一部分，而是一个扩展，但Netscape和IE都支持它。 </p>
		<p>Server 服务器名字。Servlet一般不设置这个值，而是由Web服务器自己设置。 </p>
		<p>Set-Cookie 设置和页面关联的Cookie。Servlet不应使用response.setHeader("Set-Cookie", ...)，而是应使用HttpServletResponse提供的专用方法addCookie。参见下文有关Cookie设置的讨论。 </p>
		<p>WWW-Authenticate 客户应该在Authorization头中提供什么类型的授权信息？在包含401（Unauthorized）状态行的应答中这个头是必需的。例如，response.setHeader("WWW-Authenticate", "BASIC realm=\"executives\"")。注意Servlet一般不进行这方面的处理，而是让Web服务器的专门机制来控制受密码保护页面的访问（例如.htaccess）。</p>
		<p>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/gideal_wang/archive/2009/07/10/4338646.aspx">http://blog.csdn.net/gideal_wang/archive/2009/07/10/4338646.aspx</a><br /></p>
<img src ="http://www.blogjava.net/jzone/aggbug/277464.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-05-23 11:24 <a href="http://www.blogjava.net/jzone/articles/277464.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>回忆 MVC</title><link>http://www.blogjava.net/jzone/articles/277460.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sat, 23 May 2009 03:18:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/277460.html</guid><wfw:comment>http://www.blogjava.net/jzone/comments/277460.html</wfw:comment><comments>http://www.blogjava.net/jzone/articles/277460.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jzone/comments/commentRss/277460.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jzone/services/trackbacks/277460.html</trackback:ping><description><![CDATA[今天外面的雨在狂飙，从凌晨飙到现在，似乎还没有停的意思，刚起来，不知怎么地想起来查一下MVC，太经典的一个模式了，现在基本上对我来说就没用了，可不能忘了，于是乎从网上找点资料，结合自己的理解，给记录下来，O(&#8745;_&#8745;)O~，要是真给忘了那就划不来了。<br />
网络上说的五花八门的，我就按照我目前所理解的谈吧。多了我也谈不了&#183;&#183;&#183;&#183;<br />
<br />
MVC就是我们常说的Model2，在设计模式中，要求在Apllication开发中把商务逻辑、界面显示、数据分离。<br />
&nbsp;&nbsp;&nbsp; Model，View，Controller<br />
使用java开发Web Application有几种符合MVC设计模式的开发方式：<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;V + C + M&gt;<br />
1.Jsp + servlet + javaBean(EJB)<br />
2.Jsp + javaBean + javaBean&nbsp; &lt;没用过&gt;<br />
4.Jsp + Struts + javaBean(EJB)<br />
<br />
2009-6-13 22:40:16，本来是从网上找文件上传下载的，看到这篇文章挺简练的，摘下来：<a href="http://lylyb.javaeye.com/blog/166557"    target="_blank">http://lylyb.javaeye.com/blog/166557</a> <br />
MVC英文即Model-View-Controller，即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式进行分离，这样一个应用被分成三个层——模型层、视图层、控制层。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 视图(View)代表用户交互界面，对于Web应用来说，可以概括为HTML界面，但有可能为XHTML、XML和Applet。随着应用的复杂性和规模性，界面的处理也变得具有挑战性。一个应用可能有很多不同的视图，MVC设计模式对于视图的处理仅限于视图上数据的采集和处理，以及用户的请求，而不包括在视图上的业务流程的处理。业务流程的处理交予模型(Model)处理。比如一个订单的视图只接受来自模型的数据并显示给用户，以及将用户界面的输入数据和请求传递给控制和模型。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 模型(Model)：就是业务流程/状态的处理以及业务规则的制定。业务流程的处理过程对其它层来说是黑箱操作，模型接受视图请求的数据，并返回最终的处理结果。业务模型的设计可以说是MVC最主要的核心。目前流行的EJB模型就是一个典型的应用例子，它从应用技术实现的角度对模型做了进一步的划分，以便充分利用现有的组件，但它不能作为应用设计模型的框架。它仅仅告诉你按这种模型设计就可以利用某些技术组件，从而减少了技术上的困难。对一个开发者来说，就可以专注于业务模型的设计。MVC设计模式告诉我们，把应用的模型按一定的规则抽取出来，抽取的层次很重要，这也是判断开发人员是否优秀的设计依据。抽象与具体不能隔得太远，也不能太近。MVC并没有提供模型的设计方法，而只告诉你应该组织管理这些模型，以便于模型的重构和提高重用性。我们可以用对象编程来做比喻，MVC定义了一个顶级类，告诉它的子类你只能做这些，但没法限制你能做这些。这点对编程的开发人员非常重要。 <br />
&nbsp;&nbsp;&nbsp;&nbsp; 业务模型还有一个很重要的模型那就是数据模型。数据模型主要指实体对象的数据 保存（持续化）。比如将一张订单保存到数据库，从数据库获取订单。我们可以将这个模型单独列出，所有有关数据库的操作只限制在该模型中。 <br />
　　控制(Controller)可以理解为从用户接收请求, 将模型与视图匹配在一起，共同完成用户的请求。划分控制层的作用也很明显，它清楚地告诉你，它就是一个分发器，选择什么样的模型，选择什么样的视图，可以完成什么样的用户请求。控制层并不做任何的数据处理。例如，用户点击一个连接，控制层接受请求后, 并不处理业务信息，它只把用户的信息传递给模型，告诉模型做什么，选择符合要求的视图返回给用户。因此，一个模型可能对应多个视图，一个视图可能对应多个模型。 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 模型、视图与控制器的分离，使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据，所有其它依赖于这些数据的视图都应反映到这些变化。因此，无论何时发生了何种数据变化，控制器都会将变化通知所有的视图，导致显示的更新。 <br />
<br />
<br />
<br />
<br /><img src ="http://www.blogjava.net/jzone/aggbug/277460.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-05-23 11:18 <a href="http://www.blogjava.net/jzone/articles/277460.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>