﻿<?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-mashiguang-随笔分类-java web开发</title><link>http://www.blogjava.net/mashiguang/category/23890.html</link><description>小马快跑</description><language>zh-cn</language><lastBuildDate>Wed, 21 Nov 2012 10:59:41 GMT</lastBuildDate><pubDate>Wed, 21 Nov 2012 10:59:41 GMT</pubDate><ttl>60</ttl><item><title>hello cas</title><link>http://www.blogjava.net/mashiguang/archive/2009/12/07/304958.html</link><dc:creator>mashiguang</dc:creator><author>mashiguang</author><pubDate>Mon, 07 Dec 2009 01:50:00 GMT</pubDate><guid>http://www.blogjava.net/mashiguang/archive/2009/12/07/304958.html</guid><wfw:comment>http://www.blogjava.net/mashiguang/comments/304958.html</wfw:comment><comments>http://www.blogjava.net/mashiguang/archive/2009/12/07/304958.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/mashiguang/comments/commentRss/304958.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mashiguang/services/trackbacks/304958.html</trackback:ping><description><![CDATA[&nbsp;
<h1 style="text-align: center" align="center"><span style="font-family: 宋体">使用</span>cas<span style="font-family: 宋体">做</span>sso helloword</h1>
<p><span style="font-family: 宋体">因为工作需要接触到</span>sso<span style="font-family: 宋体">，据知目前多数</span>sso<span style="font-family: 宋体">使用耶鲁的</span>cas<span style="font-family: 宋体">实现，且发现使用</span>cas<span style="font-family: 宋体">真的是很简单就可以做出一个单点登录系统来，</span>cas<span style="font-family: 宋体">还提供丰富的扩展功能，对于扩展功能日后再细细研究，这里只使用</span>cas<span style="font-family: 宋体">做一个</span>hello world<span style="font-family: 宋体">来记录本人的学习过程，如有幸被高人看到，还望指出弊病，不吝赐教。</span></p>
<p><span style="font-family: 宋体">在使用</span>cas<span style="font-family: 宋体">之前最好对数字证书有所了解，不了解也没有关系，跟着我的步骤也一样可以跑的通。</span></p>
<h2><span style="font-family: 黑体">准备工作</span></h2>
<p><span style="font-family: 宋体">需要的文件：</span></p>
<p style="margin-left: 21pt; text-indent: -21pt; tab-stops: list 21.0pt"><span style="font-family: Wingdings">&#252;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Jdk6</p>
<p style="margin-left: 21pt; text-indent: -21pt; tab-stops: list 21.0pt"><span style="font-family: Wingdings">&#252;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Tomcat</p>
<p style="margin-left: 21pt; text-indent: -21pt; tab-stops: list 21.0pt"><span style="font-family: Wingdings">&#252;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>cas-server-3.3.2</p>
<p style="margin-left: 21pt; text-indent: -21pt; tab-stops: list 21.0pt"><span style="font-family: Wingdings">&#252;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>cas-client-3.1.9</p>
<h2><span style="font-family: 黑体">证书</span></h2>
<p><span style="font-family: 宋体">下面是</span>keytool<span style="font-family: 宋体">命令的一些常用方法，先在这里认识一下它们，一会儿会用的到。</span></p>
<p><span style="font-family: 宋体">使用</span>keytool<span style="font-family: 宋体">命令生成密钥库</span></p>
<div style="border-right: windowtext 1pt solid; padding-right: 4pt; border-top: windowtext 1pt solid; padding-left: 4pt; background: #e6e6e6; padding-bottom: 1pt; border-left: windowtext 1pt solid; padding-top: 1pt; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">keytool -genkey -alias tomcat -keyalg RSA -dname "CN=pcma, OU=vanceinfo, O=vanceinfo, L=haidian, S=beijing, C=CN" -keystore c:"keystore5.jks</p>
</div>
<p>CN<span style="font-family: 宋体">：主机名</span></p>
<p>OU<span style="font-family: 宋体">：组织单位</span></p>
<p>O<span style="font-family: 宋体">：组织</span></p>
<p>L<span style="font-family: 宋体">：地区</span></p>
<p>S<span style="font-family: 宋体">：城市</span></p>
<p>C<span style="font-family: 宋体">：国家<br /><br />如果需要指定密钥有效期，添加-validity 365即可，单位是天，如：<br /></span><span style="font-family: 宋体; background-color: #c0c0c0;">keytool -genkey -alias tomcat -keyalg RSA -dname "xxxxx" -keystore xxxxx -validity 365</span><span style="font-family: 宋体"></span></p>
<p><span style="font-family: 宋体">导出证书</span></p>
<div style="border-right: windowtext 1pt solid; padding-right: 4pt; border-top: windowtext 1pt solid; padding-left: 4pt; background: #e6e6e6; padding-bottom: 1pt; border-left: windowtext 1pt solid; padding-top: 1pt; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">keytool -export -file c:/server5.crt -alias tomcat -keystore c:"keystore5.jks</p>
</div>
<p><span style="font-family: 宋体">将证书导入到客户端</span>jdk</p>
<div style="border-right: windowtext 1pt solid; padding-right: 4pt; border-top: windowtext 1pt solid; padding-left: 4pt; background: #e6e6e6; padding-bottom: 1pt; border-left: windowtext 1pt solid; padding-top: 1pt; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">keytool -import -keystore "D:"Java"jdk1.6.0_14"jre"lib"security"cacerts" -file c:/server5.crt -alias tomcat</p>
</div>
<p><span style="font-family: 宋体">从密钥库中删除指定别名的证书</span></p>
<div style="border-right: windowtext 1pt solid; padding-right: 4pt; border-top: windowtext 1pt solid; padding-left: 4pt; background: #e6e6e6; padding-bottom: 1pt; border-left: windowtext 1pt solid; padding-top: 1pt; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">keytool -delete -noprompt -alias tomcat -keystore E:"apache-tomcat-6.0.20_2"conf"keystore2.jks</p>
</div>
<p><span style="font-family: 宋体">查看密钥库中的证书</span></p>
<div style="border-right: windowtext 1pt solid; padding-right: 4pt; border-top: windowtext 1pt solid; padding-left: 4pt; background: #e6e6e6; padding-bottom: 1pt; border-left: windowtext 1pt solid; padding-top: 1pt; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">keytool -list -v -keystore c:"keystore5.jks</p>
</div>
<h2><span style="font-family: 黑体">配置</span>tomcat</h2>
<p><span style="font-family: 宋体">使用</span>keytool<span style="font-family: 宋体">命令生成密钥库。</span></p>
<p><span style="font-family: 宋体">配置</span>%tomcat_home%/conf/server.xml<span style="font-family: 宋体">使</span>tomcat<span style="font-family: 宋体">支持</span>SSL<span style="font-family: 宋体">协议，并指定密钥库。</span></p>
<div style="border-right: windowtext 1pt solid; padding-right: 4pt; border-top: windowtext 1pt solid; padding-left: 4pt; background: #e6e6e6; padding-bottom: 1pt; border-left: windowtext 1pt solid; padding-top: 1pt; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&lt;Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxThreads="150" scheme="https" secure="true"</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; clientAuth="false" sslProtocol="TLS" keystorePass="mashiguang"</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; keystoreFile="${catalina.home}/conf/keystore5.jks"/&gt;</p>
</div>
<h2><span style="font-family: 黑体">部署</span>cas server</h2>
<p><span style="font-family: 宋体">解压缩</span>cas-server-3.3.2-release.zip<span style="font-family: 宋体">文件，在</span>modules<span style="font-family: 宋体">目录里找到</span>cas-server-webapp-3.3.2.war<span style="font-family: 宋体">文件，这就是一个做好了的</span>cas<span style="font-family: 宋体">服务端，我们做的</span>sso helloword<span style="font-family: 宋体">可以直接使用，只需把</span>cas-server-webapp-3.3.2.war<span style="font-family: 宋体">改了个简单点的名字，如</span>cas.war<span style="font-family: 宋体">，然后部署到</span>tomcat<span style="font-family: 宋体">即可。</span></p>
<p><span style="font-family: 宋体">浏览器访问</span><a href="https://pcma:8443/cas">https://pcma:8443/cas</a><span style="font-family: 宋体">，如果打开显示的是</span>cas<span style="font-family: 宋体">默认的登录页面，则表示服务端已部署完毕。</span></p>
<h2><span style="font-family: 黑体">客户端使用</span>cas client</h2>
<p><span style="font-family: 宋体">新建两个</span>web<span style="font-family: 宋体">工程，用于模拟单点登录系统中的客户端，并将</span>cas-client-3.1.9"modules<span style="font-family: 宋体">里的</span>jar<span style="font-family: 宋体">包放到</span>web<span style="font-family: 宋体">工程</span>lib<span style="font-family: 宋体">目录下，是主要的是</span>cas-client-core-3.1.9.jar<span style="font-family: 宋体">文件，把</span>spring2.5<span style="font-family: 宋体">也放到</span>lib<span style="font-family: 宋体">目录下。</span></p>
<p>Web.xml<span style="font-family: 宋体">文件</span></p>
<div style="border-right: windowtext 1pt solid; padding-right: 4pt; border-top: windowtext 1pt solid; padding-left: 4pt; background: #e6e6e6; padding-bottom: 1pt; border-left: windowtext 1pt solid; padding-top: 1pt; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&lt;web-app version="2.4" </p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns="http://java.sun.com/xml/ns/j2ee" </p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" </p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee </p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"&gt;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;context-param&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /WEB-INF/config/casContext.xml&nbsp;&nbsp; </p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/param-value&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp; &lt;/context-param&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp; &lt;listener&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;listener-class&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; org.springframework.web.context.ContextLoaderListener&nbsp;&nbsp; </p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/listener-class&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp; &lt;/listener&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp; &lt;!-- <span style="font-family: 宋体">负责用户认证</span> --&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp; &lt;filter&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;CAS Authentication Filter&lt;/filter-name&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;org.jasig.cas.client.authentication.AuthenticationFilter&lt;/filter-class&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- CAS login <span style="font-family: 宋体">服务地址</span>--&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;casServerLoginUrl&lt;/param-name&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;https://pcma:8443/cas/login&lt;/param-value&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;renew&lt;/param-name&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;false&lt;/param-value&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&lt;/init-param&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;gateway&lt;/param-name&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;false&lt;/param-value&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- <span style="font-family: 宋体">客户端应用服务地址</span>--&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;serverName&lt;/param-name&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;http://pcma:8081&lt;/param-value&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp; &lt;/filter&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp; &lt;!--<span style="font-family: 宋体">负责</span>Ticket<span style="font-family: 宋体">校验</span>--&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp; &lt;filter&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;CAS Validation Filter&lt;/filter-name&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;org.springframework.web.filter.DelegatingFilterProxy&lt;/filter-class&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;targetBeanName&lt;/param-name&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;cas.validationfilter&lt;/param-value&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp; &lt;/filter&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp; &lt;filter-mapping&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;CAS Authentication Filter&lt;/filter-name&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp; &lt;/filter-mapping&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp; &lt;filter-mapping&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;filter-name&gt;CAS Validation Filter&lt;/filter-name&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp; &lt;/filter-mapping&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&lt;/web-app&gt;</p>
</div>
<p>casContext.xml<span style="font-family: 宋体">文件</span></p>
<div style="border-right: windowtext 1pt solid; padding-right: 4pt; border-top: windowtext 1pt solid; padding-left: 4pt; background: #e6e6e6; padding-bottom: 1pt; border-left: windowtext 1pt solid; padding-top: 1pt; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "http://www.springframework.org/dtd/spring-beans.dtd"&gt;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&lt;beans&gt;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&lt;bean id="cas.validationfilter" class="org.jasig.cas.client.validation.Cas10TicketValidationFilter"&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="ticketValidator"&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref bean="cas10TicketValidator"/&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="useSession"&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;true&lt;/value&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- <span style="font-family: 宋体">客户端应用服务地址</span>--&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="serverName"&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;http://pcma:8081&lt;/value&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="redirectAfterValidation"&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;true&lt;/value&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp; &lt;/bean&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp; &lt;bean id="cas10TicketValidator" class="org.jasig.cas.client.validation.Cas10TicketValidator"&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp; &lt;!-- <span style="font-family: 宋体">这里参数是</span>cas<span style="font-family: 宋体">服务器的地址</span>--&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constructor-arg index="0" value="https://pcma:8443/cas" /&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp;&nbsp; &lt;/bean&gt;&nbsp;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&lt;/beans&gt;&nbsp;</p>
</div>
<p><span style="font-family: 宋体">新建</span>index.jsp<span style="font-family: 宋体">文件</span></p>
<div style="border-right: windowtext 1pt solid; padding-right: 4pt; border-top: windowtext 1pt solid; padding-left: 4pt; background: #e6e6e6; padding-bottom: 1pt; border-left: windowtext 1pt solid; padding-top: 1pt; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&lt;body&gt;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp; hello sso&lt;br&gt;</p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&nbsp; &lt;a href="http://192.168.29.131:8080/sso2"&gt;sso2&lt;/a&gt;<span style="font-family: 宋体">这个地址是另外一台机器上的</span>sso<span style="font-family: 宋体">客户端</span></p>
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none">&nbsp;&lt;/body&gt;</p>
</div>
<p><span style="font-family: 宋体">上面的</span>web.xml<span style="font-family: 宋体">、</span>casContext.xml<span style="font-family: 宋体">、</span>index.jsp<span style="font-family: 宋体">是两个客户端中的一个，另一个要根据实际情况修改。</span></p>
<p><span style="font-family: 宋体">最后不要忘记客户端的</span>jdk<span style="font-family: 宋体">要使用</span>keytool<span style="font-family: 宋体">命令导入证书文件。</span></p>
<h2><span style="font-family: 黑体">测试</span></h2>
<p><span style="font-family: 宋体">启动</span>tomcat<span style="font-family: 宋体">，测试器访问</span><a href="http://pcma:8081/sso">http://pcma:8081/sso</a><span style="font-family: 宋体">，出现</span>cas<span style="font-family: 宋体">登录页面，输入相同的用户名和密码即可登录，登录成功后页面自动跳转回</span><a href="http://pcma:8081/sso">http://pcma:8081/sso</a><span style="font-family: 宋体">，这时点击页面上的</span>sso2<span style="font-family: 宋体">链接，就可以自动登录并跳转到</span>sso2<span style="font-family: 宋体">应用。</span></p>
<p><span style="font-family: 宋体">如果输入用户名密码后提示下面的异常，是因为部署客户端的</span>jdk<span style="font-family: 宋体">没有导入证书文件的原因。</span></p>
<div style="border-right: windowtext 1pt solid; padding-right: 4pt; border-top: windowtext 1pt solid; padding-left: 4pt; background: #e6e6e6; padding-bottom: 1pt; border-left: windowtext 1pt solid; padding-top: 1pt; border-bottom: windowtext 1pt solid">
<p style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 0cm; background: #e6e6e6; padding-bottom: 0cm; border-left: medium none; padding-top: 0cm; border-bottom: medium none"><span style="color: black">javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target</span></p>
</div>
<p><span style="font-family: 黑体"><br />
源码<br />
<br />
<a href="http://www.blogjava.net/Files/mashiguang/sso.zip">http://www.blogjava.net/Files/mashiguang/sso.zip</a></span></p><img src ="http://www.blogjava.net/mashiguang/aggbug/304958.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mashiguang/" target="_blank">mashiguang</a> 2009-12-07 09:50 <a href="http://www.blogjava.net/mashiguang/archive/2009/12/07/304958.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jndi调用时,各种应用服务器InitialContext的写法</title><link>http://www.blogjava.net/mashiguang/archive/2008/07/14/214758.html</link><dc:creator>mashiguang</dc:creator><author>mashiguang</author><pubDate>Mon, 14 Jul 2008 08:35:00 GMT</pubDate><guid>http://www.blogjava.net/mashiguang/archive/2008/07/14/214758.html</guid><wfw:comment>http://www.blogjava.net/mashiguang/comments/214758.html</wfw:comment><comments>http://www.blogjava.net/mashiguang/archive/2008/07/14/214758.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/mashiguang/comments/commentRss/214758.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mashiguang/services/trackbacks/214758.html</trackback:ping><description><![CDATA[<p><br />
调用ejb时,如果客户端和ejb不在同一个jvm,就要设置InitialContext,不同的应用服务器InitialContext写法也不同.<br />
Context.INITIAL_CONTEXT_FACTORY:指定到目录服务的连接工厂<br />
Context.PROVIDER_URL:目录服务提供者URL</p>
<p>//jboss:<br />
Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"<br />
Context.URL_PKG_PREFIXES, "org.jboss.naming"<br />
Context.PROVIDER_URL, "localhost:1099"</p>
<p>//weblogic:<br />
Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"<br />
Context.PROVIDER_URL, "t3://localhost:7001"</p>
<p>//apusic(金蝶):<br />
Context.INITIAL_CONTEXT_FACTORY, "com.apusic.jndi.InitialContextFactory"<br />
Context.PROVIDER_URL, "rmi://localhost:6888"</p>
<p>//WebSphere:<br />
Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory"<br />
Context.PROVIDER_URL, "iiop://localhost:900"</p>
<p><br />
//J2EE&nbsp; SDK(J2EE&nbsp; RI):<br />
Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.cosnaming.CNCtxFactory"<br />
Context.PROVIDER_URL, "iiop://127.0.0.1:1050"</p>
<p>//SilverStream:<br />
Context.INITIAL_CONTEXT_FACTORY, "com.sssw.rt.jndi.AgInitCtxFactory"<br />
Context.PROVIDER_URL, "sssw://localhost:80"</p>
<p>//OC4J:<br />
Context.INITIAL_CONTEXT_FACTORY, "com.evermind.server.rmi.RMIInitialContextFactory"<br />
Context.PROVIDER_URL, "ormi://127.0.0.1/"</p>
<p>//WAS5:<br />
Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory"<br />
Context.PROVIDER_URL, "iiop://localhost:2809"</p>
<p>&nbsp;</p>
<p>常用JNDI服务提供者连接工厂:<br />
Filesystem:&nbsp;&nbsp;Com.sun.jndi.fscontext.FSContextFactory或者com.sun.jndi.fscontext.RefFSContextFactory<br />
LDAPv3:&nbsp;&nbsp;&nbsp;&nbsp;Com.sun.jndi.ldap.LdapCtxFactory<br />
NDS:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;com.novell.naming.service.nds.NdsInitialContextFactory<br />
NIS:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;com.sun.jndi.nis.NISCtxFactory<br />
RMI registry:&nbsp;com.sun.jndi.rmi.registry.RegistryContextFactory<br />
IBM LDAP服务提供者:&nbsp;&nbsp;&nbsp;com.ibm.jndi.LDAPCtxFactory<br />
BEA 名字服务提供者:&nbsp;&nbsp;&nbsp;weblogic.jndi.WLInitialContextFactory<br />
JBOSS名字服务提供者:&nbsp;&nbsp;org.jnp.interfaces.NamingContextFactory</p>
<img src ="http://www.blogjava.net/mashiguang/aggbug/214758.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mashiguang/" target="_blank">mashiguang</a> 2008-07-14 16:35 <a href="http://www.blogjava.net/mashiguang/archive/2008/07/14/214758.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java自动打包的差异</title><link>http://www.blogjava.net/mashiguang/archive/2007/12/13/167549.html</link><dc:creator>mashiguang</dc:creator><author>mashiguang</author><pubDate>Thu, 13 Dec 2007 09:03:00 GMT</pubDate><guid>http://www.blogjava.net/mashiguang/archive/2007/12/13/167549.html</guid><wfw:comment>http://www.blogjava.net/mashiguang/comments/167549.html</wfw:comment><comments>http://www.blogjava.net/mashiguang/archive/2007/12/13/167549.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/mashiguang/comments/commentRss/167549.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mashiguang/services/trackbacks/167549.html</trackback:ping><description><![CDATA[自JDK1.0开始就存在包装器类,但是在JDK5.0之前,必须手工地插入打包和拆包的代码.<br />
JDK5.0中就有了自动打包功能,但在5.0中自动打包时存在一些差异,刚才看《java核心技术第7版》时才发现.<br />
<br />
<span style="color: #ff0000">代码1:<br />
</span>
<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">Integer&nbsp;a</span><span style="color: #000000">=</span><span style="color: #000000">1000</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Integer&nbsp;b</span><span style="color: #000000">=</span><span style="color: #000000">1000</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />System.out.println(a</span><span style="color: #000000">==</span><span style="color: #000000">b);</span><span style="color: #008000">//</span><span style="color: #008000">false</span></div>
<span style="color: #ff0000">代码2:</span><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: #000000">Integer&nbsp;a</span><span style="color: #000000">=</span><span style="color: #000000">100</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Integer&nbsp;b</span><span style="color: #000000">=</span><span style="color: #000000">100</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />System.out.println(a</span><span style="color: #000000">==</span><span style="color: #000000">b);</span><span style="color: #008000">//</span><span style="color: #008000">true</span></div>
<span style="color: #ff0000">代码3:</span><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: #000000">Integer&nbsp;a</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Integer(</span><span style="color: #000000">100</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Integer&nbsp;b</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Integer(</span><span style="color: #000000">100</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />System.out.println(a</span><span style="color: #000000">==</span><span style="color: #000000">b);</span><span style="color: #008000">//</span><span style="color: #008000">false</span></div>
<br />
<p>第一段代码不成立,而第二段代码成立的原因是:自动打包<br />
<span style="color: #ff0000">自动打包规范要求boolean,byte,char&#8804;127,介于-128&#8594;127之间的short和int被包装到固定的对象中.</span><br />
打包和拆包是编译器认可的，而不是虚拟机，编译器在生成类的字节码时，插入必要的方法调用，虚拟机只是执行这些字节码。</p>
<p>第三段代码不用多说肯定不成立.</p>
<p>&nbsp;</p>
 <img src ="http://www.blogjava.net/mashiguang/aggbug/167549.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mashiguang/" target="_blank">mashiguang</a> 2007-12-13 17:03 <a href="http://www.blogjava.net/mashiguang/archive/2007/12/13/167549.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ant打ear包的详细步骤</title><link>http://www.blogjava.net/mashiguang/archive/2007/11/24/162758.html</link><dc:creator>mashiguang</dc:creator><author>mashiguang</author><pubDate>Fri, 23 Nov 2007 16:44:00 GMT</pubDate><guid>http://www.blogjava.net/mashiguang/archive/2007/11/24/162758.html</guid><wfw:comment>http://www.blogjava.net/mashiguang/comments/162758.html</wfw:comment><comments>http://www.blogjava.net/mashiguang/archive/2007/11/24/162758.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/mashiguang/comments/commentRss/162758.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mashiguang/services/trackbacks/162758.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 用一个简单的ejb3.0示例记录ant打ear包的过程源码下载环境:apache-ant-1.6.5jboss-4.2.1.GAjboss-annotations-ejb3.jarjboss-ejb3.jarjboss-ejb3x.jar最后三个包在jboss里有.1,建ejb3.0项目session bean接口:HelloWorldpub...&nbsp;&nbsp;<a href='http://www.blogjava.net/mashiguang/archive/2007/11/24/162758.html'>阅读全文</a><img src ="http://www.blogjava.net/mashiguang/aggbug/162758.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mashiguang/" target="_blank">mashiguang</a> 2007-11-24 00:44 <a href="http://www.blogjava.net/mashiguang/archive/2007/11/24/162758.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>apache commons-email</title><link>http://www.blogjava.net/mashiguang/archive/2007/11/01/157533.html</link><dc:creator>mashiguang</dc:creator><author>mashiguang</author><pubDate>Thu, 01 Nov 2007 08:51:00 GMT</pubDate><guid>http://www.blogjava.net/mashiguang/archive/2007/11/01/157533.html</guid><wfw:comment>http://www.blogjava.net/mashiguang/comments/157533.html</wfw:comment><comments>http://www.blogjava.net/mashiguang/archive/2007/11/01/157533.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/mashiguang/comments/commentRss/157533.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mashiguang/services/trackbacks/157533.html</trackback:ping><description><![CDATA[<p><strong>使用commons mail时需要的jar包:</strong><br />
1,commons-email-1.1.jar<br />
2,mail.jar<br />
3,activation.jar<br />
(在web应用里只需要commons-email包)</p>
<p><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 alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">SimpleEmail&nbsp;email&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SimpleEmail();<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" />email.setHostName(</span><span style="color: #000000">"</span><span style="color: #000000">smtp.sina.com</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />email.setAuthentication(</span><span style="color: #000000">"</span><span style="color: #000000">username</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">password</span><span style="color: #000000">"</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">在邮件服务商处注册的用户名和密码</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">email.addTo(</span><span style="color: #000000">"</span><span style="color: #000000">mailTo@163.com</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />email.setFrom(</span><span style="color: #000000">"</span><span style="color: #000000">username@sina.com</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">alias</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" />email.setCharset(</span><span style="color: #000000">"</span><span style="color: #000000">UTF-8</span><span style="color: #000000">"</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">gbk或gb2312,只要支持中文就行</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">email.setSubject(</span><span style="color: #000000">"</span><span style="color: #000000">title</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />email.setMsg(</span><span style="color: #000000">"</span><span style="color: #000000">content</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />email.send();</span></div>
<br />
<strong>发送带附件的邮件:</strong><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: #008000">//</span><span style="color: #008000">&nbsp;Create&nbsp;the&nbsp;attachment</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">EmailAttachment&nbsp;attachment&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;EmailAttachment();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />attachment.setPath(</span><span style="color: #000000">"</span><span style="color: #000000">mypictures/john.jpg</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />attachment.setDisposition(EmailAttachment.ATTACHMENT);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />attachment.setDescription(</span><span style="color: #000000">"</span><span style="color: #000000">Picture&nbsp;of&nbsp;John</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />attachment.setName(</span><span style="color: #000000">"</span><span style="color: #000000">John</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: #008000">//</span><span style="color: #008000">&nbsp;Create&nbsp;the&nbsp;email&nbsp;message</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">MultiPartEmail&nbsp;email&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MultiPartEmail();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />email.setHostName(</span><span style="color: #000000">"</span><span style="color: #000000">mail.myserver.com</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />email.setAuthentication(</span><span style="color: #000000">"</span><span style="color: #000000">username</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">password</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />email.addTo(</span><span style="color: #000000">"</span><span style="color: #000000">jdoe@somewhere.org</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">John&nbsp;Doe</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />email.setFrom(</span><span style="color: #000000">"</span><span style="color: #000000">me@apache.org</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Me</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />email.setCharset(</span><span style="color: #000000">"</span><span style="color: #000000">UTF-8</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />email.setSubject(</span><span style="color: #000000">"</span><span style="color: #000000">The&nbsp;picture</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />email.setMsg(</span><span style="color: #000000">"</span><span style="color: #000000">Here&nbsp;is&nbsp;the&nbsp;picture&nbsp;you&nbsp;wanted</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: #008000">//</span><span style="color: #008000">&nbsp;add&nbsp;the&nbsp;attachment</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">email.attach(attachment);<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">&nbsp;send&nbsp;the&nbsp;email</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">email.send();</span></div>
<br />
<p>创建多个EmailAttachment对象,并调用MultiPartEmail.attach();就可以发送多个附件.</p>
<p><strong>发送HTML格式的邮件:</strong></p>
<p>发送html格式的邮件和简单邮件的区别就在创建HtmlEmail对象<br />
并用email.setHtmlMsg(String)或email.setMsg(String)把含有html标签的字符串赋给email对象.<br />
HtmlEmail对象还有一个setTextMsg(String)方法,这个方法参数里的html标签会被当做普通字符处理,不会被解析成html元素.<br />
更详细内容可以看<a href="http://commons.apache.org/email/userguide.html">apache commons-email的用户指南</a>.</p>
<img src ="http://www.blogjava.net/mashiguang/aggbug/157533.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mashiguang/" target="_blank">mashiguang</a> 2007-11-01 16:51 <a href="http://www.blogjava.net/mashiguang/archive/2007/11/01/157533.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>&lt;转&gt;,防止刷新/后退引起的重复提交问题的Java Token代码，非Struts</title><link>http://www.blogjava.net/mashiguang/archive/2007/08/21/138324.html</link><dc:creator>mashiguang</dc:creator><author>mashiguang</author><pubDate>Tue, 21 Aug 2007 03:45:00 GMT</pubDate><guid>http://www.blogjava.net/mashiguang/archive/2007/08/21/138324.html</guid><wfw:comment>http://www.blogjava.net/mashiguang/comments/138324.html</wfw:comment><comments>http://www.blogjava.net/mashiguang/archive/2007/08/21/138324.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/mashiguang/comments/commentRss/138324.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mashiguang/services/trackbacks/138324.html</trackback:ping><description><![CDATA[<p>贴子转自<a href="http://hi.baidu.com/bobylou">http://hi.baidu.com/bobylou</a>，转之前并没有验证文章里的方法是不是有效，估计原作者把它放到blog之前应该做过测试了吧。<br><br></p>
<p><strong>Struts</strong>本身有一套完善的<strong>防止重复提交表单</strong>的<strong>Token</strong>(<strong>令牌</strong>)机制，但笔者目前的项目自写的framework没有用到Struts，故也得自写防止用户因为后退或者刷新来重复提交表单内容的Token机制。不难，容易实现。</p>
<p>实现原理：一致性。jsp生成表单时，在表单中插入一个隐藏&lt;input&gt;字段，该字段就是保存在页面端的token字符串，同时把该字符串存入session中。等到用户提交表单时，会一并提交该隐藏的token字符串。在服务器端，查看下是否在session中含有与该token字符串相等的字符串。如果有，那么表明是第一次提交该表单，然后删除存放于session端的token字符串，再做正常业务逻辑流程；如果没有，那么表示该表单被重复提交，做非正常流程处理，可以警告提示也可以什么也不做。</p>
<p>看代码。</p>
<p>首先是<strong><font color=#ff0000>Token主类</font></strong>。类很简单，而且主要方法都给doc注释了</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_0_109_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_109_Open_Text.style.display='none'; Codehighlighter1_0_109_Closed_Image.style.display='inline'; Codehighlighter1_0_109_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_0_109_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_109_Closed_Text.style.display='none'; Codehighlighter1_0_109_Open_Image.style.display='inline'; Codehighlighter1_0_109_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span id=Codehighlighter1_0_109_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_0_109_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>*&nbsp;blog:&nbsp;</span><span style="COLOR: #008000; TEXT-DECORATION: underline">http://hi.baidu.com/bobylou</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>*&nbsp;$Revision:&nbsp;1.1&nbsp;$<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>*&nbsp;$Date:&nbsp;2007/07/18&nbsp;10:02:55&nbsp;$<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>*&nbsp;$Author:&nbsp;bobrow$<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #008000">*/</span></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></span><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000">&nbsp;com.paizuo.framework.util;<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></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.ArrayList;<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></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;javax.servlet.http.HttpSession;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_236_2234_Open_Image onclick="this.style.display='none'; Codehighlighter1_236_2234_Open_Text.style.display='none'; Codehighlighter1_236_2234_Closed_Image.style.display='inline'; Codehighlighter1_236_2234_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_236_2234_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_236_2234_Closed_Text.style.display='none'; Codehighlighter1_236_2234_Open_Image.style.display='inline'; Codehighlighter1_236_2234_Open_Text.style.display='inline';" 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;Token&nbsp;</span><span id=Codehighlighter1_236_2234_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_236_2234_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img 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">final</span><span style="COLOR: #000000">&nbsp;String&nbsp;TOKEN_LIST_NAME&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">tokenList</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img 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;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000">&nbsp;String&nbsp;TOKEN_STRING_NAME&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">token</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_427_714_Open_Image onclick="this.style.display='none'; Codehighlighter1_427_714_Open_Text.style.display='none'; Codehighlighter1_427_714_Closed_Image.style.display='inline'; Codehighlighter1_427_714_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_427_714_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_427_714_Closed_Text.style.display='none'; Codehighlighter1_427_714_Open_Image.style.display='inline'; Codehighlighter1_427_714_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;ArrayList&nbsp;getTokenList(HttpSession&nbsp;session)&nbsp;</span><span id=Codehighlighter1_427_714_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_427_714_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;obj&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;session.getAttribute(TOKEN_LIST_NAME);<br><img id=Codehighlighter1_512_555_Open_Image onclick="this.style.display='none'; Codehighlighter1_512_555_Open_Text.style.display='none'; Codehighlighter1_512_555_Closed_Image.style.display='inline'; Codehighlighter1_512_555_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_512_555_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_512_555_Closed_Text.style.display='none'; Codehighlighter1_512_555_Open_Image.style.display='inline'; Codehighlighter1_512_555_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(obj&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_512_555_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_512_555_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;(ArrayList)&nbsp;obj;<br><img id=Codehighlighter1_562_708_Open_Image onclick="this.style.display='none'; Codehighlighter1_562_708_Open_Text.style.display='none'; Codehighlighter1_562_708_Closed_Image.style.display='inline'; Codehighlighter1_562_708_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_562_708_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_562_708_Closed_Text.style.display='none'; Codehighlighter1_562_708_Open_Image.style.display='inline'; Codehighlighter1_562_708_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&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 id=Codehighlighter1_562_708_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_562_708_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList&nbsp;tokenList&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 src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.setAttribute(TOKEN_LIST_NAME,&nbsp;tokenList);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;tokenList;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&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>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_795_942_Open_Image onclick="this.style.display='none'; Codehighlighter1_795_942_Open_Text.style.display='none'; Codehighlighter1_795_942_Closed_Image.style.display='inline'; Codehighlighter1_795_942_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_795_942_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_795_942_Closed_Text.style.display='none'; Codehighlighter1_795_942_Open_Image.style.display='inline'; Codehighlighter1_795_942_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;saveTokenString(String&nbsp;tokenStr,&nbsp;HttpSession&nbsp;session)&nbsp;</span><span id=Codehighlighter1_795_942_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_795_942_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList&nbsp;tokenList&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;getTokenList(session);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tokenList.add(tokenStr);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.setAttribute(TOKEN_LIST_NAME,&nbsp;tokenList);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;<br><img id=Codehighlighter1_995_1064_Open_Image onclick="this.style.display='none'; Codehighlighter1_995_1064_Open_Text.style.display='none'; Codehighlighter1_995_1064_Closed_Image.style.display='inline'; Codehighlighter1_995_1064_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_995_1064_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_995_1064_Closed_Text.style.display='none'; Codehighlighter1_995_1064_Open_Image.style.display='inline'; Codehighlighter1_995_1064_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;String&nbsp;generateTokenString()</span><span id=Codehighlighter1_995_1064_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_995_1064_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Long(System.currentTimeMillis()).toString();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_1071_1331_Open_Image onclick="this.style.display='none'; Codehighlighter1_1071_1331_Open_Text.style.display='none'; Codehighlighter1_1071_1331_Closed_Image.style.display='inline'; Codehighlighter1_1071_1331_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1071_1331_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1071_1331_Closed_Text.style.display='none'; Codehighlighter1_1071_1331_Open_Image.style.display='inline'; Codehighlighter1_1071_1331_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1071_1331_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_1071_1331_Open_Text><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Generate&nbsp;a&nbsp;token&nbsp;string,&nbsp;and&nbsp;save&nbsp;the&nbsp;string&nbsp;in&nbsp;session,&nbsp;then&nbsp;return&nbsp;the&nbsp;token&nbsp;string.<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000">&nbsp;HttpSession<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: #808080">@return</span><span style="COLOR: #008000">&nbsp;a&nbsp;token&nbsp;string&nbsp;used&nbsp;for&nbsp;enforcing&nbsp;a&nbsp;single&nbsp;request&nbsp;for&nbsp;a&nbsp;particular&nbsp;transaction.<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_1394_1515_Open_Image onclick="this.style.display='none'; Codehighlighter1_1394_1515_Open_Text.style.display='none'; Codehighlighter1_1394_1515_Closed_Image.style.display='inline'; Codehighlighter1_1394_1515_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1394_1515_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1394_1515_Closed_Text.style.display='none'; Codehighlighter1_1394_1515_Open_Image.style.display='inline'; Codehighlighter1_1394_1515_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;String&nbsp;getTokenString(HttpSession&nbsp;session)&nbsp;</span><span id=Codehighlighter1_1394_1515_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_1394_1515_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;tokenStr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;generateTokenString();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saveTokenString(tokenStr,&nbsp;session);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;tokenStr;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_1522_1872_Open_Image onclick="this.style.display='none'; Codehighlighter1_1522_1872_Open_Text.style.display='none'; Codehighlighter1_1522_1872_Closed_Image.style.display='inline'; Codehighlighter1_1522_1872_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1522_1872_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1522_1872_Closed_Text.style.display='none'; Codehighlighter1_1522_1872_Open_Image.style.display='inline'; Codehighlighter1_1522_1872_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1522_1872_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_1522_1872_Open_Text><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;check&nbsp;whether&nbsp;token&nbsp;string&nbsp;is&nbsp;valid.&nbsp;if&nbsp;session&nbsp;contains&nbsp;the&nbsp;token&nbsp;string,&nbsp;return&nbsp;true.&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;otherwise,&nbsp;return&nbsp;false.<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000">&nbsp;String<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tokenStr<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000">&nbsp;HttpSession<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: #808080">@return</span><span style="COLOR: #008000">&nbsp;true:&nbsp;session&nbsp;contains&nbsp;tokenStr;&nbsp;false:&nbsp;session&nbsp;is&nbsp;null&nbsp;or&nbsp;tokenStr&nbsp;is&nbsp;id&nbsp;not&nbsp;in&nbsp;session<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_1957_2232_Open_Image onclick="this.style.display='none'; Codehighlighter1_1957_2232_Open_Text.style.display='none'; Codehighlighter1_1957_2232_Closed_Image.style.display='inline'; Codehighlighter1_1957_2232_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1957_2232_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1957_2232_Closed_Text.style.display='none'; Codehighlighter1_1957_2232_Open_Image.style.display='inline'; Codehighlighter1_1957_2232_Open_Text.style.display='inline';" 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">boolean</span><span style="COLOR: #000000">&nbsp;isTokenStringValid(String&nbsp;tokenStr,&nbsp;HttpSession&nbsp;session)&nbsp;</span><span id=Codehighlighter1_1957_2232_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_1957_2232_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">boolean</span><span style="COLOR: #000000">&nbsp;valid&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br><img id=Codehighlighter1_2015_2205_Open_Image onclick="this.style.display='none'; Codehighlighter1_2015_2205_Open_Text.style.display='none'; Codehighlighter1_2015_2205_Closed_Image.style.display='inline'; Codehighlighter1_2015_2205_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_2015_2205_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2015_2205_Closed_Text.style.display='none'; Codehighlighter1_2015_2205_Open_Image.style.display='inline'; Codehighlighter1_2015_2205_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(session&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_2015_2205_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_2015_2205_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList&nbsp;tokenList&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;getTokenList(session);<br><img id=Codehighlighter1_2116_2196_Open_Image onclick="this.style.display='none'; Codehighlighter1_2116_2196_Open_Text.style.display='none'; Codehighlighter1_2116_2196_Closed_Image.style.display='inline'; Codehighlighter1_2116_2196_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_2116_2196_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2116_2196_Closed_Text.style.display='none'; Codehighlighter1_2116_2196_Open_Image.style.display='inline'; Codehighlighter1_2116_2196_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(tokenList.contains(tokenStr))&nbsp;</span><span id=Codehighlighter1_2116_2196_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_2116_2196_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;valid&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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tokenList.remove(tokenStr);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&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>&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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;valid;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></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><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></span></div>
<p><strong><font color=#ff0000>怎么使用？</font></strong></p>
<p><strong>在jsp页面端。</strong></p>
<p>首先import该类：</p>
<p>&lt;%@ page import="com.paizuo.framework.util.Token" %&gt;</p>
<p>表单包含隐藏的token字符串:</p>
<p>&nbsp;</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><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">form</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><img src="http://www.blogjava.net/Images/dot.gif"><img src="http://www.blogjava.net/Images/dot.gif"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="hidden"</span><span style="COLOR: #ff0000">&nbsp;name</span><span style="COLOR: #0000ff">="&lt;%=Token.TOKEN_STRING_NAME&nbsp;%&gt;"</span><span style="COLOR: #ff0000">&nbsp;value</span><span style="COLOR: #0000ff">="&lt;%=Token.getTokenString(session)&nbsp;%&gt;"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><img src="http://www.blogjava.net/Images/dot.gif"><img src="http://www.blogjava.net/Images/dot.gif"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">form</span><span style="COLOR: #0000ff">&gt;</span></div>
<p>&nbsp;</p>
<p><strong>在Server端action中进行检验。</strong></p>
<p>&nbsp;</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_97_110_Open_Image onclick="this.style.display='none'; Codehighlighter1_97_110_Open_Text.style.display='none'; Codehighlighter1_97_110_Closed_Image.style.display='inline'; Codehighlighter1_97_110_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_97_110_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_97_110_Closed_Text.style.display='none'; Codehighlighter1_97_110_Open_Image.style.display='inline'; Codehighlighter1_97_110_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(Token.isTokenStringValid(request.getParameter(Token.TOKEN_STRING_NAME),&nbsp;request.getSession()))</span><span id=Codehighlighter1_97_110_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_97_110_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">进行正常业务流程</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_116_132_Open_Image onclick="this.style.display='none'; Codehighlighter1_116_132_Open_Text.style.display='none'; Codehighlighter1_116_132_Closed_Image.style.display='inline'; Codehighlighter1_116_132_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_116_132_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_116_132_Closed_Text.style.display='none'; Codehighlighter1_116_132_Open_Image.style.display='inline'; Codehighlighter1_116_132_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">else</span><span id=Codehighlighter1_116_132_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_116_132_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">进行防重复提交处理流程</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<p>完毕。</p>
<img src ="http://www.blogjava.net/mashiguang/aggbug/138324.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mashiguang/" target="_blank">mashiguang</a> 2007-08-21 11:45 <a href="http://www.blogjava.net/mashiguang/archive/2007/08/21/138324.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>servlet使用技巧,给臃肿的web.xml瘦身.</title><link>http://www.blogjava.net/mashiguang/archive/2007/07/06/128653.html</link><dc:creator>mashiguang</dc:creator><author>mashiguang</author><pubDate>Fri, 06 Jul 2007 11:17:00 GMT</pubDate><guid>http://www.blogjava.net/mashiguang/archive/2007/07/06/128653.html</guid><wfw:comment>http://www.blogjava.net/mashiguang/comments/128653.html</wfw:comment><comments>http://www.blogjava.net/mashiguang/archive/2007/07/06/128653.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/mashiguang/comments/commentRss/128653.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mashiguang/services/trackbacks/128653.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以往每添加一个servlet就要在web.xml里添加&lt;servlet&gt;&lt;servlet-mapping&gt;,随着项目的进度,servlet数目越来越可观.<br>web.xml里也密密麻麻的排满了&lt;servlet&gt;&lt;servlet-mapping&gt;这些食之无味弃之崩溃的东西,有一种方法可以改善这种境况.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在web.xml里添加如下的配置:
<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">&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>&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">InvokerServlet</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>&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"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.catalina.servlets.InvokerServlet<br><img 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">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>&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>&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>&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">0</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>&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>&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>&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>&nbsp;&nbsp;&nbsp;&nbsp;<br><img 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">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>&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">InvokerServlet</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>&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">/servlet/*</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>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">servlet-mapping</span><span style="COLOR: #0000ff">&gt;</span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ok,现在web.xml里保留这一个servlet配置就可以满足所有的servlet调用了,比如调用UserManagerService这个servlet,在页面表单里这样写:
<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: #0000ff">&lt;</span><span style="COLOR: #800000">form&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="f"</span><span style="COLOR: #ff0000">&nbsp;method</span><span style="COLOR: #0000ff">="post"</span><span style="COLOR: #ff0000">&nbsp;action</span><span style="COLOR: #0000ff">="/servlet/com.mashiguang.servlet.UserManagerService"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><img 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">input</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img 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">submit</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">form</span><span style="COLOR: #0000ff">&gt;</span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注意表单action "/servlet/"后面是这个servlet class的全名.
<img src ="http://www.blogjava.net/mashiguang/aggbug/128653.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mashiguang/" target="_blank">mashiguang</a> 2007-07-06 19:17 <a href="http://www.blogjava.net/mashiguang/archive/2007/07/06/128653.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>