﻿<?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-josson.jin-随笔分类-java 开发  </title><link>http://www.blogjava.net/josson/category/21776.html</link><description>天地生人,有一人应有一人之业;人生在世,生一日当尽一日之勤!</description><language>zh-cn</language><lastBuildDate>Fri, 09 Dec 2011 22:12:25 GMT</lastBuildDate><pubDate>Fri, 09 Dec 2011 22:12:25 GMT</pubDate><ttl>60</ttl><item><title>基于客户端（浏览器）证书身份认证的方法</title><link>http://www.blogjava.net/josson/archive/2011/12/09/365966.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Fri, 09 Dec 2011 08:09:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2011/12/09/365966.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/365966.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2011/12/09/365966.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/365966.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/365966.html</trackback:ping><description><![CDATA[1、介绍<br /><div><div>通过证书验证用户身份（浏览器），其核心是利用cookie实现http和https的信息共享（同域名）。如http://test.abc.com/app/index.html 发现未验证后，跳转到https://test.abc.com:443/app/checkCrt.html身份验证，要求出去证书，确认后将身份信息带入http请求头部，跳转到原请求页面（http://test.abc.com/app/index.html ），读取身份信息后进入页面(出于安全考虑Cookie需要加密)。</div></div><br />流程图<br /><img src="http://www.blogjava.net/images/blogjava_net/josson/certauth.png" border="0" alt="" width="666" height="589" data-pinit="registered" /><br />流程说明：<br /><div><div>登录流程详细介绍：</div><div>1）. 未登录用户访问页面 如：http://test.abc.com/app/index.html</div><div>2）. 【CertAuthValve】判断是否访问受限制资源，如访问受限制的资源则判断用户身份是否已验证，未验证则将用户重定向到身份验证页面，原始请求的url做为</div><div>query的一部分，登录成功后可以跳转回来， 如：https://test.abc.com:443/app/checkCrt.htm?done=/index.html。</div><div>3）. 【CertAuthValve】对于https请求，apache读取请求提供的用户证书，获取证书中的邮件地址，并将该信息写入请求头中。</div><div>4）. 【GetUserInfoValve】读取请求头，获取刚刚设置的用户邮件地址信息，进一步获取用户的详细信息，然后将这些信息加密后放入cookie中。</div><div>5）. 登录完成，将用户外部重定向回原始页面。</div></div>2、具体实现<br />1）、安装apache、ssh、java、jboss等环境，略。<br />2）、生成服务证书和服务密码<div><div><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->openssl&nbsp;req&nbsp;-<span style="color: #0000FF; ">new</span>&nbsp;-x509&nbsp;-nodes&nbsp;-out&nbsp;/home/admin/app/conf/ssl.crt/server.crt&nbsp;-keyout&nbsp;/home/admin/app/conf/ssl.crt/server.key&nbsp;-days&nbsp;3600</div></div><div>因为要和内网证书交互，所以需要一个内网证书公钥文件，可以通过以下方式获取:</div><div>获取方法：IE-&gt;工具-&gt;Internet选项-&gt;内容-&gt;证书-&gt;受信任的根证书颁发机构，找到intranet行，点击导出，选择下一步，选择Base64编码X.509,将证书文件保存为intranet-ca.crt，拷贝到目录/home/admin/app/conf/ssl.crt/。<br />3）、apache(httpd.conf)配置</div></div>应用和身份验证页面放在一起，所以需要同时配置两个虚拟主机，同时监听80（处理http请求）、443（处理https请求）端口。<br /><div style="border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><font class="Apple-style-span" size="2">#监听端口</font><br /><font class="Apple-style-span" size="2">Listen&nbsp;80</font><br /><font class="Apple-style-span" size="2">Listen&nbsp;443</font><br /><br /><font class="Apple-style-span" size="2">#app的虚拟主机配置</font><br /><div><div style="font-size: 13px; ">NameVirtualHost *:80</div><div style="font-size: 13px; ">&lt;VirtualHost *:80&gt;</div><div style="font-size: 13px; ">&nbsp; &nbsp; ServerAdmin sa@abc.com</div><div style="font-size: 13px; ">&nbsp; &nbsp; ServerName test.abc.com</div><div style="font-size: 13px; ">&nbsp; &nbsp; DocumentRoot /home/admin/app/target/app/htdocs/</div><div><font class="Apple-style-span" size="2">&lt;/VirtualHost&gt;</font><br /><br /><font class="Apple-style-span" size="2">#身份验证的虚拟主机配置</font><br /><div><div>NameVirtualHost *:443</div><div>&lt;VirtualHost *:443&gt;</div><div>&nbsp; &nbsp; ServerAdmin sa@abc.com</div><div>&nbsp; &nbsp; ServerName test.abc.com</div><div>&nbsp; &nbsp; DocumentRoot&nbsp;<span class="Apple-style-span" style="font-size: 13px; ">/home/admin/app/target/app/htdocs/</span></div><div></div><div>&nbsp; &nbsp; SSLEngine on</div><div>&nbsp; &nbsp; SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+SSLv3:+EXP:+eNULL<br /><br /><div>&nbsp; &nbsp;&nbsp;#该指令为虚拟主机指定证书文件名。</div></div><div>&nbsp; &nbsp; SSLCertificateFile /home/<span style="font-size: 13px; ">admin</span><span style="font-size: 13px; ">/</span><span style="font-size: 13px; ">app</span><span style="font-size: 13px; ">/</span><span style="font-size: 13px; ">conf</span><span style="font-size: 13px; ">/</span>ssl.crt/server.crt<br /><br /><div>&nbsp; &nbsp; #该指令为证书指定一个对应的私钥文件</div></div><div>&nbsp; &nbsp; SSLCertificateKeyFile /home<span style="font-size: 13px; ">/</span><span style="font-size: 13px; ">admin</span><span style="font-size: 13px; ">/</span><span style="font-size: 13px; ">app</span><span style="font-size: 13px; ">/</span><span style="font-size: 13px; ">conf</span><span style="font-size: 13px; ">/</span>ssl.crt/server.key<br /><br /><div>&nbsp; &nbsp; #该指令为指定一个包含Certificate Authority证书的文件<br /><div><div>&nbsp; &nbsp; #证书公钥</div></div></div></div><div>&nbsp; &nbsp; SSLCACertificateFile /home<span style="font-size: 13px; ">/</span><span style="font-size: 13px; ">admin</span><span style="font-size: 13px; ">/</span><span style="font-size: 13px; ">app</span><span style="font-size: 13px; ">/</span><span style="font-size: 13px; ">conf</span><span style="font-size: 13px; ">/</span>ssl.crt/intranet-ca.cer</div><div></div><div>&nbsp; &nbsp; SSLProxyEngine on</div><div>&nbsp; &nbsp; RewriteEngine on</div><div>&nbsp; &nbsp;&nbsp;#设置客户端证书验证为必须</div><div>&nbsp; &nbsp; SSLVerifyClient require<br /><br /><div><div>&nbsp; &nbsp; #因为一个CA证书能够被另一个CA证书验证，所以可以形成一个CA证书链.使用该指令可指定服务器验证用户证书时可以查找多少个CA证明。</div><div>&nbsp; &nbsp; #设置认证深度：一般用默认10。</div></div></div><div>&nbsp; &nbsp; SSLVerifyDepth &nbsp;10<br /><br />&nbsp; &nbsp;&nbsp;#把mod_ssl里的变量变为全局环境的变量</div><div>&nbsp; &nbsp; SSLOptions +StdEnvVars<br /><br /><div><div>&nbsp; &nbsp; #将证书中的邮件地址添加到请求头中</div></div></div><div>&nbsp; &nbsp; RequestHeader unset SSL_CLIENT_S_DN_Email</div><div>&nbsp; &nbsp; RequestHeader add SSL_CLIENT_S_DN_Email %{SSL_CLIENT_S_DN_Email}e</div><div>&lt;/VirtualHost&gt;</div></div></div></div></div><br />4)、代码片段<br /><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//</span><span style="color: #008000; ">CertAuthValve.java<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">判断session中是否有用户邮箱地址</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionValue&nbsp;session&nbsp;=&nbsp;SessionHelper.getSessionValue(rundata);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(StringUtil.isNotEmpty(session.getCropEmail()))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;从内网证书中获取用户邮箱地址:&nbsp;</span>SSL_CLIENT_S_DN_Email<span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;cropEmail&nbsp;=&nbsp;rundata.getRequest().getHeader(SSL_CLIENT_HEADER_MAIL);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(StringUtil.isNotEmpty(cropEmail))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">将邮箱地址保存到session</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.setCropEmail(cropEmail);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionHelper.saveSessionValue(rundata,&nbsp;session);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(log.isDebugEnabled())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.debug("用户"&nbsp;+&nbsp;session.getCropEmail()&nbsp;+&nbsp;"已经通过证书验证");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URIBrokerService&nbsp;uriBrokerService&nbsp;=&nbsp;(URIBrokerService)&nbsp;getWebxComponent().getService(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URIBrokerService.SERVICE_NAME);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URIBroker&nbsp;noPermissionUriBroker&nbsp;=&nbsp;uriBrokerService.getURIBroker(CHECK_CRT_URL);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">请求的原始URL&nbsp;&amp;&nbsp;验证的URL</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;requestPath&nbsp;=&nbsp;rundata.getPathInfo().replace("_",&nbsp;"");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;checkCrtUrl&nbsp;=&nbsp;(String)&nbsp;noPermissionUriBroker.getPath().get(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;noPermissionUriBroker.getPath().size()&nbsp;-&nbsp;1);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">原始请求判断</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(requestPath.equalsIgnoreCase(checkCrtUrl))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">当前是https请求，但是依然不能得到证书信息,转到禁止页面<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">(要将禁止页面加入到允许访问的配置文件中，不然会导致循环重定向)</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URIBroker&nbsp;uriBroker&nbsp;=&nbsp;uriBrokerService.getURIBroker("forbidden");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rundata.setRedirectLocation(uriBroker.render());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">转到证书验证页面</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rundata.setRedirectLocation(noPermissionUriBroker.render()&nbsp;+&nbsp;"?done="&nbsp;+&nbsp;rundata.getPathInfo());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(IOException&nbsp;e)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.error("权限验证重定向出错",&nbsp;e);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;BreakPipeline();</div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//</span><span style="color: #008000; ">GetUserInfoValve.java</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;user&nbsp;=&nbsp;rundata.getSession().getAttribute("userInfo");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(user&nbsp;==&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionValue&nbsp;session&nbsp;=&nbsp;SessionHelper.getSessionValue(rundata);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;email&nbsp;=&nbsp;session.getCropEmail();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Employe&nbsp;employe&nbsp;=&nbsp;PersonInfoUtil.getPersonInfoByEmail(email);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;写入cookie</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.setEmployeeId(employe.getEmployeId());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.setName(employe.getName());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.setCropEmail(employe.getEmail());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SessionHelper.saveSessionValue(rundata,&nbsp;session);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</div><br /> <pinit id="__huaban_Button" style="display: none; ">采集到花瓣</pinit><img src ="http://www.blogjava.net/josson/aggbug/365966.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2011-12-09 16:09 <a href="http://www.blogjava.net/josson/archive/2011/12/09/365966.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java序列化算法原理</title><link>http://www.blogjava.net/josson/archive/2010/12/16/332685.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Thu, 16 Dec 2010 06:52:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2010/12/16/332685.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/332685.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2010/12/16/332685.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/332685.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/332685.html</trackback:ping><description><![CDATA[<p class="MsoNormal"><strong>1、什么是java序列化</strong><br />
</p>
<p class="MsoNormal"><span lang="EN-US">Java</span>
<span style="font-family: SimSun;">序列化</span>
<span lang="EN-US">API</span>
<span style="font-family: SimSun;">提供一种处理对象序列化的标准机制。</span><u><span style="font-family: SimSun;">序列化</span><span style="font-family: SimSun;">（</span><span lang="EN-US">Serialization</span></u><span style="font-family: SimSun;"><u>）</u>是指将java对象用一连串字节描述的一个过程；反序列化</span>（<span class="SpellE"><span lang="EN-US">deserialization</span>）</span><span style="font-family: SimSun;">是一种将这一串字节构建成一个对象的过程。</span></p>
<p class="MsoNormal"><br />
</p>
<p class="MsoNormal"><strong><span style="font-family: SimSun;">2、序列化的作用（必要性）</span></strong></p>
<p class="MsoNormal"><span lang="EN-US">Java</span><span style="font-family: SimSun;">中，一切都是对象，在分布式环境中经常需要将</span>对象<span style="font-family: SimSun;">从这一端网络或设备传递到另一端。</span><span lang="EN-US">Java</span>
<span style="font-family: SimSun;">序列化机制就是一种解决</span><span style="font-family: SimSun;">在网络两端传输数据的问题而产生的协议。</span><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Simsun; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; font-size: medium;"><span class="Apple-style-span" style="color: rgb(68, 68, 68); font-family: Verdana,sans-serif; font-size: 14px; line-height: 26px;">下图表示客户端/服务器之间通信，一个对象是从客户端传送到服务器通过序列化的视图。</span></span></p>
<p class="MsoNormal"><span style="font-family: SimSun;"><img src="http://www.blogjava.net/images/blogjava_net/josson/jtip050709-fig1.gif" alt="" border="0" width="605" height="270" /></span></p>
<p class="MsoNormal"><br />
</p>
<p class="MsoNormal"><strong><span style="font-family: SimSun;">3、如何序列化一个对象</span>
</strong>
</p>
<p class="MsoNormal"><span style="font-family: SimSun;">为序列化一个对象，你需确保对象类实现</span><span class="SpellE"><span lang="EN-US">Serializable</span></span><span style="font-family: SimSun;">接口。</span><span class="SpellE"><span lang="EN-US">Serializable</span></span><span style="font-family: SimSun;">接口没有方法，只要实现了序列化接口，</span><span lang="EN-US">Class</span>
<span style="font-family: SimSun;">就能被序列化机制处理。</span></p>
<p class="MsoNormal"><span style="font-family: SimSun;">示例代码，需序列化的java对象:<br />
</span>
</p>
<div style="background-color: rgb(238, 238, 238); font-size: 13px; border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; width: 98%;"><span style="color: rgb(0, 128, 128);">1</span>&nbsp;<span style="color: rgb(0, 0, 255);">import</span><span style="color: rgb(0, 0, 0);">&nbsp;java.io.Serializable;<br />
</span><span style="color: rgb(0, 128, 128);">2</span>&nbsp;<span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">3</span>&nbsp;<span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;TestClassSerial&nbsp;</span><span style="color: rgb(0, 0, 255);">implements</span><span style="color: rgb(0, 0, 0);">&nbsp;Serializable&nbsp;&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">4</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">byte</span><span style="color: rgb(0, 0, 0);">&nbsp;version&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">100</span><span style="color: rgb(0, 0, 0);">;<br />
</span><span style="color: rgb(0, 128, 128);">5</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">byte</span><span style="color: rgb(0, 0, 0);">&nbsp;count&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;&nbsp;&nbsp;<br />
</span><span style="color: rgb(0, 128, 128);">6</span>&nbsp;<span style="color: rgb(0, 0, 0);">}<br />
</span></div>
<br />
示例代码，<span style="font-family: SimSun;">把</span>TestClassSerial对照象<span style="font-family: SimSun;">输出成</span>
<span lang="EN-US">Byte</span>
<span style="font-family: SimSun;">流，</span><span style="font-family: SimSun;">存储到</span>
<span class="SpellE"><span lang="EN-US">temp.out</span>
</span>
<span style="font-family: SimSun;">文件里：</span>
<div style="background-color: rgb(238, 238, 238); font-size: 13px; border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; width: 98%;"><span style="color: rgb(0, 128, 128);">&nbsp;1</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;main(String&nbsp;args[])&nbsp;</span><span style="color: rgb(0, 0, 255);">throws</span><span style="color: rgb(0, 0, 0);">&nbsp;IOException&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;2</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileOutputStream&nbsp;fos&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">;<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;3</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ObjectOutputStream&nbsp;oos&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">;<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;4</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);">&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;5</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fos&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;FileOutputStream(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">c:/temp.out</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;6</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oos&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;ObjectOutputStream(fos);<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;7</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestClassSerial&nbsp;tcs&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;TestClassSerial();<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;8</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oos.writeObject(tcs);<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;9</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oos.flush();<br />
</span><span style="color: rgb(0, 128, 128);">10</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">11</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">finally</span><span style="color: rgb(0, 0, 0);">&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">12</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(oos&nbsp;</span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">)&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">13</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oos.close();<br />
</span><span style="color: rgb(0, 128, 128);">14</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">15</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(fos&nbsp;</span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">)&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">16</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fos.close();<br />
</span><span style="color: rgb(0, 128, 128);">17</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">18</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">19</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br />
示例代码，<span style="font-family: SimSun;">从持久的文件中读取</span>
<span lang="EN-US">Bytes</span>
<span style="font-family: SimSun;">重建对象</span><span class="SpellE">：</span>
<div style="background-color: rgb(238, 238, 238); font-size: 13px; border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; width: 98%;"><span style="color: rgb(0, 128, 128);">&nbsp;1</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;main1(String&nbsp;args[])&nbsp;</span><span style="color: rgb(0, 0, 255);">throws</span><span style="color: rgb(0, 0, 0);">&nbsp;IOException&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;2</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileInputStream&nbsp;fis&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">;&nbsp;<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;3</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ObjectInputStream&nbsp;oin&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">;<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;4</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);">&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;5</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fis&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;FileInputStream(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">c:/temp.out</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;6</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oin&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;ObjectInputStream(fis);<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;7</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestClassSerial&nbsp;tcs&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;(TestClassSerial)&nbsp;oin.readObject();<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;8</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">version=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">tcs.version);<br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;9</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">10</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">finally</span><span style="color: rgb(0, 0, 0);">&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">11</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(fis&nbsp;</span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">)&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">12</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fis.close();<br />
</span><span style="color: rgb(0, 128, 128);">13</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">14</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(oin&nbsp;</span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">)&nbsp;{<br />
</span><span style="color: rgb(0, 128, 128);">15</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oin.close();<br />
</span><span style="color: rgb(0, 128, 128);">16</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">17</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: rgb(0, 128, 128);">18</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<span style="font-family: SimSun;"><span>
<p class="MsoNormal">执行结果为：<span lang="EN-US">100.</span></p>
<p class="MsoNormal"><br />
</p>
<p class="MsoNormal"><strong><span style="font-family: SimSun;">4、对象的序列化格式</span></strong></p>
</span></span>
<p class="MsoNormal"><span style="font-family: SimSun;">TestClassSerial对象序列化输出的</span>
<span class="SpellE"><span lang="EN-US">temp.out</span>
</span>
<span style="font-family: SimSun;">文件，以</span>
<span lang="EN-US">16</span>
<span style="font-family: SimSun;">进制方式显示，内容如下：</span></p>
<div style="background-color: rgb(238, 238, 238); font-size: 13px; border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; width: 98%;"><span style="color: rgb(0, 0, 0);">AC&nbsp;ED&nbsp;</span><span style="color: rgb(0, 0, 0);">00</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">05</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">73</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">72</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">00</span><span style="color: rgb(0, 0, 0);">&nbsp;0A&nbsp;</span><span style="color: rgb(0, 0, 0);">53</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">65</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">72</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">69</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">61</span><span style="color: rgb(0, 0, 0);">&nbsp;6C&nbsp;</span><span style="color: rgb(0, 0, 0);">54</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">65</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">73</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">74</span><span style="color: rgb(0, 0, 0);">&nbsp;A0&nbsp;0C&nbsp;</span><span style="color: rgb(0, 0, 0);">34</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">00</span><span style="color: rgb(0, 0, 0);">&nbsp;FE&nbsp;B1&nbsp;DD&nbsp;F9&nbsp;</span><span style="color: rgb(0, 0, 0);">02</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">00</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">02</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">42</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">00</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">05</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">63</span><span style="color: rgb(0, 0, 0);">&nbsp;6F&nbsp;</span><span style="color: rgb(0, 0, 0);">75</span><span style="color: rgb(0, 0, 0);">&nbsp;6E&nbsp;</span><span style="color: rgb(0, 0, 0);">74</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">42</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">00</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">07</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">76</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">65</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">72</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">73</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">69</span><span style="color: rgb(0, 0, 0);">&nbsp;6F&nbsp;6E&nbsp;</span><span style="color: rgb(0, 0, 0);">78</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">70</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">00</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">64</span></div>
<p class="MsoNormal"><span style="font-family: SimSun;"><span>
<p class="MsoNormal"><span style="font-family: SimSun;"><span>这些二进制字节就是用来描述序列化以后的</span></span><span class="SpellE"><span lang="EN-US">TestClassSerial</span></span><span style="font-family: SimSun;">对象的，我们注意到</span>
<span class="SpellE"><span lang="EN-US">TestSerial</span>
</span>
<span style="font-family: SimSun;">类中只有两个域：</span></p>
</span>
</span>
</p>
<div style="background-color: rgb(238, 238, 238); font-size: 13px; border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; width: 98%;"><span style="color: rgb(0, 128, 128);">1</span>&nbsp;<span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">byte</span><span style="color: rgb(0, 0, 0);">&nbsp;version&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">100</span><span style="color: rgb(0, 0, 0);">;<br />
</span><span style="color: rgb(0, 128, 128);">2</span>&nbsp;<span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">byte</span><span style="color: rgb(0, 0, 0);">&nbsp;count&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;</span></div>
<p class="MsoNormal">
</p>
<p class="MsoNormal"><span style="font-family: SimSun;">都是</span>
<span lang="EN-US">byte</span>
<span style="font-family: SimSun;">型，理论上存储这两个域只需要</span>
<span lang="EN-US">2</span>
<span style="font-family: SimSun;">个</span>
<span lang="EN-US">byte</span>
<span style="font-family: SimSun;">，但是实际上</span>
<span class="SpellE"><span lang="EN-US">temp.out</span>
</span>
<span style="font-family: SimSun;">占据空间为</span>
<span lang="EN-US">51bytes</span>
<span style="font-family: SimSun;">，也就是说除了数据以外，还包括了对序列化对象的其他描述。</span></p>
<p class="MsoNormal"><span style="font-family: SimSun;"><br />
</span></p>
<p class="MsoNormal"><strong><span lang="EN-US">5、Java</span>
</strong>
<strong><span style="font-family: SimSun;">的序列化算法</span>
</strong>
</p>
<p class="MsoNormal"><span style="font-family: SimSun;">序列化算法一般会按步骤做如下事情：</span>
</p>
<p class="MsoNormal"><span style="font-family: Wingdings;"><span>1、</span></span><span style="font-family: Wingdings;">将对象实例相关的类的元数据输出；<br />
<span>2、</span></span><span style="font-family: Wingdings;">递归地输出类的超类元数据描述直到不再有超类；<br />
<span>3、</span></span><span style="font-family: Wingdings;">类元数据完了以后，开始从最顶层的超<span class="GramE">类开始</span>输出对象实例的实际数据值；<br />
<span>4、</span></span><span style="font-family: SimSun;">从上至下递归输出实例的数据；</span></p>
<p class="MsoNormal"><span style="font-family: SimSun;"><br />
</span></p>
<p class="MsoNormal"><span style="font-family: SimSun;">更多序例化事例及二进制字节含义参考文档：http://my.oschina.net/god/blog/1291</span></p>
<p class="MsoNormal">
</p>
<span style="font-family: SimSun;"><span>
<p class="MsoNormal">
</p>
</span></span>
<p class="MsoNormal"> </p>
<img src ="http://www.blogjava.net/josson/aggbug/332685.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2010-12-16 14:52 <a href="http://www.blogjava.net/josson/archive/2010/12/16/332685.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GC垃圾回收机制</title><link>http://www.blogjava.net/josson/archive/2010/09/25/332809.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Sat, 25 Sep 2010 04:13:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2010/09/25/332809.html</guid><description><![CDATA[垃圾收集的目的在于清除不再使用的对象，释放那些不再使用的对象所占用的内存。GC两种常用的方法是引用计数和对象引用遍历，早期的jvm使用引用计数，现在大多数jvm采用对象引用遍历。<br />
<br />
1、对象引用计数：<br />
当应用程序创建引用以及引用超出作用域(范围)时，jvm必须适当增减引用数。当某对象的引用数为0时，对象便可以进行垃圾收集。<br />
<br />
2、对象引用遍历：<br />
(1)、标记（marking）对象：从一组对象开始，沿着整个对象图上的引用链，递归确定可到达的对象，GC将标记这些可到达的对象。如果某对象不能从这些根对象的一个（至少一个）到达，则表示它可被收集。<br />
<br />
(2)、清除（sweeping）对象：GC删除不可到达的对象，删除时，有些GC只是简单的扫描堆栈，删除未标记的对象，并释放它们的内存以生成新的对象。这种方法的问题在于内存会分成好多小段，而它们不足以用于新的对象，但是组合起来却很大。因此，许多gc可以重新组织内存中的对象，并进行压缩（compact），形成可利用的空间。<br />
<img src ="http://www.blogjava.net/josson/aggbug/332809.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2010-09-25 12:13 <a href="http://www.blogjava.net/josson/archive/2010/09/25/332809.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通用业务引用查询服务实现</title><link>http://www.blogjava.net/josson/archive/2009/07/14/281995.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Tue, 14 Jul 2009 06:42:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2009/07/14/281995.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/281995.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2009/07/14/281995.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/281995.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/281995.html</trackback:ping><description><![CDATA[一般业务系统中总会存在一些基础数据，在其他的业务单据中会被套引用。因此，系统必须保证这些被业务单据引用的基础数据不能任意的删除。最常见的做法就是，在删除基础数据时，预先校验该类数据是否在相关业务表中存在，若不存在才允许用户删除，否则给用户以提示。<br />
<br />
但这样的处理方法，有些缺点，就是需要编码对每个业务类提供查询方法，或在删除逻辑中增加判断逻辑。因此，每次引用关系变化，增加或减少时免不了要修改原来的逻辑，时间越长，系统的维护成本就越来越高了。因此，有必要对系统进行重构，将这类的处理逻辑进行抽象，单独封装成一个服务，当引用关系有变更时，不用再修改原有逻辑，通过配置就可以完成变更。<br />
<br />
通用引用关系查询服务，主要就是通过db表或xml配置文件，对系统中每个基础数据有引用的所有关系进行定义，定义属性主要是引用的表及字段名称。查询时，从配置文件中读取指定类别的引用关系，并逐一查询这些表中的记录，以确定数据是否被引用。这种处理方法的优点为，易扩展、可维护性强，引用关系变更时，仅通过维护配置文件，不必进行编码，就能实现，这样能大大的提高系统的稳定性。<br />
<br />
xml配置文件如下：<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">rule&nbsp;</span><span style="color: rgb(255, 0, 0);">bizName</span><span style="color: rgb(0, 0, 255);">='product'&nbsp;</span><span style="color: rgb(255, 0, 0);">desc</span><span style="color: rgb(0, 0, 255);">="产品关联项定义"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">item</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">refTable</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">sale_item</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">refTable</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">refField</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">product_id</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">refField</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 0);">&lt;!-- 用于查询条件的扩展，允许为空 --&gt;</span><br />
<span style="color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">extCondition</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">CORP_ID&nbsp;=&nbsp;#corpId#</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">extCondition</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">item</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">item</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">refTable</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">sale_order_item</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">refTable</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">refField</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">product_id</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">refField</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">extCondition</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">CORP_ID&nbsp;=&nbsp;#corpId#</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">extCondition</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">item</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">rule</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">rule&nbsp;</span><span style="color: rgb(255, 0, 0);">bizName</span><span style="color: rgb(0, 0, 255);">='customer'&nbsp;</span><span style="color: rgb(255, 0, 0);">desc</span><span style="color: rgb(0, 0, 255);">="客户关联项定义"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">item</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">refTable</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">sale_order</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">refTable</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">refField</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">cust_id</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">refField</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">extCondition</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">CORP_ID&nbsp;=&nbsp;#corpId#</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">extCondition</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">item</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">item</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">refTable</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">sale_bill</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">refTable</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">refField</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">cust_id</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">refField</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">extCondition</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">extCondition</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">item</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp; </span><span style="color: rgb(0, 0, 255);">... ...<br />
</span><br />
<span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">rule</span><span style="color: rgb(0, 0, 255);">&gt;</span></div>
<br />
通用业务引用查询类代码片段如下：<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;BizReferenceService&nbsp;</span><span style="color: rgb(0, 0, 255);">implements</span><span style="color: rgb(0, 0, 0);">&nbsp;IBizReferenceService&nbsp;{<br />
</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);">&nbsp;Map</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">String,List</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">BizReferenceRule</span><span style="color: rgb(0, 0, 0);">&gt;&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;ruleMaps;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">final</span><span style="color: rgb(0, 0, 0);">&nbsp;String&nbsp;PATTERN&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">#[</span><span style="color: rgb(0, 0, 0);">\\</span><span style="color: rgb(0, 0, 0);">w]+#</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">final</span><span style="color: rgb(0, 0, 0);">&nbsp;String&nbsp;CFG_FILE&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">bizReferenceRule.xml</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp; ... ...</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;查询指定业务数据是否被其他业务表关联依赖.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@param</span><span style="color: rgb(0, 128, 0);">&nbsp;bizName&nbsp;关联业务名称<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@param</span><span style="color: rgb(0, 128, 0);">&nbsp;bizId&nbsp;关联业务ID.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@param</span><span style="color: rgb(0, 128, 0);">&nbsp;extParam&nbsp;扩展条件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@return</span><span style="color: rgb(0, 128, 0);">&nbsp;true&nbsp;被关联/false&nbsp;未被关联.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">boolean</span><span style="color: rgb(0, 0, 0);">&nbsp;isBizReference(String&nbsp;bizName,String&nbsp;bizId,Map</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">String,Object</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">extParam)&nbsp;</span><span style="color: rgb(0, 0, 255);">throws</span><span style="color: rgb(0, 0, 0);">&nbsp;ServiceException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Assert.notNull(bizName,&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">业务名称不能为空，bizName&nbsp;is&nbsp;NULL。</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Assert.notNull(bizId,&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">记录ID不能为空，bizId&nbsp;is&nbsp;NULL。</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">逐个检查依赖项是否有数据关联.</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">BizReferenceRule</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;rules&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;getBizRelationRule(bizName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(BizReferenceRule&nbsp;rule&nbsp;:&nbsp;rules){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuilder&nbsp;sqlBuilder&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;StringBuilder();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sqlBuilder.append(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">select&nbsp;count(*)&nbsp;from&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">).append(rule.getRelTable()).append(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;where&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.append(rule.getRelField()).append(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">='</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">).append(bizId).append(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">'&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;extConditon&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;rule.getExtCondition();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(StringUtil.isNotBlank(extConditon)){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initTenantParam(extParam);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sqlBuilder.append(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;and&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">).append(getExtParamSql(extConditon,extParam));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.debug(sqlBuilder);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;nCount&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;bizReferenceDao.getBizRelationCount(sqlBuilder.toString());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">&nbsp;(nCount&nbsp;</span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">)&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">true</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">false</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">catch</span><span style="color: rgb(0, 0, 0);">(Exception&nbsp;ex){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.error(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">调用业务关联服务错误。</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">bizName</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,bizId:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">bizId</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,extParam</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">LogUtil.parserBean(extParam),ex);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">throw</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;ServiceException(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">调用业务关联服务错误。</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;组装扩展查询条件的sql<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@param</span><span style="color: rgb(0, 128, 0);">&nbsp;condition<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@param</span><span style="color: rgb(0, 128, 0);">&nbsp;extParam<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@return</span><span style="color: rgb(0, 128, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@throws</span><span style="color: rgb(0, 128, 0);">&nbsp;Exception<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">&nbsp;String&nbsp;getExtParamSql(String&nbsp;condition,Map</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">String,Object</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">extParam)&nbsp;</span><span style="color: rgb(0, 0, 255);">throws</span><span style="color: rgb(0, 0, 0);">&nbsp;Exception&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">String</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;paramList&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;parseDyncParam(condition);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(String&nbsp;param&nbsp;:&nbsp;paramList){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;simpleParam&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;simpleName(param);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 0);">!</span><span style="color: rgb(0, 0, 0);">extParam.containsKey(simpleParam)){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">throw</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;ServiceException(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">动态参数值未设置!&nbsp;param:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">param</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,extParam:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">LogUtil.parserBean(extParam));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;condition&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;condition.replaceAll(param,&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">String.valueOf(extParam.get(simpleParam))</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;condition;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;解析扩展查询条件中的动态参数名.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@param</span><span style="color: rgb(0, 128, 0);">&nbsp;condition<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@return</span><span style="color: rgb(0, 128, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@throws</span><span style="color: rgb(0, 128, 0);">&nbsp;Exception<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">&nbsp;List</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">String</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;parseDyncParam(String&nbsp;condition)&nbsp;</span><span style="color: rgb(0, 0, 255);">throws</span><span style="color: rgb(0, 0, 0);">&nbsp;Exception&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PatternCompiler&nbsp;compiler&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;Perl5Compiler();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PatternMatcher&nbsp;matcher&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;Perl5Matcher();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MatchResult&nbsp;result&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PatternMatcherInput&nbsp;input&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">String</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;paramList&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;ArrayList</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">String</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;PatternMatcherInput(condition);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pattern&nbsp;pattern&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;compiler.compile(PATTERN,Perl5Compiler.CASE_INSENSITIVE_MASK);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);">&nbsp;(matcher.contains(input,&nbsp;pattern)){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;matcher.getMatch();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input.setBeginOffset(result.length());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;paramList.add(result.group(</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;paramList;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;获取业务关联查询规则.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">&nbsp;List</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">BizReferenceRule</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">&nbsp;getBizRelationRule(String&nbsp;bizName){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Assert.notNull(bizName,&nbsp;</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">业务名称不能为空，bizName&nbsp;is&nbsp;NULL。</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">配置定义未加载到内存时，读取配置文件</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(ruleMaps&nbsp;</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parseRuleConfig();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(ruleMaps&nbsp;</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">)&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;ruleMaps.get(bizName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;读取业务关联规则配置文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;@SuppressWarnings(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">unchecked</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">synchronized</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;parseRuleConfig(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(ruleMaps&nbsp;</span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">解析业务引用定义文件.</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif" alt="" />&nbsp;<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;读取Xml文档<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: rgb(128, 128, 128);">@return</span><span style="color: rgb(0, 128, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">&nbsp;Document&nbsp;getXmlDocument(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;is&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClassLoader&nbsp;loader&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;Thread.currentThread().getContextClassLoader();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;loader.getResourceAsStream(CFG_FILE);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SAXBuilder&nbsp;sb&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;SAXBuilder();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;sb.build(</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;BufferedInputStream(is));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">catch</span><span style="color: rgb(0, 0, 0);">(Exception&nbsp;ex)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.error(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">读取配置文件错误.&nbsp;file:</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);">CFG_FILE,&nbsp;ex);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">finally</span><span style="color: rgb(0, 0, 0);">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(is&nbsp;</span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">catch</span><span style="color: rgb(0, 0, 0);">(Exception&nbsp;ex)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.error(ex);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif" alt="" />&nbsp;<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />
}</span></div>
<br />
其他的一些可选处理方法:<br />
b. 在客户表增加引用计数字段;<br />
需额外维护引用计数字段，在引用的业务逻辑增加或删除记录时，需对该字段的数值进行更新。适用于需要直接查询记录被引用次数的场景，但在集群环境下，需注意并发问题。<br />
<img src ="http://www.blogjava.net/josson/aggbug/281995.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2009-07-14 14:42 <a href="http://www.blogjava.net/josson/archive/2009/07/14/281995.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过Findbugs 找出程序中隐藏的bug</title><link>http://www.blogjava.net/josson/archive/2009/06/13/281993.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Sat, 13 Jun 2009 15:55:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2009/06/13/281993.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/281993.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2009/06/13/281993.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/281993.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/281993.html</trackback:ping><description><![CDATA[我们通常依赖单元测试工具Luntbuild，来发现代码中有许多隐藏的错误或不良的编码，然后再去修正。这样从发现问题，到解决问题花费很多功夫。其实我们可以利用一些java代码分析工具，来及时发现相关的问题。如findbugs,luntbuild就是集成了findbugs插件来发现一些代码上的问题。<br />
<br />
findbugs 当前版本为：1.3.9，其下载地址如下（包括eclipse插件）：<br />
findbugs ：http://findbugs.sourceforge.net/index.html<br />
findbugs for eclipse : http://findbugs.sourceforge.net/downloads.html<br />
documents: http://findbugs.sourceforge.net/manual/<br />
<br />
插件安装比较简单，将findbugs for eclipse 插件文件(zip)下载后，直接解压至$eclipse.home$/plugins/目录下，重启eclipse即可使用。你可以通过查看:（eclipse 3.4） about ecliplse platform -&gt; plug-ins details 中找到findbugs 插件安装信息。<br />
<br />
Findbugs 的使用：<br />
在Package Explorer或Navigator视图中，选中你的Java项目，右键，可以看到&#8220;Find Bugs&#8221;菜单项，子菜单项里有&#8220;Find Bugs&#8221;和&#8220;Clear Bug Markers&#8221;等项。点击Find Bugs 后，开始分析项目中隐藏的代码问题，发现的问题会在相应的代码行上进行标记，或者在Bug Explorer中显示所有的问题(findbug视图，window -&gt; show view -&gt; others 可以找到Bug Explorer.) 我们就可以根据findbugs发现的问题，进行逐一解决，提高代码质量。<br />
<br />
Findbugs 的一些配置说明:<br />
FindBugs是一个基于&#8220;Bug Patterns&#8221;进行分析并找出Java程序中隐藏的Bugs。打开 Window -&gt; preferences ，对findbugs 的分析规则进行定义，如图：<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/josson/xfindbug111.jpg" /><br />
<br />
<br />
<img src ="http://www.blogjava.net/josson/aggbug/281993.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2009-06-13 23:55 <a href="http://www.blogjava.net/josson/archive/2009/06/13/281993.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java反编译工具</title><link>http://www.blogjava.net/josson/archive/2009/05/21/271838.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Thu, 21 May 2009 00:34:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2009/05/21/271838.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/271838.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2009/05/21/271838.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/271838.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/271838.html</trackback:ping><description><![CDATA[http://java.decompiler.free.fr/<br />
<br />
一个不错的java反编译工具，有gui及eclipse插件。<br />
<img src ="http://www.blogjava.net/josson/aggbug/271838.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2009-05-21 08:34 <a href="http://www.blogjava.net/josson/archive/2009/05/21/271838.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse 常用插件.</title><link>http://www.blogjava.net/josson/archive/2008/11/28/243151.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Fri, 28 Nov 2008 02:04:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2008/11/28/243151.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/243151.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2008/11/28/243151.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/243151.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/243151.html</trackback:ping><description><![CDATA[<p>1、Spket&nbsp;for eclipse<br />
spket支持JavaScript、XUL/XBL、Laszlo、SVG and Yahoo! Widget等新产品，具有代码自动完成、语法高亮、内容概要等功能特点，可以帮助开发人员高效地创建JavaScript程序，它可以以一个独立的桌面应用程序运行或者以Eclipse的插件运行，从它的官方网站<a href="http://www.spket.com/">http://www.spket.com/</a>可以下载。<br />
<br />
插件安装地址：<a href="http://www.spket.com/update">http://www.spket.com/update</a><br />
相关资料：<br />
<a title="Spket Eclipse Plugin &amp; IDE(Ext在Spket上的安装方法)" href="http://hbomb.name/wordpress/2008/02/02/spket-eclipse-plugin-ideext%E5%9C%A8spket%E4%B8%8A%E7%9A%84%E5%AE%89%E8%A3%85%E6%96%B9%E6%B3%95wwwextjscom/" target="_blank">Spket Eclipse Plugin &amp; IDE(Ext在Spket上的安装方法)</a><br />
<a title="spket 1.6.6 破解" href="http://hbomb.name/wordpress/2008/02/02/spket-166-%e7%a0%b4%e8%a7%a3-%ef%bc%88%e6%9a%b4%e5%8a%9b%ef%bc%89/" target="_blank">spket 1.6.6 破解</a><br />
<br />
2、Propedit&nbsp;for eclipse<br />
不错的编写properties文件的Eclipse插件（plugin），有了它我们在编辑一些简体中文、繁体中文等Unicode文本时，就不必再使用native2ascii编码了。<br />
插件安装地址：http://propedit.sourceforge.jp/eclipse/updates/<br />
</p>
<p>3、Velocity for eclipse</p>
<p><a href="http://veloeclipse.googlecode.com/svn/trunk/update/" target="_blank">http://veloeclipse.googlecode.com/svn/trunk/update/</a>
</p>
<img src ="http://www.blogjava.net/josson/aggbug/243151.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2008-11-28 10:04 <a href="http://www.blogjava.net/josson/archive/2008/11/28/243151.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ibatis 自动生成的主键</title><link>http://www.blogjava.net/josson/archive/2008/08/01/219338.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Fri, 01 Aug 2008 06:44:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2008/08/01/219338.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/219338.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2008/08/01/219338.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/219338.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/219338.html</trackback:ping><description><![CDATA[<p style="margin-bottom: 6pt;"><span style="font-family: 宋体;">对于任何数据库来说，提供唯一标识数据表中一行记录的能力是至关重要的。几乎所有数据库都提供了为新添加的行自动生成主键的方法。这样再操作数据库的时候比较方便，但它也带来了一个问题，如果我们需要知道新生成的主键值该怎么办？</span></p>
<span style="font-size: 10.5pt; font-family: 宋体;">有的数据库供应商是预先生成（</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';">pre-generate</span><span style="font-size: 10.5pt; font-family: 宋体;">）主键的（如</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';">Oracle</span><span style="font-size: 10.5pt; font-family: 宋体;">和</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';">PostgreSQL</span><span style="font-size: 10.5pt; font-family: 宋体;">），有的则是事后生成（</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';">post-generate</span><span style="font-size: 10.5pt; font-family: 宋体;">）的（如</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';">SQL Server</span><span style="font-size: 10.5pt; font-family: 宋体;">和</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';">MySQL</span><span style="font-size: 10.5pt; font-family: 宋体;">）。不管是哪种方式，我们都可以使用</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';">&lt;selectKey&gt;</span><span style="font-size: 10.5pt; font-family: 宋体;">节点来获取</span><span style="font-size: 10.5pt; font-family: 'Times New Roman';">&lt;insert&gt;</span><span style="font-size: 10.5pt; font-family: 宋体;">语句所产生的主键。下面的例子演示了这两种方式下的做法：<br />
<br />
</span>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;Oracle&nbsp;SEQUENCE&nbsp;Example&nbsp;using&nbsp;.NET&nbsp;1.1&nbsp;System.Data.OracleClient&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">insert&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="insertProduct-ORACLE"</span><span style="color: #ff0000;">&nbsp;parameterClass</span><span style="color: #0000ff;">="product"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">selectKey&nbsp;</span><span style="color: #ff0000;">resultClass</span><span style="color: #0000ff;">="int"</span><span style="color: #ff0000;">&nbsp;type</span><span style="color: #0000ff;">="pre"</span><span style="color: #ff0000;">&nbsp;property</span><span style="color: #0000ff;">="Id"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;STOCKIDSEQUENCE.NEXTVAL&nbsp;AS&nbsp;VALUE&nbsp;FROM&nbsp;DUAL<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">selectKey</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;insert&nbsp;into&nbsp;PRODUCT&nbsp;(PRD_ID,PRD_DESCRIPTION)&nbsp;values&nbsp;(#id#,#description#)<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">insert</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;Microsoft&nbsp;SQL&nbsp;Server&nbsp;IDENTITY&nbsp;Column&nbsp;Example&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">insert&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="insertProduct-MSSQL"</span><span style="color: #ff0000;">&nbsp;parameterClass</span><span style="color: #0000ff;">="product"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;insert&nbsp;into&nbsp;PRODUCT&nbsp;(PRD_DESCRIPTION)<br />
&nbsp;&nbsp;&nbsp;&nbsp;values&nbsp;(#description#)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">selectKey&nbsp;</span><span style="color: #ff0000;">resultClass</span><span style="color: #0000ff;">="int"</span><span style="color: #ff0000;">&nbsp;type</span><span style="color: #0000ff;">="post"</span><span style="color: #ff0000;">&nbsp;property</span><span style="color: #0000ff;">="id"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;@@IDENTITY&nbsp;as&nbsp;value<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">selectKey</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">insert</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<br />
</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;MySQL&nbsp;Example&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">insert&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="insertProduct-MYSQL"</span><span style="color: #ff0000;">&nbsp;parameterClass</span><span style="color: #0000ff;">="product"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;insert&nbsp;into&nbsp;PRODUCT&nbsp;(PRD_DESCRIPTION)<br />
&nbsp;&nbsp;&nbsp;&nbsp;values&nbsp;(#description#)<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">selectKey&nbsp;</span><span style="color: #ff0000;">resultClass</span><span style="color: #0000ff;">="int"</span><span style="color: #ff0000;">&nbsp;type</span><span style="color: #0000ff;">="post"</span><span style="color: #ff0000;">&nbsp;property</span><span style="color: #0000ff;">="id"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;LAST_INSERT_ID()&nbsp;as&nbsp;value<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">selectKey</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">insert</span><span style="color: #0000ff;">&gt;</span></div>
<br />
<img src ="http://www.blogjava.net/josson/aggbug/219338.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2008-08-01 14:44 <a href="http://www.blogjava.net/josson/archive/2008/08/01/219338.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>项目构建工具之Maven</title><link>http://www.blogjava.net/josson/archive/2008/06/20/209546.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Fri, 20 Jun 2008 13:25:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2008/06/20/209546.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/209546.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2008/06/20/209546.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/209546.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/209546.html</trackback:ping><description><![CDATA[<p>作为一个项目构建工具，Maven除具备Ant的功能外，最最要的就是jar包的管理。<br />
<br />
相关文章：<br />
<a href="http://www.blogjava.net/calvin/archive/2006/03/19/36098.html" target="_blank">http://www.blogjava.net/calvin/archive/2006/03/19/36098.html</a><br />
<a href="http://www.ibm.com/developerworks/cn/opensource/os-maven2/" target="_blank">http://www.ibm.com/developerworks/cn/opensource/os-<span class="hilite1"><span class="hilite1">maven</span></span>2/</a> </p>
<img src ="http://www.blogjava.net/josson/aggbug/209546.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2008-06-20 21:25 <a href="http://www.blogjava.net/josson/archive/2008/06/20/209546.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AXIS快速生成客户端调用文件</title><link>http://www.blogjava.net/josson/archive/2008/05/28/203489.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Wed, 28 May 2008 06:30:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2008/05/28/203489.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/203489.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2008/05/28/203489.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/203489.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/203489.html</trackback:ping><description><![CDATA[AXIS快速生成客户端调用文件的命令:<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">java&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">Djava.ext.dirs</span><span style="color: #000000;">=</span><span style="color: #000000;">.</span><span style="color: #000000;">/</span><span style="color: #000000;">lib&nbsp;org.apache.axis.wsdl.WSDL2Java&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">o&nbsp;.&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">d&nbsp;Session&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">s&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">S&nbsp;</span><span style="color: #0000ff;">true</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">p&nbsp;com.company.webservice.user&nbsp;http:</span><span style="color: #008000;">//</span><span style="color: #008000;">192.9.101.106:8080/cms/services/UserService?wsdl</span></div>
<br />
说明：<br />
<span style="color: #000000;">1、com.company.webservice.user表示</span>新生成类文件的包名。<br />
<span style="color: #000000;">2、http:</span><span style="color: #008000;">//</span><span style="color: #008000;">192.9.101.106:8080/cms/services/UserService?wsdl 表示Webservice服务地址。</span><br />
3、注:相关的依赖包须存放在lib目录下，依赖包包括：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">axis.jar<br />
axis</span><span style="color: #000000;">-</span><span style="color: #000000;">ant.jar<br />
axis</span><span style="color: #000000;">-</span><span style="color: #000000;">schema.jar<br />
commons</span><span style="color: #000000;">-</span><span style="color: #000000;">discovery</span><span style="color: #000000;">-</span><span style="color: #000000;">0.2</span><span style="color: #000000;">.jar<br />
commons</span><span style="color: #000000;">-</span><span style="color: #000000;">logging</span><span style="color: #000000;">-</span><span style="color: #000000;">1.0</span><span style="color: #000000;">.</span><span style="color: #000000;">4</span><span style="color: #000000;">.jar<br />
jaxrpc.jar<br />
log4j</span><span style="color: #000000;">-</span><span style="color: #000000;">1.2</span><span style="color: #000000;">.</span><span style="color: #000000;">8</span><span style="color: #000000;">.jar<br />
saaj.jar<br />
wsdl4j</span><span style="color: #000000;">-</span><span style="color: #000000;">1.5</span><span style="color: #000000;">.</span><span style="color: #000000;">1</span><span style="color: #000000;">.jar</span></div>
<br />
<strong>创建bat文件，并将输入上述命令，执行后，即将在当前目录生成相关的类文件。</strong><br />
<br />
<img src ="http://www.blogjava.net/josson/aggbug/203489.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2008-05-28 14:30 <a href="http://www.blogjava.net/josson/archive/2008/05/28/203489.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSON 是什么东西？</title><link>http://www.blogjava.net/josson/archive/2008/01/17/175935.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Thu, 17 Jan 2008 06:36:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2008/01/17/175935.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/175935.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2008/01/17/175935.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/175935.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/175935.html</trackback:ping><description><![CDATA[<p>　　JSON，JavaScript
Object Notation，一种更轻、更友好的用于接口(AJAX、REST等)数据交换的格式。作为XML的一种替代品，用于表示客户端与服务器间数据交换有效负载的格式。</p>
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 关于json的文章：<a title="JSON 简介" href="http://dev2dev.bea.com.cn/techdoc/2007/03/java-soa-introduction-json.html">JSON 简介</a><br />
<img src ="http://www.blogjava.net/josson/aggbug/175935.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2008-01-17 14:36 <a href="http://www.blogjava.net/josson/archive/2008/01/17/175935.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LDAP/Directory 与数据库比较摘要</title><link>http://www.blogjava.net/josson/archive/2008/01/15/175396.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Tue, 15 Jan 2008 02:57:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2008/01/15/175396.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/175396.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2008/01/15/175396.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/175396.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/175396.html</trackback:ping><description><![CDATA[文摘摘录如下：<br />
<br />
<ol>
    <li><a href="http://www.oreillynet.com/pub/a/sysadmin/2006/07/27/demystifying-ldap.html">LDAP是什么东西,我需要它么?</a></li>
    <li><a href="http://support.novell.com/techcenter/articles/ana20011101.html">我需要LDAP还是数据库?</a></li>
    <li><a href="http://www.duduwolf.com/wiki/2007/411.html">LDAP精炼总结</a></li>
</ol>
<img src ="http://www.blogjava.net/josson/aggbug/175396.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2008-01-15 10:57 <a href="http://www.blogjava.net/josson/archive/2008/01/15/175396.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML/JSON的类库，Xstream!</title><link>http://www.blogjava.net/josson/archive/2008/01/15/175381.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Tue, 15 Jan 2008 02:11:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2008/01/15/175381.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/175381.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2008/01/15/175381.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/175381.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/175381.html</trackback:ping><description><![CDATA[XML/JSON的操作类库，<span class="nobr"><a href="http://xstream.codehaus.org/" title="Visit page outside Confluence" rel="nofollow">codehaus的xstream<sup><img class="rendericon" src="http://wiki.springside.org.cn/images/icons/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7" /></sup></a></span>，很简单的在xml/json和java对象间转换。<br />
<br />
1、所需jar包：<code>xstream-[version].jar</code> 和 <code>xpp3-[version].jar</code> 。xpp3不是必须的，也可以用标准的JAXP DOM parser 来代替，如：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">XStream&nbsp;xstream&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;XStream(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;DomDriver());&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;does&nbsp;not&nbsp;require&nbsp;XPP3&nbsp;library</span></div>
<br />
另外，通过<a title="alias" href="http://xstream.codehaus.org/alias-tutorial.html">alias</a>可实现xml属性的支持。更多功能，请参阅 <a title="Turorial " href="http://xstream.codehaus.org/alias-tutorial.html">Tutorial</a> 。<br />
<br />
2、XML转换代码片段：<br />
Class 转换为 xml 的代码片段:<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->XStream xstream = new XStream();
<pre>xstream.alias("person", Person.class);<br />
xstream.alias("phonenumber", PhoneNumber.class);</pre>
<span style="color: #000000;">Person&nbsp;joe&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Person(</span><span style="color: #000000;">"</span><span style="color: #000000;">Joe</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">Walnes</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
joe.setPhone(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;PhoneNumber(</span><span style="color: #000000;">123</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">1234-456</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br />
joe.setFax(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;PhoneNumber(</span><span style="color: #000000;">123</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">9999-999</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br />
String&nbsp;xml&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;xstream.toXML(joe);</span></div>
<br />
The resulting XML looks like this:<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">person</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">firstname</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">Joe</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">firstname</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">lastname</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">Walnes</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">lastname</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">phone</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">code</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">123</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">code</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">number</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">1234-456</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">number</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">phone</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">fax</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">code</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">123</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">code</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">number</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">9999-999</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">number</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">fax</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">person</span><span style="color: #0000ff;">&gt;</span></div>
<br />
xml转换为java类的代码片段:<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">Person&nbsp;newJoe&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(Person)xstream.fromXML(xml);</span></div>
<br />
3、JSON<br />
<pre>另需jar包:jettison.jar 、stax-api.jar。JSON <a title="Turorial" href="http://xstream.codehaus.org/json-tutorial.html">Turorial</a> 。<br />
<strong></strong></pre>
<p><strong><span style="font-family: 黑体;">Write to json:</span></strong></p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;org.sensatic.json.test;<br />
<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;com.thoughtworks.xstream.XStream;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;<br />
<br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;WriteTest&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Product&nbsp;product&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Product(</span><span style="color: #000000;">"</span><span style="color: #000000;">Banana</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">123</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">23.00</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XStream&nbsp;xstream&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;XStream(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;JettisonMappedXmlDriver());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xstream.alias(</span><span style="color: #000000;">"</span><span style="color: #000000;">product</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;Product.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; System.out.println(xstream.toXML(product));&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
<strong><span style="font-family: 黑体;">Read from json:</span></strong><br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;org.sensatic.json.test;<br />
<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;com.thoughtworks.xstream.XStream;<br />
</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;<br />
<br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;ReadTest&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;json&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">{\</span><span style="color: #000000;">"</span><span style="color: #000000;">product\</span><span style="color: #000000;">"</span><span style="color: #000000;">:{\</span><span style="color: #000000;">"</span><span style="color: #000000;">name\</span><span style="color: #000000;">"</span><span style="color: #000000;">:\</span><span style="color: #000000;">"</span><span style="color: #000000;">Banana\</span><span style="color: #000000;">"</span><span style="color: #000000;">,\</span><span style="color: #000000;">"</span><span style="color: #000000;">id\</span><span style="color: #000000;">"</span><span style="color: #000000;">:\</span><span style="color: #000000;">"</span><span style="color: #000000;">123</span><span style="color: #000000;">\</span><span style="color: #000000;">""</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">,\</span><span style="color: #000000;">"</span><span style="color: #000000;">price\</span><span style="color: #000000;">"</span><span style="color: #000000;">:\</span><span style="color: #000000;">"</span><span style="color: #000000;">23.0</span><span style="color: #000000;">\</span><span style="color: #000000;">"</span><span style="color: #000000;">}}</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XStream&nbsp;xstream&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;XStream(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;JettisonMappedXmlDriver());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xstream.alias(</span><span style="color: #000000;">"</span><span style="color: #000000;">product</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;Product.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Product&nbsp;product&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(Product)xstream.fromXML(json);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(product.getName());<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<br />
And that's how simple XStream is!<br />
<img src ="http://www.blogjava.net/josson/aggbug/175381.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2008-01-15 10:11 <a href="http://www.blogjava.net/josson/archive/2008/01/15/175381.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>apache mina(NIO)</title><link>http://www.blogjava.net/josson/archive/2008/01/14/175089.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Mon, 14 Jan 2008 02:21:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2008/01/14/175089.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/175089.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2008/01/14/175089.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/175089.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/175089.html</trackback:ping><description><![CDATA[<strong>
使用 Apache MINA 开发高性能网络应用程序：</strong><br />
<a href="http://www.ibm.com/developerworks/cn/opensource/os-cn-apmina/">http://www.ibm.com/developerworks/cn/opensource/os-cn-apmina/</a><br />
<img src ="http://www.blogjava.net/josson/aggbug/175089.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2008-01-14 10:21 <a href="http://www.blogjava.net/josson/archive/2008/01/14/175089.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Embedding Jetty</title><link>http://www.blogjava.net/josson/archive/2008/01/03/172462.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Thu, 03 Jan 2008 06:03:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2008/01/03/172462.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/172462.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2008/01/03/172462.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/172462.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/172462.html</trackback:ping><description><![CDATA[1、所需的jar包(jsp2.1):<br />
<ul>
    <li>servlet-api-2.5-6.x.jar</li>
    <li>jetty-util-6.x.jar</li>
    <li>jetty-6.x.jar</li>
    <li>ant-1.6.5.jar</li>
    <li>core-3.1.1.jar</li>
    <li>jsp-2.1.jar</li>
    <li>jsp-api-2.1.jar</li>
</ul>
2、示例代码片段：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;&nbsp; //设置web根目录<br />
&nbsp;&nbsp;&nbsp; String&nbsp;rootDirectory&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;System.getProperty(</span><span style="color: #000000;">"</span><span style="color: #000000;">user.dir</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Context&nbsp;context&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;WebAppContext(contexts,&nbsp;rootDirectory</span><span style="color: #000000;">+</span><span style="color: #000000;">"</span><span style="color: #000000;">/webapp</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">/</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;context.setWelcomeFiles(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;String[]{</span><span style="color: #000000;">"</span><span style="color: #000000;">index.jsp</span><span style="color: #000000;">"</span><span style="color: #000000;">});<br />
<br />
&nbsp;&nbsp;&nbsp; //</span><span style="color: #000000;">端口</span><span style="color: #000000;">监听<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;port&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">80</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Server&nbsp;server&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Server();<br />
&nbsp;&nbsp;&nbsp;&nbsp;Connector&nbsp;httpConnector&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;SelectChannelConnector();<br />
&nbsp;&nbsp;&nbsp;&nbsp;httpConnector.setHost(</span><span style="color: #0000ff;">null</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;httpConnector.setPort(port);<br />
&nbsp;&nbsp;&nbsp;&nbsp;server.addConnector(httpConnector);<br />
<br />
&nbsp;&nbsp;&nbsp; //设置Handler<br />
&nbsp;&nbsp;&nbsp;&nbsp;server.setHandlers(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Handler[]&nbsp;{&nbsp;contexts,&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;DefaultHandler()&nbsp;});<br />
&nbsp;&nbsp;&nbsp;&nbsp;ServletHandler&nbsp;handler&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ServletHandler();<br />
&nbsp;&nbsp;&nbsp;&nbsp;handler.addServletWithMapping(HttpDemoServlet.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">/</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;ContextHandler contextHandler&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ContextHandler(contexts,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">/httpdemo</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp; contextHandler.setHandler(handler);<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //启动服务.<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; server.start();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">catch</span><span style="color: #000000;">&nbsp;(Exception&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br />
<img src ="http://www.blogjava.net/josson/aggbug/172462.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2008-01-03 14:03 <a href="http://www.blogjava.net/josson/archive/2008/01/03/172462.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用jetty开发web应用</title><link>http://www.blogjava.net/josson/archive/2008/01/03/172456.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Thu, 03 Jan 2008 05:51:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2008/01/03/172456.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/172456.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2008/01/03/172456.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/172456.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/172456.html</trackback:ping><description><![CDATA[Jetty 当前版本为6.1.x，支持servlet2.5、jsp 2.1/2.0。（http://docs.codehaus.org/display/JETTY）<br />
<br />
jetty主要的jar为jetty-6.1.1.jar，servlet-api-2.5-6.1.1.jar，jetty-util-
6.1.1.jar。启动的jar
为start.jar。还有jsp规范的jar。jsp2.1,好像已经减了不少的jar了，只有4个文件core-3.1.1.jar，ant-
1.6.5.jar，jsp-2.1.jar，jsp-api-2.1.jar。core是使用eclipse的jdt，进行jsp编译。<br />
<br />
jetty的主要配置文件为etc/jetty.xml，当然你可以自己指定别的文件。在start.jar中有个start.config文件是默认的环境配置，以及指定默认的配置文件。可以手工替换。<br />
<br />
&nbsp;&nbsp;&nbsp; 启动jetty很简单，在命令行下面<strong><span style="color: red;">java -jar start.jar</span></strong>；如果需要指定start.config，使用java -DSTART=<strong><span style="color: red;">start.config -jar start.jart</span></strong>；配置web 应用也非常的简单：更改jetty.xml就行了，增加web应用的方式包括，直接放置应用在webapps下面，或者配置以下的context<br />
<br />
配置Virtual hosts:<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">New&nbsp;</span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="org.mortbay.jetty.webapp.WebAppContext"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;&lt;</span><span style="color: #800000;">Ref&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="contexts"</span><span style="color: #0000ff;">/&gt;&lt;/</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;&lt;</span><span style="color: #800000;">SystemProperty&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="jetty.home"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">/webapps/xxx.war</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">/xxx</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Set&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="defaultsDescriptor"</span><span style="color: #0000ff;">&gt;&lt;</span><span style="color: #800000;">SystemProperty&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="jetty.home"</span><span style="color: #ff0000;">&nbsp;default</span><span style="color: #0000ff;">="."</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">/etc/webdefault.xml</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Set</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Set&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="VirtualHosts"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Array&nbsp;</span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="java.lang.String"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Item</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">127.0.0.1</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Item</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Item</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">www.sample.com</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Item</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Item</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">www.</span><span style="color: #000000;">sample</span><span style="color: #000000;">.net</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Item</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Item</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">www.</span><span style="color: #000000;">sample</span><span style="color: #000000;">.org</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Item</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Array</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Set</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">New</span><span style="color: #0000ff;">&gt;</span></div>
<br />
context配置($JETTY-HOME/contexts/javadoc.xml)：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Configure&nbsp;</span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="org.mortbay.jetty.servlet.Context"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Set&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="contextPath"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">/javadoc</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Set</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Set&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="resourceBase"</span><span style="color: #0000ff;">&gt;&lt;</span><span style="color: #800000;">SystemProperty&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="jetty.home"</span><span style="color: #ff0000;">&nbsp;default</span><span style="color: #0000ff;">="."</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">/javadoc/</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Set</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Call&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="addServlet"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">org.mortbay.jetty.servlet.DefaultServlet</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">/</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Call</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Configure</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
<br />
</span></div>
<br />
默认webapp目录配置：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Call&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="addLifeCycle"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">New&nbsp;</span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="org.mortbay.jetty.deployer.WebAppDeployer"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Set&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="contexts"</span><span style="color: #0000ff;">&gt;&lt;</span><span style="color: #800000;">Ref&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="Contexts"</span><span style="color: #0000ff;">/&gt;&lt;/</span><span style="color: #800000;">Set</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Set&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="webAppDir"</span><span style="color: #0000ff;">&gt;&lt;</span><span style="color: #800000;">SystemProperty&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="jetty.home"</span><span style="color: #ff0000;">&nbsp;default</span><span style="color: #0000ff;">="."</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">/webapps</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Set</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Set&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="parentLoaderPriority"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">false</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Set</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Set&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="extract"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">true</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Set</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Set&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="allowDuplicates"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">false</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Set</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Set&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="defaultsDescriptor"</span><span style="color: #0000ff;">&gt;&lt;</span><span style="color: #800000;">SystemProperty&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="jetty.home"</span><span style="color: #ff0000;">&nbsp;default</span><span style="color: #0000ff;">="."</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">/etc/webdefault.xml</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Set</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">New</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Call</span><span style="color: #0000ff;">&gt;</span></div>
<br />
<br />
默认的web.xml配置文件为webdefault.xml，如果想配置相应的web参数，可以更改其应用。默认的端口为8080,如果想修改，更改：jetty.port属性<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Call&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="addConnector"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">New&nbsp;</span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="org.mortbay.jetty.nio.SelectChannelConnector"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Set&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="port"</span><span style="color: #0000ff;">&gt;&lt;</span><span style="color: #800000;">SystemProperty&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="jetty.port"</span><span style="color: #ff0000;">&nbsp;default</span><span style="color: #0000ff;">="8080"</span><span style="color: #0000ff;">/&gt;&lt;/</span><span style="color: #800000;">Set</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Set&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="maxIdleTime"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">30000</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Set</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Set&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="Acceptors"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">2</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Set</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Set&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="confidentialPort"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">8443</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Set</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">New</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Arg</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Call</span><span style="color: #0000ff;">&gt;</span></div>
<br />
更详细的配置信息可查询官网。<br />
<img src ="http://www.blogjava.net/josson/aggbug/172456.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2008-01-03 13:51 <a href="http://www.blogjava.net/josson/archive/2008/01/03/172456.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>中文 J2ME中文编码问题</title><link>http://www.blogjava.net/josson/archive/2007/12/28/171256.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Fri, 28 Dec 2007 09:37:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2007/12/28/171256.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/171256.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2007/12/28/171256.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/171256.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/171256.html</trackback:ping><description><![CDATA[http://wiki.forum.nokia.com/index.php/%E4%B8%AD%E6%96%87_J2ME%E4%B8%AD%E6%96%87%E7%BC%96%E7%A0%81%E9%97%AE%E9%A2%98<br />
<img src ="http://www.blogjava.net/josson/aggbug/171256.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2007-12-28 17:37 <a href="http://www.blogjava.net/josson/archive/2007/12/28/171256.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>性能测试（并发负载压力）测试分析</title><link>http://www.blogjava.net/josson/archive/2007/12/18/168455.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Tue, 18 Dec 2007 05:16:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2007/12/18/168455.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/168455.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2007/12/18/168455.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/168455.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/168455.html</trackback:ping><description><![CDATA[(来源测试时代,http://www.testage.net)<br />
<br />
多数人对怎样去分析工具收集到的测试结果感到无从下手，下面我就把个人工作中的体会和收集到的有关资料整理出来，希望能对大家分析测试结果有所帮助。<br />
<br />
分析原则：<br />
&nbsp; &nbsp; &#8226; 具体问题具体分析（这是由于不同的应用系统，不同的测试目的，不同的性能关注点）<br />
&nbsp; &nbsp; &#8226; 查找瓶颈时按以下顺序，由易到难。<br />
&nbsp; &nbsp; 服务器硬件瓶颈-〉网络瓶颈（对局域网，可以不考虑）-〉服务器操作系统瓶颈（参数配置）-〉<span href="http://www.testage.net/bbs1/tag.php?name=%D6%D0%BC%E4%BC%FE" onclick="tagshow(event)" class="t_tag">中间件</span>瓶颈（参数配置，数据库，<span href="http://www.testage.net/bbs1/tag.php?name=web" onclick="tagshow(event)" class="t_tag">web</span><span href="http://www.testage.net/bbs1/tag.php?name=%B7%FE%CE%F1" onclick="tagshow(event)" class="t_tag">服务</span>器等）-〉应用瓶颈（SQL语句、数据库设计、业务逻辑、算法等）<br />
&nbsp; &nbsp; 注：以上过程并不是每个分析中都需要的，要根据测试目的和要求来确定分析的深度。对一些要求低的，我们分析到应用系统在将来大的负载压力（并发用户数、数据量）下，系统的硬件瓶颈在哪儿就够了。<br />
&nbsp; &nbsp; &#8226; 分段排除法 很有效<br />
<br />
分析的信息来源：<br />
&nbsp; &nbsp; &#8226;1 根据场景运行过程中的错误提示信息<br />
&nbsp; &nbsp; &#8226;2 根据测试结果收集到的监控指标数据<br />
<br />
一．错误提示分析<br />
<br />
分析实例：<br />
1 &#8226;Error: Failed to connect to server "10.10.10.30:8080": [10060] Connection<br />
&nbsp;&nbsp;&#8226;Error: timed out Error: Server "10.10.10.30" has shut down the connection prematurely<br />
<br />
&nbsp;&nbsp;分析：<br />
&#8226;A、应用服务死掉。<br />
&nbsp; &nbsp;（小用户时：程序上的问题。程序上处理数据库的问题）<br />
&#8226;B、应用服务没有死<br />
&nbsp; &nbsp;（应用服务参数设置问题）<br />
&nbsp; &nbsp;
例：在许多客户端连接Weblogic应用服务器被拒绝，而在服务器端没有错误显示，则有可能是Weblogic中的server元素的
AcceptBacklog属性值设得过低。如果连接时收到connection refused消息，说明应提高该值，每次增加25％<br />
&#8226;C、数据库的连接<br />
&nbsp; &nbsp;(1、在应用服务的性能参数可能太小了 2、数据库启动的最大连接数（跟硬件的内存有关）)<br />
<br />
2&nbsp;&nbsp;Error: Page download timeout (120 seconds) has expired <br />
<br />
分析：可能是以下原因造成<br />
&#8226;A、应用服务参数设置太大导致服务器的瓶颈<br />
&#8226;B、页面中图片太多<br />
&#8226;C、在程序处理表的时候检查字段太大多<br />
<br />
二．监控指标数据分析<br />
<br />
1．最大并发用户数：<br />
应用系统在当前环境（硬件环境、网络环境、软件环境（参数配置））下能承受的最大并发用户数。<br />
在方案运行中，如果出现了大于3个用户的业务操作失败，或出现了服务器shutdown的情况，则说明在当前环境下，系统承受不了当前并发用户的负载压力，那么最大并发用户数就是前一个没有出现这种现象的并发用户数。<br />
如果测得的最大并发用户数到达了性能要求，且各服务器资源情况良好，业务操作响应时间也达到了用户要求，那么OK。否则，再根据各服务器的资源情况和业务操作响应时间进一步分析原因所在。<br />
<br />
2．业务操作响应时间：<br />
&#8226; 分析方案运行情况应从平均事务响应时间图和事务性能摘要图开始。使用&#8220;事务性能摘要&#8221;图，可以确定在方案执行期间响应时间过长的事务。<br />
&#8226; 细分事务并分析每个页面组件的性能。查看过长的事务响应时间是由哪些页面组件引起的？问题是否与网络或服务器有关？<br />
&#8226; 如果服务器耗时过长，请使用相应的服务器图确定有问题的服务器度量并查明服务器性能下降的原因。如果网络耗时过长，请使用&#8220;网络监视器&#8221;图确定导致性能瓶颈的网络问题<br />
3．服务器资源监控指标：<br />
内存：<br />
&nbsp; &nbsp; 1 UNIX资源监控中指标内存页交换速率（Paging rate），如果该值偶尔走高，表明当时有线程竞争内存。如果持续很高，则内存可能是瓶颈。也可能是内存访问命中率低。<br />
<br />
&nbsp; &nbsp; 2 Windows资源监控中，如果Process\Private Bytes计数器和Process\Working <span href="http://www.testage.net/bbs1/tag.php?name=Set" onclick="tagshow(event)" class="t_tag">Set</span>计数器的值在长时间内持续升高，同时Memory\Available bytes计数器的值持续降低，则很可能存在内存泄漏。<br />
<br />
内存资源成为系统性能的瓶颈的征兆:<br />
&nbsp; &nbsp; 很高的换页率(high pageout rate);<br />
&nbsp; &nbsp; 进程进入不活动状态;<br />
&nbsp; &nbsp; 交换区所有磁盘的活动次数可高;<br />
&nbsp; &nbsp; 可高的全局系统CPU利用率; <br />
&nbsp; &nbsp; 内存不够出错(out of memory errors) <br />
<br />
处理器：<br />
&nbsp; &nbsp; 1 UNIX资源监控（Windows操作系统同理）中指标CPU占用率（CPU
utilization），如果该值持续超过95%，表明瓶颈是CPU。可以考虑增加一个处理器或换一个更快的处理器。如果服务器专用于SQL
Server,可接受的最大上限是80-85% <br />
&nbsp; &nbsp; 合理使用的范围在60%至70%。<br />
&nbsp; &nbsp; 2 Windows资源监控中，如果System\Processor Queue Length大于2，而处理器利用率（Processor Time）一直很低，则存在着处理器阻塞。<br />
<br />
CPU资源成为系统性能的瓶颈的征兆:&nbsp; &nbsp;<br />
&nbsp; &nbsp;&nbsp;&nbsp;很慢的响应时间(slow response time) <br />
&nbsp; &nbsp;&nbsp;&nbsp;CPU空闲时间为零(zero percent idle CPU) <br />
&nbsp; &nbsp;&nbsp;&nbsp;过高的用户占用CPU时间(high percent user CPU) <br />
&nbsp; &nbsp;&nbsp;&nbsp;过高的系统占用CPU时间(high percent system CPU) <br />
&nbsp; &nbsp; 长时间的有很长的运行进程队列(large run queue size sustained over time) <br />
<br />
磁盘I/O：<br />
&nbsp; &nbsp; 1 UNIX资源监控（Windows操作系统同理）中指标磁盘交换率（Disk rate），如果该参数值一直很高，表明I/O有问题。可考虑更换更快的硬盘系统。<br />
&nbsp; &nbsp; 2 Windows资源监控中，如果 Disk Time和Avg.Disk Queue Length的值很高，而Page Reads/sec页面读取操作速率很低，则可能存在磁盘瓶径。 <br />
<br />
I/O资源成为系统性能的瓶颈的征兆 :<br />
&nbsp; &nbsp;&nbsp;&nbsp;过高的磁盘利用率(high disk utilization) <br />
&nbsp; &nbsp; 太长的磁盘等待队列(large disk queue length) <br />
&nbsp; &nbsp; 等待磁盘I/O的时间所占的百分率太高(large percentage of time waiting for disk I/O) <br />
&nbsp; &nbsp; 太高的物理I/O速率:large physical I/O rate(not sufficient in itself) <br />
&nbsp; &nbsp; 过低的缓存命中率(low buffer cache hit ratio(not sufficient in itself)) <br />
&nbsp; &nbsp; 太长的运行进程队列，但CPU却空闲(large run queue with idle CPU) <br />
<br />
4．数据库服务器：<br />
SQL Server数据库：<br />
&nbsp; &nbsp; 1 SQLServer资源监控中指标缓存点击率（Cache Hit Ratio），该值越高越好。如果持续低于80%，应考虑增加内存。<br />
&nbsp; &nbsp; 2 如果Full Scans/sec（全表扫描/秒）计数器显示的值比1或2高，则应分析你的查询以确定是否确实需要全表扫描，以及SQL查询是否可以被优化。 <br />
&nbsp; &nbsp; 3 Number of Deadlocks/sec(死锁的数量/秒)：死锁对应用程序的可伸缩性非常有害，并且会导致恶劣的用户体验。该计数器的值必须为0。<br />
&nbsp; &nbsp;4 Lock Requests/sec(锁请求/秒)，通过优化查询来减少读取次数，可以减少该计数器的值。<br />
<br />
Oracle数据库：<br />
&nbsp;&nbsp;1 如果自由内存接近于0而且库快存或数据字典快存的命中率小于0.90，那么需要增加SHARED_POOL_SIZE的大小。<br />
&nbsp; &nbsp; 快存（共享SQL区）和数据字典快存的命中率： <br />
&nbsp; &nbsp;select(sum(pins-reloads))/sum(pins) from v$librarycache; <br />
&nbsp; &nbsp; select(sum(gets-getmisses))/sum(gets) from v$rowcache; <br />
&nbsp; &nbsp; 自由内存：&nbsp; &nbsp; select * from v$sgastat where name=&#8217;free memory&#8217;; <br />
2 如果数据的缓存命中率小于0.90，那么需要加大DB_BLOCK_BUFFERS参数的值（单位：块）。<br />
&nbsp;&nbsp;缓冲区高速缓存命中率：<br />
&nbsp; &nbsp; select name,value from v$sysstat where name in ('db block gets&#8217;,<br />
&nbsp; &nbsp; 'consistent gets','physical reads') ; <br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; Hit Ratio = 1-(physical reads / ( db block gets + consistent gets))<br />
3 如果日志缓冲区申请的值较大，则应加大LOG_BUFFER参数的值。<br />
&nbsp; &nbsp; 日志缓冲区的申请情况 ：<br />
&nbsp; &nbsp;&nbsp;&nbsp;select name,value from v$sysstat where name = 'redo log space requests' ;<br />
4 如果内存排序命中率小于0.95，则应加大SORT_AREA_SIZE以避免磁盘排序 。<br />
&nbsp; &nbsp;内存排序命中率 ：<br />
&nbsp; &nbsp;&nbsp;&nbsp;select round((100*b.value)/decode((a.value+b.value), 0, 1,
(a.value+b.value)), 2)from v$sysstat a, v$sysstat b where a.name='sorts
(disk)' and b.name='sorts (memory)' <br />
&nbsp; &nbsp;<br />
&nbsp; &nbsp; 注：上述SQL Server和Oracle数据库分析，只是一些简单、基本的分析，特别是Oracle数据库的分析和优化，是一门专门的技术，进一步的分析可查相关资料。<br />
<br />
<img src ="http://www.blogjava.net/josson/aggbug/168455.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2007-12-18 13:16 <a href="http://www.blogjava.net/josson/archive/2007/12/18/168455.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat JVM设置</title><link>http://www.blogjava.net/josson/archive/2007/11/30/164226.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Fri, 30 Nov 2007 04:35:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2007/11/30/164226.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/164226.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2007/11/30/164226.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/164226.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/164226.html</trackback:ping><description><![CDATA[<span style="font-size: 9pt; color: black; font-family: ˎ̥;" lang="EN-US"><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="font-family: 宋体;"><span style="font-size: 12pt;"><span style="font-size: 9pt; color: black; font-family: ˎ̥;" lang="EN-US"><span style="font-size: 12pt;"><span style="font-size: 10pt;"><span style="font-family: 宋体;">1、JVM设置：<br />
<br />
找到%TOMCAT_HOME%/bin/catalina.sh, 找到如下代码:</span></span></span><br />
</span>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">#&nbsp;-----&nbsp;Execute&nbsp;The&nbsp;Requested&nbsp;Command&nbsp;-----------------------------------------</span></div>
<br />
并加入如下设置:<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">CATALINA_OPTS="$CATALINA_OPTS&nbsp;-Xms128m&nbsp;-Xmx256m&nbsp;$JPDA_OPTS"</span></div>
<br />
<span style="font-size: 9pt; color: black; font-family: 宋体;">最小内存</span><span style="font-size: 9pt; color: black; font-family: ˎ̥;" lang="EN-US">128M</span><span style="font-size: 9pt; color: black; font-family: 宋体;">，最大</span><span style="font-size: 9pt; color: black; font-family: ˎ̥;" lang="EN-US">256M</span><span style="font-size: 9pt; color: black; font-family: 宋体;">，按你的要求设置，不过最大只能</span><span style="font-size: 9pt; color: black; font-family: ˎ̥;" lang="EN-US">1024M</span><span style="font-size: 9pt; color: black; font-family: 宋体;">。</span><span style="font-size: 9pt; color: black; font-family: ˎ̥;" lang="EN-US"><br />
<br />
2、图片不能显示：<br />
</span>若Linux系统在字符模式下, 处理图片用时,须作如下设置:<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">JAVA_OPTS="$JAVA_OPTS&nbsp;-Djava.awt.headless=true"</span></div>
</span></span></span></span></span><br />
<img src ="http://www.blogjava.net/josson/aggbug/164226.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2007-11-30 12:35 <a href="http://www.blogjava.net/josson/archive/2007/11/30/164226.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XFire without spring.</title><link>http://www.blogjava.net/josson/archive/2007/11/23/162591.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Fri, 23 Nov 2007 04:30:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2007/11/23/162591.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/162591.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2007/11/23/162591.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/162591.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/162591.html</trackback:ping><description><![CDATA[<p align="left">1、接口UserService.java：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;demo.xfire;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;demo.xfire.model.UserInfoBean;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_89_319_Open_Image" onclick="this.style.display='none'; Codehighlighter1_89_319_Open_Text.style.display='none'; Codehighlighter1_89_319_Closed_Image.style.display='inline'; Codehighlighter1_89_319_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_89_319_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_89_319_Closed_Text.style.display='none'; Codehighlighter1_89_319_Open_Image.style.display='inline'; Codehighlighter1_89_319_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;UserService&nbsp;</span><span id="Codehighlighter1_89_319_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_89_319_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_93_144_Open_Image" onclick="this.style.display='none'; Codehighlighter1_93_144_Open_Text.style.display='none'; Codehighlighter1_93_144_Closed_Image.style.display='inline'; Codehighlighter1_93_144_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_93_144_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_93_144_Closed_Text.style.display='none'; Codehighlighter1_93_144_Open_Image.style.display='inline'; Codehighlighter1_93_144_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_93_144_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_93_144_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;获取用户信息.<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;username<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@return</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;UserInfoBean&nbsp;getUserInfo(String&nbsp;username);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_200_267_Open_Image" onclick="this.style.display='none'; Codehighlighter1_200_267_Open_Text.style.display='none'; Codehighlighter1_200_267_Closed_Image.style.display='inline'; Codehighlighter1_200_267_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_200_267_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_200_267_Closed_Text.style.display='none'; Codehighlighter1_200_267_Open_Image.style.display='inline'; Codehighlighter1_200_267_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_200_267_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_200_267_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;用户认证.<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;username<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;passwd<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@return</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;login(String&nbsp;username,String&nbsp;passwd);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p align="left"><br />
2、实现UserServiceImpl.java：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;demo.xfire;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;demo.xfire.model.UserInfoBean;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_114_441_Open_Image" onclick="this.style.display='none'; Codehighlighter1_114_441_Open_Text.style.display='none'; Codehighlighter1_114_441_Closed_Image.style.display='inline'; Codehighlighter1_114_441_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_114_441_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_114_441_Closed_Text.style.display='none'; Codehighlighter1_114_441_Open_Image.style.display='inline'; Codehighlighter1_114_441_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;UserServiceImpl&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;UserService&nbsp;</span><span id="Codehighlighter1_114_441_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_114_441_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_118_169_Open_Image" onclick="this.style.display='none'; Codehighlighter1_118_169_Open_Text.style.display='none'; Codehighlighter1_118_169_Closed_Image.style.display='inline'; Codehighlighter1_118_169_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_118_169_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_118_169_Closed_Text.style.display='none'; Codehighlighter1_118_169_Open_Image.style.display='inline'; Codehighlighter1_118_169_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_118_169_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_118_169_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;获取用户信息.<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;username<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@return</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_221_268_Open_Image" onclick="this.style.display='none'; Codehighlighter1_221_268_Open_Text.style.display='none'; Codehighlighter1_221_268_Closed_Image.style.display='inline'; Codehighlighter1_221_268_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_221_268_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_221_268_Closed_Text.style.display='none'; Codehighlighter1_221_268_Open_Image.style.display='inline'; Codehighlighter1_221_268_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;UserInfoBean&nbsp;getUserInfo(String&nbsp;username)&nbsp;</span><span id="Codehighlighter1_221_268_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_221_268_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;JingManager.getUserInfo(username);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_273_340_Open_Image" onclick="this.style.display='none'; Codehighlighter1_273_340_Open_Text.style.display='none'; Codehighlighter1_273_340_Closed_Image.style.display='inline'; Codehighlighter1_273_340_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_273_340_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_273_340_Closed_Text.style.display='none'; Codehighlighter1_273_340_Open_Image.style.display='inline'; Codehighlighter1_273_340_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_273_340_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_273_340_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;用户认证.<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;username<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;passwd<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@return</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_390_439_Open_Image" onclick="this.style.display='none'; Codehighlighter1_390_439_Open_Text.style.display='none'; Codehighlighter1_390_439_Closed_Image.style.display='inline'; Codehighlighter1_390_439_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_390_439_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_390_439_Closed_Text.style.display='none'; Codehighlighter1_390_439_Open_Image.style.display='inline'; Codehighlighter1_390_439_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;login(String&nbsp;username,String&nbsp;passwd)</span><span id="Codehighlighter1_390_439_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_390_439_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;JingManager.login(username,&nbsp;passwd);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<p align="left"><br />
3、XFire服务配置services.xml，放置到/WEB-INF/目录下（具体路径须视web.xml中的设置而定）：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">beans&nbsp;</span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://xfire.codehaus.org/config/1.0"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">service</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">UserService</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">namespace</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">http://xfire.demo/service/UserService</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">namespace</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">serviceClass</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">demo.xfire.UserService</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">serviceClass</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">implementationClass</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">demo.xfire.UserServiceImpl</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">implementationClass</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">service</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">beans</span><span style="color: #0000ff">&gt;</span></div>
<br />
4、配置Web.xml文件：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">xfire</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&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">org.codehaus.xfire.transport.http.XFireConfigurableServlet</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">config</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">services.xml</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">xfire</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&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">/service/*</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">&gt;</span></div>
<br />
启动服务后，<a href="http://localhost:8080/appname/UserService?wsdl">http://localhost:8080/appname/UserService?wsdl</a>即可以查看用户接口服务的wsdl了。
<img src ="http://www.blogjava.net/josson/aggbug/162591.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2007-11-23 12:30 <a href="http://www.blogjava.net/josson/archive/2007/11/23/162591.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache CXF: Writing a service with Spring</title><link>http://www.blogjava.net/josson/archive/2007/11/21/162238.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Wed, 21 Nov 2007 15:21:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2007/11/21/162238.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/162238.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2007/11/21/162238.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/162238.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/162238.html</trackback:ping><description><![CDATA[一、设置构建路径（必要的jar包）<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">commons-logging-1.1.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />geronimo-activation_1.1_spec-1.0-M1.jar&nbsp;(or&nbsp;Sun's&nbsp;Activation&nbsp;jar)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />geronimo-annotation_1.0_spec-1.1.jar&nbsp;(JSR&nbsp;250)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />geronimo-javamail_1.4_spec-1.0-M1.jar&nbsp;(or&nbsp;Sun's&nbsp;JavaMail&nbsp;jar)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />geronimo-servlet_2.5_spec-1.1-M1.jar&nbsp;(or&nbsp;Sun's&nbsp;Servlet&nbsp;jar)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />geronimo-ws-metadata_2.0_spec-1.1.1.jar&nbsp;(JSR&nbsp;181)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />jaxb-api-2.0.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />jaxb-impl-2.0.5.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />jaxws-api-2.0.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />neethi-2.0.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />saaj-api-1.3.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />saaj-impl-1.3.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />stax-api-1.0.1.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />wsdl4j-1.6.1.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />wstx-asl-3.2.1.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />XmlSchema-1.2.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />xml-resolver-1.2.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />aopalliance-1.0.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />spring-core-2.0.4.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />spring-beans-2.0.4.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />spring-context-2.0.4.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />spring-web-2.0.4.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />cxf-2.0-incubator.jar</span></div>
<br />
二、编写服务类<br />
a). 接口类HelloService.java<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;demo.spring;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.List;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.jws.WebParam;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.jws.WebService;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;demo.spring.model.UserInfoBean;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />@WebService<br />
<img id="Codehighlighter1_185_364_Open_Image" onclick="this.style.display='none'; Codehighlighter1_185_364_Open_Text.style.display='none'; Codehighlighter1_185_364_Closed_Image.style.display='inline'; Codehighlighter1_185_364_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_185_364_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_185_364_Closed_Text.style.display='none'; Codehighlighter1_185_364_Open_Image.style.display='inline'; Codehighlighter1_185_364_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;HelloService&nbsp;</span><span id="Codehighlighter1_185_364_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_185_364_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;sayHello(@WebParam(name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">name</span><span style="color: #000000">"</span><span style="color: #000000">)String&nbsp;text);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;UserInfoBean&nbsp;getUserInfo(@WebParam(name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">username</span><span style="color: #000000">"</span><span style="color: #000000">)String&nbsp;name);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #000000">UserInfoBean</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;getUsers();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<br />
b).实现类HelloServiceImpl.java<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;demo.spring;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.ArrayList;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.List;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.jws.WebService;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;demo.cxf.server.HelloService;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;demo.spring.model.UserInfoBean;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />@WebService(endpointInterface</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">demo.spring.HelloService</span><span style="color: #000000">"</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_293_728_Open_Image" onclick="this.style.display='none'; Codehighlighter1_293_728_Open_Text.style.display='none'; Codehighlighter1_293_728_Closed_Image.style.display='inline'; Codehighlighter1_293_728_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_293_728_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_293_728_Closed_Text.style.display='none'; Codehighlighter1_293_728_Open_Image.style.display='inline'; Codehighlighter1_293_728_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;HelloServiceImpl&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;HelloService&nbsp;</span><span id="Codehighlighter1_293_728_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_293_728_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_333_368_Open_Image" onclick="this.style.display='none'; Codehighlighter1_333_368_Open_Text.style.display='none'; Codehighlighter1_333_368_Closed_Image.style.display='inline'; Codehighlighter1_333_368_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_333_368_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_333_368_Closed_Text.style.display='none'; Codehighlighter1_333_368_Open_Image.style.display='inline'; Codehighlighter1_333_368_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;sayHello(String&nbsp;text)&nbsp;</span><span id="Codehighlighter1_333_368_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_333_368_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Hello,</span><span style="color: #000000">"</span><span style="color: #000000">.concat(text);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_420_572_Open_Image" onclick="this.style.display='none'; Codehighlighter1_420_572_Open_Text.style.display='none'; Codehighlighter1_420_572_Closed_Image.style.display='inline'; Codehighlighter1_420_572_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_420_572_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_420_572_Closed_Text.style.display='none'; Codehighlighter1_420_572_Open_Image.style.display='inline'; Codehighlighter1_420_572_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;UserInfoBean&nbsp;getUserInfo(String&nbsp;username)</span><span id="Codehighlighter1_420_572_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_420_572_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UserInfoBean&nbsp;user&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;UserInfoBean();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setRealname(</span><span style="color: #000000">"</span><span style="color: #000000">捷克</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setUsername(username);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setEmail(</span><span style="color: #000000">"</span><span style="color: #000000">jack@chaina.com</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;user;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_613_726_Open_Image" onclick="this.style.display='none'; Codehighlighter1_613_726_Open_Text.style.display='none'; Codehighlighter1_613_726_Closed_Image.style.display='inline'; Codehighlighter1_613_726_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_613_726_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_613_726_Closed_Text.style.display='none'; Codehighlighter1_613_726_Open_Image.style.display='inline'; Codehighlighter1_613_726_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #000000">UserInfoBean</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;getUsers()</span><span id="Codehighlighter1_613_726_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_613_726_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #000000">UserInfoBean</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;users&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</span><span style="color: #000000">&lt;</span><span style="color: #000000">UserInfoBean</span><span style="color: #000000">&gt;</span><span style="color: #000000">();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;users.add(getUserInfo(</span><span style="color: #000000">"</span><span style="color: #000000">john</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;users;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<br />
三、声明服务Bean<br />
在WEB-INF目录下创建成一个beans.xml文件，以声明endpoint bean:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">beans&nbsp;</span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://www.springframework.org/schema/beans"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</span><span style="color: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:jaxws</span><span style="color: #0000ff">="http://cxf.apache.org/jaxws"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000ff">="<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />http://www.springframework.org/schema/beans&nbsp;http://www.springframework.org/schema/beans/spring-beans.xsd<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />http://cxf.apache.org/jaxws&nbsp;http://cxf.apache.org/schemas/jaxws.xsd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">import&nbsp;</span><span style="color: #ff0000">resource</span><span style="color: #0000ff">="classpath:META-INF/cxf/cxf.xml"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">import&nbsp;</span><span style="color: #ff0000">resource</span><span style="color: #0000ff">="classpath:META-INF/cxf/cxf-extension-soap.xml"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">import&nbsp;</span><span style="color: #ff0000">resource</span><span style="color: #0000ff">="classpath:META-INF/cxf/cxf-servlet.xml"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">jaxws:endpoint&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="helloService"</span><span style="color: #ff0000">&nbsp;implementor</span><span style="color: #0000ff">="demo.spring.HelloServiceImpl"</span><span style="color: #ff0000">&nbsp;address</span><span style="color: #0000ff">="/HelloService"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">beans</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
若使用Spring定义的bean，也可这样声明：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="helloService"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="demo.spring.HelloServiceImpl"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">jaxws:endpoint&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="helloServiceImpl"</span><span style="color: #ff0000">&nbsp;implementor</span><span style="color: #0000ff">="#helloService"</span><span style="color: #ff0000">&nbsp;address</span><span style="color: #0000ff">="/HelloService"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span></div>
<br />
四、定义Servlet<br />
修改WEB-INF/目录下的web.xml文件，添加如下定义：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">context-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">contextConfigLocation</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">WEB-INF/beans.xml</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">context-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">listener</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">listener-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.springframework.web.context.ContextLoaderListener<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">listener-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">listener</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">CXFServlet</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">display-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">CXF&nbsp;Servlet</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">display-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org.apache.cxf.transport.servlet.CXFServlet<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">load-on-startup</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">1</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">load-on-startup</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&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">CXFServlet</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/*</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&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>
<br />
五、客户端代码<br />
client_beans.xml<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">beans&nbsp;</span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://www.springframework.org/schema/beans"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</span><span style="color: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:jaxws</span><span style="color: #0000ff">="http://cxf.apache.org/jaxws"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000ff">="<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />http://www.springframework.org/schema/beans&nbsp;http://www.springframework.org/schema/beans/spring-beans-2.0.xsd<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />http://cxf.apache.org/jaxws&nbsp;http://cxf.apache.org/schema/jaxws.xsd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="client"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="demo.spring.HelloService"</span><span style="color: #ff0000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;factory-bean</span><span style="color: #0000ff">="clientFactory"</span><span style="color: #ff0000">&nbsp;factory-method</span><span style="color: #0000ff">="create"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="clientFactory"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="org.apache.cxf.jaxws.JaxWsProxyFactoryBean"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="serviceClass"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="demo.spring.HelloService"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="address"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="http://localhost:8080/cxf/HelloService"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">beans</span><span style="color: #0000ff">&gt;</span></div>
<br />
client.java<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClassPathXmlApplicationContext&nbsp;context&nbsp;<br />
<img id="Codehighlighter1_110_148_Open_Image" onclick="this.style.display='none'; Codehighlighter1_110_148_Open_Text.style.display='none'; Codehighlighter1_110_148_Closed_Image.style.display='inline'; Codehighlighter1_110_148_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_110_148_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_110_148_Closed_Text.style.display='none'; Codehighlighter1_110_148_Open_Image.style.display='inline'; Codehighlighter1_110_148_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ClassPathXmlApplicationContext(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;String[]&nbsp;</span><span id="Codehighlighter1_110_148_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_110_148_Open_Text"><span style="color: #000000">{</span><span style="color: #000000">"</span><span style="color: #000000">demo/spring/client/client_beans.xml</span><span style="color: #000000">"</span><span style="color: #000000">}</span></span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HelloService&nbsp;client&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(HelloService)context.getBean(</span><span style="color: #000000">"</span><span style="color: #000000">client</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;response&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;client.sayHello(</span><span style="color: #000000">"</span><span style="color: #000000">Joe</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Response:&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;response);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UserInfoBean&nbsp;user&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;client.getUserInfo(</span><span style="color: #000000">"</span><span style="color: #000000">jack</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getUsername());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #000000">UserInfoBean</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;users&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;client.getUsers();<br />
<img id="Codehighlighter1_537_593_Open_Image" onclick="this.style.display='none'; Codehighlighter1_537_593_Open_Text.style.display='none'; Codehighlighter1_537_593_Closed_Image.style.display='inline'; Codehighlighter1_537_593_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_537_593_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_537_593_Closed_Text.style.display='none'; Codehighlighter1_537_593_Open_Image.style.display='inline'; Codehighlighter1_537_593_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(UserInfoBean&nbsp;u&nbsp;:&nbsp;users)</span><span id="Codehighlighter1_537_593_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_537_593_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(u.getUsername());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.exit(</span><span style="color: #000000">0</span><span style="color: #000000">);</span></div>
<img src ="http://www.blogjava.net/josson/aggbug/162238.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2007-11-21 23:21 <a href="http://www.blogjava.net/josson/archive/2007/11/21/162238.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache CXF 学习笔记</title><link>http://www.blogjava.net/josson/archive/2007/11/21/162234.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Wed, 21 Nov 2007 15:01:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2007/11/21/162234.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/162234.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2007/11/21/162234.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/162234.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/162234.html</trackback:ping><description><![CDATA[Apache CXF 则是由 Celtix 和 XFire 项目整合而生，并且刚刚发布了 2.0.2 的最新版本，不过仍是 Apache 的一个孵化项目。<br />
<br />
一、与Axis2的不同之处<br />
　　1、Apache CXF 支持 WS-Addressing、WS-Policy、WS-RM、WS-Security和WS-I BasicProfile <br />
　　2、Axis2 支持 WS-Addressing、WS-RM、WS-Security和WS-I BasicProfile，WS-Policy将在新版本里得到支持 <br />
　　3、Apache CXF 是根据Spring哲学来进行编写的，即可以无缝地与Spring进行整合 <br />
　　4、Axis2 不是 <br />
　　5、Axis2 支持更多的 data bindings，包括 XMLBeans、JiBX、JaxMe 和 JaxBRI，以及它原生的 data binding（ADB）。 <br />
　　6、Apache CXF 目前仅支持 JAXB 和 Aegis，并且默认是 JAXB 2.0，与 XFire 默认是支持 Aegis 不同，XMLBeans、JiBX 和 Castor 将在 CXF 2.1 版本中得到支持，目前版本是 2.0.2 <br />
　　7、Axis2 支持多种语言，它有 C/C++ 版本。 <br />
　　8、Apache CXF 提供方便的Spring整合方法，可以通过注解、Spring标签式配置来暴露Web Services和消费Web Services<br />
<br />
二、A simple JAX-WS service<br />
原文见<a href="http://cwiki.apache.org/CXF20DOC/a-simple-jax-ws-service.html">http://cwiki.apache.org/CXF20DOC/a-simple-jax-ws-service.html</a><br />
<br />
a). 设置构建路径，将下列jar包放到项目中<br />
the CXF distribution<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">commons-logging-1.1.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />geronimo-activation_1.1_spec-1.0-M1.jar&nbsp;(or&nbsp;Sun's&nbsp;Activation&nbsp;jar)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />geronimo-annotation_1.0_spec-1.1.jar&nbsp;(JSR&nbsp;250)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />geronimo-javamail_1.4_spec-1.0-M1.jar&nbsp;(or&nbsp;Sun's&nbsp;JavaMail&nbsp;jar)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />geronimo-servlet_2.5_spec-1.1-M1.jar&nbsp;(or&nbsp;Sun's&nbsp;Servlet&nbsp;jar)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />geronimo-ws-metadata_2.0_spec-1.1.1.jar&nbsp;(JSR&nbsp;181)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />jaxb-api-2.0.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />jaxb-impl-2.0.5.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />jaxws-api-2.0.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />jetty-6.1.5.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />jetty-util-6.1.5.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />neethi-2.0.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />saaj-api-1.3.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />saaj-impl-1.3.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />stax-api-1.0.1.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />wsdl4j-1.6.1.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />wstx-asl-3.2.1.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />XmlSchema-1.2.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />xml-resolver-1.2.jar</span></div>
<br />
Spring jars <br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">aopalliance-1.0.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />spring-core-2.0.4.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />spring-beans-2.0.4.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />spring-context-2.0.4.jar<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />spring-web-2.0.4.jar</span></div>
<br />
CXF jar<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">cxf-2.0-incubator.jar</span></div>
<br />
b). 编写Service代码<br />
接口HelloService.java<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;demo.cxf.server;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.jws.WebParam;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.jws.WebService;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />@WebService<br />
<img id="Codehighlighter1_125_188_Open_Image" onclick="this.style.display='none'; Codehighlighter1_125_188_Open_Text.style.display='none'; Codehighlighter1_125_188_Closed_Image.style.display='inline'; Codehighlighter1_125_188_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_125_188_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_125_188_Closed_Text.style.display='none'; Codehighlighter1_125_188_Open_Image.style.display='inline'; Codehighlighter1_125_188_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;HelloService&nbsp;</span><span id="Codehighlighter1_125_188_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_125_188_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;sayHello(@WebParam(name</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">text</span><span style="color: #000000">"</span><span style="color: #000000">)String&nbsp;text);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<br />
实现类HelloServiceImpl<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;demo.cxf.server;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.jws.WebService;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />@WebService(endpointInterface</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">demo.cxf.server.HelloService</span><span style="color: #000000">"</span><span style="color: #000000">,serviceName</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">helloService</span><span style="color: #000000">"</span><span style="color: #000000">)<br />
<img id="Codehighlighter1_199_278_Open_Image" onclick="this.style.display='none'; Codehighlighter1_199_278_Open_Text.style.display='none'; Codehighlighter1_199_278_Closed_Image.style.display='inline'; Codehighlighter1_199_278_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_199_278_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_199_278_Closed_Text.style.display='none'; Codehighlighter1_199_278_Open_Image.style.display='inline'; Codehighlighter1_199_278_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;HelloServiceImpl&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;HelloService&nbsp;</span><span id="Codehighlighter1_199_278_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_199_278_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_240_275_Open_Image" onclick="this.style.display='none'; Codehighlighter1_240_275_Open_Text.style.display='none'; Codehighlighter1_240_275_Closed_Image.style.display='inline'; Codehighlighter1_240_275_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_240_275_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_240_275_Closed_Text.style.display='none'; Codehighlighter1_240_275_Open_Image.style.display='inline'; Codehighlighter1_240_275_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;sayHello(String&nbsp;text)&nbsp;</span><span id="Codehighlighter1_240_275_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_240_275_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Hello&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">.concat(text);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<br />
c). 发布服务<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Starting&nbsp;Server</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HelloServiceImpl&nbsp;impl&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;HelloServiceImpl();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;addr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">http://localhost:80/helloService</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Endpoint.publish(addr,impl);</span></div>
<br />
d). 客户端调用<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JaxWsProxyFactoryBean&nbsp;factory&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;JaxWsProxyFactoryBean();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;factory.getInInterceptors().add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;LoggingInInterceptor());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;factory.getOutInterceptors().add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;LoggingOutInterceptor());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;factory.setServiceClass(HelloService.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;factory.setAddress(</span><span style="color: #000000">"</span><span style="color: #000000">http://localhost:9000/helloService</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HelloService&nbsp;service&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(HelloService)factory.create();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;reply&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;service.sayHello(</span><span style="color: #000000">"</span><span style="color: #000000">cxf.</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(reply);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.exit(</span><span style="color: #000000">0</span><span style="color: #000000">);</span></div>
<img src ="http://www.blogjava.net/josson/aggbug/162234.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2007-11-21 23:01 <a href="http://www.blogjava.net/josson/archive/2007/11/21/162234.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jndi配置使用小结.</title><link>http://www.blogjava.net/josson/archive/2007/11/21/162121.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Wed, 21 Nov 2007 08:46:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2007/11/21/162121.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/162121.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2007/11/21/162121.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/162121.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/162121.html</trackback:ping><description><![CDATA[<strong>1、编码方式(注意：jndi命名时，unix\linux系统不允许jdbc/john形式，应改为：jdbc_john)：</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 id="Codehighlighter1_0_603_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_603_Open_Text.style.display='none'; Codehighlighter1_0_603_Closed_Image.style.display='inline'; Codehighlighter1_0_603_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_0_603_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_0_603_Closed_Text.style.display='none'; Codehighlighter1_0_603_Open_Image.style.display='inline'; Codehighlighter1_0_603_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span id="Codehighlighter1_0_603_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_0_603_Open_Text"><span style="color: #000000">{</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;for&nbsp;DBConnection</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;System.setProperty(Context.INITIAL_CONTEXT_FACTORY,</span><span style="color: #000000">"</span><span style="color: #000000">com.sun.jndi.fscontext.RefFSContextFactory</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;InitialContext&nbsp;ic&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;InitialContext();<br />
<img id="Codehighlighter1_168_601_Open_Image" onclick="this.style.display='none'; Codehighlighter1_168_601_Open_Text.style.display='none'; Codehighlighter1_168_601_Closed_Image.style.display='inline'; Codehighlighter1_168_601_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_168_601_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_168_601_Closed_Text.style.display='none'; Codehighlighter1_168_601_Open_Image.style.display='inline'; Codehighlighter1_168_601_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_168_601_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_168_601_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Construct&nbsp;BasicDataSource&nbsp;reference</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reference&nbsp;ref&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Reference(</span><span style="color: #000000">"</span><span style="color: #000000">javax.sql.DataSource</span><span style="color: #000000">"</span><span style="color: #000000">,<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">org.apache.commons.dbcp.BasicDataSourceFactory</span><span style="color: #000000">"</span><span style="color: #000000">,<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ref.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StringRefAddr(</span><span style="color: #000000">"</span><span style="color: #000000">driverClassName</span><span style="color: #000000">"</span><span style="color: #000000">,<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">oracle.jdbc.driver.OracleDriver</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ref.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StringRefAddr(</span><span style="color: #000000">"</span><span style="color: #000000">url</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;dbURL));<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ref.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StringRefAddr(</span><span style="color: #000000">"</span><span style="color: #000000">username</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;username));<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ref.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StringRefAddr(</span><span style="color: #000000">"</span><span style="color: #000000">password</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;password));<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ic.rebind(</span><span style="color: #000000">"</span><span style="color: #000000">jdbc/john</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;ref);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
<br />
<strong>2、Jndi with tomcat</strong><br />
a). 配置应用程序WEB-INF目录下的web.xml：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">resource-ref</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">connection</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">description</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">res-ref-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">jdbc/john</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">res-ref-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">res-type</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">javax.sql.DataSource</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">res-type</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">res-auth</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Container</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">res-auth</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">resource-ref</span><span style="color: #0000ff">&gt;</span></div>
<br />
b).tomcat配置文件TOMCAT_HOME/conf/server.xml中context定义如下：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">Context&nbsp;</span><span style="color: #ff0000">path</span><span style="color: #0000ff">="/john"</span><span style="color: #ff0000">&nbsp;reloadable</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000">&nbsp;docBase</span><span style="color: #0000ff">="/opt/scommnet/john"</span><span style="color: #ff0000">&nbsp;workDir</span><span style="color: #0000ff">="/opt/scommnet/john/work"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">Resource&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="jdbc/john"</span><span style="color: #ff0000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type</span><span style="color: #0000ff">="javax.sql.DataSource"</span><span style="color: #ff0000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;driverClassName</span><span style="color: #0000ff">="oracle.jdbc.driver.OracleDriver"</span><span style="color: #ff0000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password</span><span style="color: #0000ff">="dbpwd"</span><span style="color: #ff0000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxIdle</span><span style="color: #0000ff">="2"</span><span style="color: #ff0000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxWait</span><span style="color: #0000ff">="5000"</span><span style="color: #ff0000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;username</span><span style="color: #0000ff">="dbuser"</span><span style="color: #ff0000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url</span><span style="color: #0000ff">="jdbc:oracle:thin:@192.168.0.100:1521:cbxx"</span><span style="color: #ff0000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxActive</span><span style="color: #0000ff">="10"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">Context</span><span style="color: #0000ff">&gt;</span></div>
<br />
c).调用代码<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">InitialContext&nbsp;ic&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;InitialContext();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />DataSource&nbsp;ds&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(DataSource)ic.lookup(</span><span style="color: #000000">"</span><span style="color: #000000">java:comp/env/jdbc/john</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img id="Codehighlighter1_111_234_Open_Image" onclick="this.style.display='none'; Codehighlighter1_111_234_Open_Text.style.display='none'; Codehighlighter1_111_234_Closed_Image.style.display='inline'; Codehighlighter1_111_234_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_111_234_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_111_234_Closed_Text.style.display='none'; Codehighlighter1_111_234_Open_Image.style.display='inline'; Codehighlighter1_111_234_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">try</span><span id="Codehighlighter1_111_234_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_111_234_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;conn&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ds.getConnection();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;logger.info(</span><span style="color: #000000">"</span><span style="color: #000000">Connection&nbsp;info:</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">conn.getMetaData().getDriverName());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">数据查询操作<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" /></span><span style="color: #000000">}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_255_315_Open_Image" onclick="this.style.display='none'; Codehighlighter1_255_315_Open_Text.style.display='none'; Codehighlighter1_255_315_Closed_Image.style.display='inline'; Codehighlighter1_255_315_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_255_315_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_255_315_Closed_Text.style.display='none'; Codehighlighter1_255_315_Open_Image.style.display='inline'; Codehighlighter1_255_315_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">catch</span><span style="color: #000000">(Exception&nbsp;ex)</span><span id="Codehighlighter1_255_315_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_255_315_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;logger.error(ex.getMessage(),ex);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<img src ="http://www.blogjava.net/josson/aggbug/162121.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2007-11-21 16:46 <a href="http://www.blogjava.net/josson/archive/2007/11/21/162121.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyEclipse Enterprise Workbench 6.0.1 GA for eclipse 3.3.1</title><link>http://www.blogjava.net/josson/archive/2007/11/20/161933.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Tue, 20 Nov 2007 13:04:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2007/11/20/161933.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/161933.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2007/11/20/161933.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/161933.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/161933.html</trackback:ping><description><![CDATA[<span>MyEclipse</span><span>是一款功能强大的</span><span>J2EE</span><span>集成开发环境，支持代码编写、配置、测试以及除错。很好使，就是越来越大了。</span><br />
<br />
1、MyEclipse Enterprise Workbench Version 6.0.1 GA Manual Install&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;File size: 303.98 MB&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;MD5 : b916230017c8b9093e97ecae20653a8e<br />
&nbsp;&nbsp;&nbsp;&nbsp;http://www.myeclipseide.com/Downloads-index-req-getit-lid-99.html<br />
<br />
2、注册机：点击<a href="http://download.csdn.net/source/211207" target="_new">此处</a>下载MyEclipse 6.0 KeyGen <br />
注册码: <br />
Subscriber:QBomber <br />
Subscription Code: DLR8ZC-855155-6553775850087975 <br />
<br />
<br />
</font><br />
<img src ="http://www.blogjava.net/josson/aggbug/161933.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2007-11-20 21:04 <a href="http://www.blogjava.net/josson/archive/2007/11/20/161933.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse中经常使用的若干快捷键</title><link>http://www.blogjava.net/josson/archive/2007/11/20/161927.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Tue, 20 Nov 2007 12:40:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2007/11/20/161927.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/161927.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2007/11/20/161927.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/161927.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/161927.html</trackback:ping><description><![CDATA[<li><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-bidi-font-weight: bold" xml:lang="EN-US">Alt + 上、下键：将当前行或当前选中行上移或下移。</span>
<li><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-bidi-font-weight: bold" xml:lang="EN-US">Ctrl + Alt + 上、下键：复制当前行或当前选中行。</span>
<li><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-bidi-font-weight: bold" xml:lang="EN-US">Ctrl + Shift + T</span><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt" xml:lang="EN-US">:</span><span style="font-family: 宋体; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Arial">打开类型：显示</span><span lang="EN-US" style="mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt" xml:lang="EN-US">"</span><span style="font-family: 宋体; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Arial">打开类型</span><span lang="EN-US" style="mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt" xml:lang="EN-US">"</span><span style="font-family: 宋体; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Arial">对话框来在编辑器中打开类型。</span><span lang="EN-US" style="mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt" xml:lang="EN-US">"</span><span style="font-family: 宋体; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Arial">打开类型</span><span lang="EN-US" style="mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt" xml:lang="EN-US">"</span><span style="font-family: 宋体; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Arial">选择对话框显示工作空间中存在的所有类型</span><span style="font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-bidi-font-weight: bold; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Verdana">如类、接口等</span><span style="font-family: 宋体; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Arial">。</span><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt" xml:lang="EN-US"><O:P></O:P></span>
<li><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-bidi-font-weight: bold" xml:lang="EN-US">Ctrl + Shift + R:</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">打开资源：打开</span><span lang="EN-US" xml:lang="EN-US">"</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">打开资源</span><span lang="EN-US" xml:lang="EN-US">"</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对话框以打开工作空间中的任何资源。<span style="mso-bidi-font-weight: bold">在</span></span><span lang="EN-US" xml:lang="EN-US">Package Explorer</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中不必浏览文件便可快速打开任意一个文件。使用这个快捷键可以打开一个对话框，在里面输入你想查找的文件或者通配符既可。</span>
<li><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-bidi-font-weight: bold" xml:lang="EN-US">Ctrl + O</span><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt" xml:lang="EN-US">:</span> <span style="font-family: 宋体; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Arial">快速大纲：打开当前所选类型的轻量级大纲图。</span><span style="font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Verdana">在一个文件中直接打开一个成员变量（如字段、方法），尤其是有许多类似的方法名的时候这个快捷键将变得非常有用。</span><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt" xml:lang="EN-US"><O:P></O:P></span>
<li><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-bidi-font-weight: bold" xml:lang="EN-US">Ctrl + L,</span> <span style="font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-bidi-font-weight: bold; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Verdana">输入行数</span><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt" xml:lang="EN-US">:</span> <span style="font-family: 宋体; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Arial">转至行：打开一个对话框，允许您输入编辑器应该跳至的行号。仅适用于编辑器。</span><span style="font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-bidi-font-weight: bold; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Verdana">输入行号，可以快速跳转到源文件中的第</span><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-bidi-font-weight: bold" xml:lang="EN-US">N</span><span style="font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-bidi-font-weight: bold; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Verdana">行，</span><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt" xml:lang="EN-US"><O:P></O:P></span>
<li><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-bidi-font-weight: bold" xml:lang="EN-US">Ctrl + Q</span><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt" xml:lang="EN-US">:</span><span style="font-family: 宋体; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Arial">上一个编辑位置：显示上一个编辑操作的发生位置</span><span lang="EN-US" style="mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt; mso-hansi-font-family: Arial" xml:lang="EN-US">,</span><span style="font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-bidi-font-weight: bold; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Verdana">返回到最近的修改位置</span><span style="font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Verdana">。即使你查看不同的文件时，你也可以使用该快捷键来找到你最近对文件的修改位置。尤其是在文件比较大时，显得更为有用。</span><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt" xml:lang="EN-US"><O:P></O:P></span>
<li><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-bidi-font-weight: bold" xml:lang="EN-US">Ctrl + T</span><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt" xml:lang="EN-US">:</span> <span style="font-family: 宋体; mso-bidi-font-family: Arial; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Arial">快速类型层次结构：打开当前选择的类型的轻量级层次结构查看器，可以实现</span><span style="font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Verdana">快速转到一个</span><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt" xml:lang="EN-US">supertype</span><span style="font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Verdana">或者</span><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt" xml:lang="EN-US">subtype. <O:P></O:P></span>
<li><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-bidi-font-weight: bold" xml:lang="EN-US">Ctrl + E</span><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt" xml:lang="EN-US">:</span><span style="font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-bidi-font-weight: bold; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Verdana">快速跳转到另外一个编辑器</span><span style="font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Verdana">。注意</span><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt" xml:lang="EN-US">Ctrl + F6</span><span style="font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Verdana">也可以实现这个功能，在使用的时候可以注意一下他们的异同。</span><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt" xml:lang="EN-US"><O:P></O:P></span>
<li><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-bidi-font-weight: bold" xml:lang="EN-US">Ctrl + ./Ctrl +,</span><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt" xml:lang="EN-US">:</span><span style="font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-bidi-font-weight: bold; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Verdana">在一个文件中快速定位到一个问题（如错误、警告等）</span><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt" xml:lang="EN-US"><O:P></O:P></span>
<li><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-bidi-font-weight: bold" xml:lang="EN-US">Alt +</span><span style="font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-bidi-font-weight: bold; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8592;</span> <span lang="EN-US" style="mso-bidi-font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-bidi-font-weight: bold" xml:lang="EN-US">and Alt +</span> <span style="font-family: 宋体; mso-bidi-font-family: Verdana; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-bidi-font-weight: bold; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8594;</span><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt" xml:lang="EN-US">:</span><span style="font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Verdana">来回跳转至你所查阅的文件</span><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt" xml:lang="EN-US"><O:P></O:P></span>
<li><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-bidi-font-weight: bold" xml:lang="EN-US">F3</span><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt" xml:lang="EN-US">:</span> <span style="font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-bidi-font-weight: bold; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Verdana">快速转到一个类型声明</span><span style="font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Verdana">。同时也可以按住</span><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt" xml:lang="EN-US">ctrl</span><span style="font-family: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: Verdana">健并点击该超链接变量或者类或者你想查看的任何声明都可以。</span><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt" xml:lang="EN-US"><O:P></O:P></span>
<li><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-bidi-font-weight: bold" xml:lang="EN-US">Ctrl + d：删除当前行或当前选中行代码。</span>
<li><span lang="EN-US" style="mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 7.0pt; mso-bidi-font-weight: bold" xml:lang="EN-US">Ctrl + /：用"//"注释当前行或当前选中行代码。</span>
<p><br />
2008-7-28 快捷键补充:</p>
<table class="confluenceTable">
    <tbody>
        <tr>
            <td class="confluenceTd"><strong>文本编辑器</strong> </td>
        </tr>
        <tr>
            <td class="confluenceTd">粘贴 </td>
            <td class="confluenceTd">Ctrl+V </td>
            <td class="confluenceTd"><font color="maroon"><strong>★★★</strong></font> </td>
        </tr>
        <tr>
            <td class="confluenceTd">剪切 </td>
            <td class="confluenceTd">Ctrl+X </td>
            <td class="confluenceTd"><font color="maroon"><strong>★★★</strong></font> </td>
        </tr>
        <tr>
            <td class="confluenceTd">保存 </td>
            <td class="confluenceTd">Ctrl+S </td>
            <td class="confluenceTd"><font color="maroon"><strong>★★★</strong></font> </td>
        </tr>
        <tr>
            <td class="confluenceTd">后退 </td>
            <td class="confluenceTd">Ctrl+Z </td>
            <td class="confluenceTd"><font color="maroon"><strong>★★★</strong></font> </td>
        </tr>
        <tr>
            <td class="confluenceTd">删除行 </td>
            <td class="confluenceTd">Ctrl+D </td>
            <td class="confluenceTd"><font color="maroon"><strong>★★★</strong></font> </td>
        </tr>
        <tr>
            <td class="confluenceTd">上滚行 </td>
            <td class="confluenceTd">Ctrl+&#8593; </td>
            <td class="confluenceTd">&nbsp;</td>
        </tr>
        <tr>
            <td class="confluenceTd">下滚行 </td>
            <td class="confluenceTd">Ctrl+&#8595; </td>
            <td class="confluenceTd">&nbsp;</td>
        </tr>
        <tr>
            <td class="confluenceTd"><strong>Java</strong><strong>编辑器</strong><strong>&nbsp;</strong> </td>
        </tr>
        <tr>
            <td class="confluenceTd">格式化 </td>
            <td class="confluenceTd">Ctrl+Shift+F </td>
            <td class="confluenceTd">&nbsp;</td>
        </tr>
        <tr>
            <td class="confluenceTd">取消注释 </td>
            <td class="confluenceTd">Ctrl+\&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </td>
            <td class="confluenceTd"><font color="maroon"><strong>★★★</strong></font> </td>
        </tr>
        <tr>
            <td class="confluenceTd">注释（可以批量） </td>
            <td class="confluenceTd">Ctrl+/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </td>
            <td class="confluenceTd"><font color="maroon"><strong>★★★</strong></font> </td>
        </tr>
        <tr>
            <td class="confluenceTd">/* */方式注释 </td>
            <td class="confluenceTd">Ctrl+shift+/ </td>
            <td class="confluenceTd"><font color="maroon"><strong>★★★</strong></font> </td>
        </tr>
        <tr>
            <td class="confluenceTd">组织导入/导出 </td>
            <td class="confluenceTd">Ctrl+shift+o </td>
            <td class="confluenceTd"><font color="maroon"><strong>★★★</strong></font> </td>
        </tr>
        <tr>
            <td class="confluenceTd">上一个视图 </td>
            <td class="confluenceTd">Ctrl+Shift+F7 </td>
            <td class="confluenceTd">&nbsp;</td>
        </tr>
        <tr>
            <td class="confluenceTd">上一个透视图 </td>
            <td class="confluenceTd">Ctrl+Shift+F8 </td>
            <td class="confluenceTd">&nbsp;</td>
        </tr>
        <tr>
            <td class="confluenceTd">下一个编辑器 </td>
            <td class="confluenceTd">Ctrl+F6&nbsp;&nbsp;&nbsp;&nbsp; </td>
            <td class="confluenceTd">&nbsp;</td>
        </tr>
        <tr>
            <td class="confluenceTd">下一个视图 </td>
            <td class="confluenceTd">Ctrl+F7&nbsp;&nbsp;&nbsp;&nbsp; </td>
            <td class="confluenceTd">&nbsp;</td>
        </tr>
        <tr>
            <td class="confluenceTd">下一个透视图 </td>
            <td class="confluenceTd">Ctrl+F8&nbsp;&nbsp;&nbsp;&nbsp; </td>
            <td class="confluenceTd">&nbsp;</td>
        </tr>
        <tr>
            <td class="confluenceTd">显示视图菜单 </td>
            <td class="confluenceTd">Ctrl+F10&nbsp;&nbsp;&nbsp; </td>
            <td class="confluenceTd">&nbsp;</td>
        </tr>
        <tr>
            <td class="confluenceTd">快速导入getter/setter方法 </td>
            <td class="confluenceTd">Alt+Shift+S&nbsp;&nbsp; </td>
            <td class="confluenceTd"><font color="maroon"><strong>★★★</strong></font><font color="maroon"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></font> <font color="maroon"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></font> </td>
        </tr>
        <tr>
            <td class="confluenceTd">选中目标自动添加try/catch块 </td>
            <td class="confluenceTd">Alt+Shift+Z&nbsp;&nbsp; </td>
            <td class="confluenceTd">&nbsp;</td>
        </tr>
        <tr>
            <td class="confluenceTd"><strong>搜索</strong><strong>/</strong><strong>查询</strong> </td>
        </tr>
        <tr>
            <td class="confluenceTd">查找实现类 </td>
            <td class="confluenceTd">Ctrl+T </td>
            <td class="confluenceTd"><font color="maroon"><strong>★★★</strong></font> </td>
        </tr>
        <tr>
            <td class="confluenceTd">查找类 </td>
            <td class="confluenceTd">Ctrl+Shift+T </td>
            <td class="confluenceTd"><font color="maroon"><strong>★★★</strong></font> </td>
        </tr>
        <tr>
            <td class="confluenceTd">查找文件 </td>
            <td class="confluenceTd">Ctrl+Shift+R </td>
            <td class="confluenceTd"><font color="maroon"><strong>★★★</strong></font> </td>
        </tr>
        <tr>
            <td class="confluenceTd">快速显示提示信息 </td>
            <td class="confluenceTd">Ctrl+1 </td>
            <td class="confluenceTd"><font color="maroon"><strong>★★★</strong></font> </td>
        </tr>
        <tr>
            <td class="confluenceTd">快速查找 </td>
            <td class="confluenceTd">Ctrl+Shift+K </td>
            <td class="confluenceTd"><font color="maroon"><strong>★★★</strong></font> </td>
        </tr>
        <tr>
            <td class="confluenceTd"><strong>运行</strong><strong>/Debug</strong> </td>
        </tr>
        <tr>
            <td class="confluenceTd">单步返回 </td>
            <td class="confluenceTd">F7 </td>
            <td class="confluenceTd">&nbsp;</td>
        </tr>
        <tr>
            <td class="confluenceTd">单步跳过 </td>
            <td class="confluenceTd">F6 </td>
            <td class="confluenceTd"><font color="maroon"><strong>★★★</strong></font> </td>
        </tr>
        <tr>
            <td class="confluenceTd">单步跳入 </td>
            <td class="confluenceTd">F5 </td>
            <td class="confluenceTd">&nbsp;</td>
        </tr>
        <tr>
            <td class="confluenceTd">单步跳入选择 </td>
            <td class="confluenceTd">Ctrl+F5 </td>
            <td class="confluenceTd">&nbsp;</td>
        </tr>
        <tr>
            <td class="confluenceTd">调试上次启动 </td>
            <td class="confluenceTd">F11 </td>
            <td class="confluenceTd">&nbsp;</td>
        </tr>
        <tr>
            <td class="confluenceTd">继续 </td>
            <td class="confluenceTd">F8 </td>
            <td class="confluenceTd"><font color="maroon"><strong>★★★</strong></font> </td>
        </tr>
        <tr>
            <td class="confluenceTd">使用过滤器单步执行 </td>
            <td class="confluenceTd">Shift+F5 </td>
            <td class="confluenceTd">&nbsp;</td>
        </tr>
        <tr>
            <td class="confluenceTd">添加/去除断点 </td>
            <td class="confluenceTd">Ctrl+Shift+B </td>
            <td class="confluenceTd">&nbsp;</td>
        </tr>
        <tr>
            <td class="confluenceTd">运行至行 </td>
            <td class="confluenceTd">Ctrl+R </td>
            <td class="confluenceTd">&nbsp;</td>
        </tr>
        <tr>
            <td class="confluenceTd">执行 </td>
            <td class="confluenceTd">Ctrl+U </td>
            <td class="confluenceTd">&nbsp;</td>
        </tr>
    </tbody>
</table>
</li>
<img src ="http://www.blogjava.net/josson/aggbug/161927.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2007-11-20 20:40 <a href="http://www.blogjava.net/josson/archive/2007/11/20/161927.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORA-01000: 超出打开游标的最大数</title><link>http://www.blogjava.net/josson/archive/2007/06/20/125400.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Wed, 20 Jun 2007 10:38:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2007/06/20/125400.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/125400.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2007/06/20/125400.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/125400.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/125400.html</trackback:ping><description><![CDATA[JDBC开发中经常会遇到"ORA-01000: 超出打开游标的最大数"的问题。<br><br>主要原因为，<span style="font-weight: bold; color: red;">每次打开一个statement对象，jdbc都会在数据库中打开一个游标来执行操作</span>。但开发人员经常会忘记关闭statement，所以执行一段时间后就会出现这类问题。所以，完成业务处理后，必须将connection、statement及ResultSet等对象及时关闭。<br> <img src ="http://www.blogjava.net/josson/aggbug/125400.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2007-06-20 18:38 <a href="http://www.blogjava.net/josson/archive/2007/06/20/125400.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse 生成javadoc乱码问题解决</title><link>http://www.blogjava.net/josson/archive/2007/04/28/114266.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Sat, 28 Apr 2007 02:39:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2007/04/28/114266.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/114266.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2007/04/28/114266.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/114266.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/114266.html</trackback:ping><description><![CDATA[如果源文件编码使用了utf-8编码，那么生成的文档可会有乱码，解决办法如下：<br><br>Generate javadoc时， 在第三个对话框的"Extra Javadoc options" 文本框里面加上 "-encoding UTF-8"<img src ="http://www.blogjava.net/josson/aggbug/114266.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2007-04-28 10:39 <a href="http://www.blogjava.net/josson/archive/2007/04/28/114266.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(收藏)映射集合（Mapping collections）</title><link>http://www.blogjava.net/josson/archive/2007/04/20/112295.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Fri, 20 Apr 2007 10:36:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2007/04/20/112295.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/112295.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2007/04/20/112295.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/112295.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/112295.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: XFire开发时，在返回数据类型时遇到了一些麻烦，查到这样一篇文单，非常不错，故收藏之。翻译：zilong3927&nbsp; 原文地址：http://docs.codehaus.org/display/XFIRE/Mapping+collections调用Web Services时，经常需要返回集合（collection）作为结果，或者接受...&nbsp;&nbsp;<a href='http://www.blogjava.net/josson/archive/2007/04/20/112295.html'>阅读全文</a><img src ="http://www.blogjava.net/josson/aggbug/112295.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2007-04-20 18:36 <a href="http://www.blogjava.net/josson/archive/2007/04/20/112295.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XFire 开发小结.</title><link>http://www.blogjava.net/josson/archive/2007/04/20/112292.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Fri, 20 Apr 2007 10:22:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2007/04/20/112292.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/112292.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2007/04/20/112292.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/112292.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/112292.html</trackback:ping><description><![CDATA[<p class="MsoNormal"><span lang="EN-US"><span>前段时间，项目中使用了XFire开发Webservice，现将开发过程小结一下，以备后查。<br></span></span></p>
<p class="MsoNormal"><span lang="EN-US"><span>一、</span></span><span ;="" mso-hansi-font-family:="" times="" new="" roman="">配置web.xml，在Web应用中增加XFire的入口</span><span lang="EN-US"></span></p>
<p class="MsoNormal"><span style="font-family: 宋体;">注意XFire已有了自己的Servlet，不再依赖Spring MVC的DispatchServlet，也就远离了大家不熟悉的Spring MVC URL Mapping，与Spring达致完美的整合。<br>这里指定了路径为/service/* ，即WebService的URL会被默认生成为http://localhsot:8080/test/service/ServiceName，其中ServiceName默认为下面的接口名。</span><span lang="EN-US"><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><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;">&nbsp;<br>&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;">xfire</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">servlet-name</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&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;">org.codehaus.xfire.spring.XFireSpringServlet</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">servlet-class</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br>&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><br>&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>&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;">xfire</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">servlet-name</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;<br>&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;">/service/*</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>&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></span></div>
<br></span></p>
<p class="MsoNormal">二、集成Spring</p>
<p class="MsoNormal">在spring能找到的config目录下，新建applicationContext-xfire.xml文件：</p>
<p class="MsoNormal"></p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;!</span><span style="color: #ff00ff;">DOCTYPE&nbsp;beans&nbsp;PUBLIC&nbsp;"-//SPRING//DTD&nbsp;BEAN&nbsp;2.0//EN"&nbsp;"http://www.springframework.org/dtd/spring-beans-2.0.dtd"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">beans&nbsp;</span><span style="color: #ff0000;">default-autowire</span><span style="color: #0000ff;">="byName"</span><span style="color: #ff0000;">&nbsp;default-lazy-init</span><span style="color: #0000ff;">="true"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;传统方式下XFire-Spring导出POJO为Web服务的配置文件</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">引入XFire的预配置文件</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">import&nbsp;</span><span style="color: #ff0000;">resource</span><span style="color: #0000ff;">="classpath:org/codehaus/xfire/spring/xfire.xml"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">XFire&nbsp;WebService&nbsp;基类</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">bean&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="baseWebService"</span><span style="color: #ff0000;">&nbsp;class</span><span style="color: #0000ff;">="org.codehaus.xfire.spring.remoting.XFireExporter"</span><span style="color: #ff0000;">&nbsp;lazy-init</span><span style="color: #0000ff;">="false"</span><span style="color: #ff0000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;abstract</span><span style="color: #0000ff;">="true"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="serviceFactory"</span><span style="color: #ff0000;">&nbsp;ref</span><span style="color: #0000ff;">="xfire.serviceFactory"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="xfire"</span><span style="color: #ff0000;">&nbsp;ref</span><span style="color: #0000ff;">="xfire"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">bean</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;定义被导出的Web&nbsp;Service&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">bean&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="userService"</span><span style="color: #ff0000;">&nbsp;parent</span><span style="color: #0000ff;">="baseWebService"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="serviceBean"</span><span style="color: #ff0000;">&nbsp;ref</span><span style="color: #0000ff;">="userServiceImpl"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="serviceClass"</span><span style="color: #ff0000;">&nbsp;value</span><span style="color: #0000ff;">="com.test.services.UserService"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">bean</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">beans</span><span style="color: #0000ff;">&gt;</span></div>
<p>定义说明：parent为前面定义的基类，serviceClass 为Web Service的接口，serviceBean为Web Service的接口实现类。</p>
<p><br></p>
<p class="MsoNormal">当然，在spring配置文件中定义<span style="color: #000000;">userServiceImpl是必不可少的，如在serviceContext.xml中定义如下:</span></p>
<p class="MsoNormal"><span style="color: #000000;">
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">bean&nbsp;</span><span style="color: #ff0000;">id</span><span style="color: #0000ff;">="userServiceImpl"</span><span style="color: #ff0000;">&nbsp;class</span><span style="color: #0000ff;">="com.test.services.UserServiceImpl"</span><span style="color: #0000ff;">/&gt;</span></div>
<br></span></p>
<p class="MsoNormal">若不集成Spring，则需要定义一个<span lang="EN-US"><span ;="" mso-hansi-font-family:="" times="" new="" roman=""></span><span lang="EN-US">services.xml</span></span>文件，存放在/src/META-INF/services.xml</p>
<p class="MsoNormal">
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">beans&nbsp;&nbsp;</span><span style="color: #ff0000;">xmlns</span><span style="color: #0000ff;">="http://xfire.codehaus.org/config/1.0"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">service&nbsp;</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">name</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">userService</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">name</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">namespace</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">http://localhost:8080/service/userService</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">namespace</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">serviceClass</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">com.test.service.UserService</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">serviceClass</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">implementationClass</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">com.test.service.UserServiceImpl</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">implementationClass</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">service</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">beans</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;</span></div>
参数说明：
<p>&#160;</p>
1、name　元素：表示该webService的名称<br>2、namespace 元素：表示该webService的命名空间<br>3、serviceClass 元素：表示该webService的接口<br>4、implementationClass 元素：表示该webService的实现类
<p class="MsoNormal"><br></p>
<p class="MsoNormal">三、编写窄接口，抽取POJO中要导出的服务</p>
<br>
<p class="MsoNormal">从已有的UserManager.java中，抽取出一个窄接口，仅暴露需要导出为WebService的方法。注意UserManger.java是POJO，不需要任何WebService相关代码。</p>
<p class="MsoNormal">窄接口一方面满足了安全要求，不用整个UserManager所有方法导出为WebService；另一方面，XFire暂时也只支持基于接口的Proxy。<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">interface</span><span style="color: #000000;">&nbsp;UserService&nbsp;{<br>&nbsp;&nbsp;&nbsp;List</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">User</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"> getUsers();<br>}</span></div>
</p>
<br>四、配置Java-XML Binding<br>如果返回类型是List或Map，并且里面存放的是自定义类的话，则需要增加一个对于服务接口的配置文件。该文件的命名规则是　接口文件名.aegis.xml。例如接口是UserService.java的话，则此配置文件命名为UserService.aegis.xml。注意此配置文件须与接口放在同一目录下面。<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">mappings</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">mapping&nbsp;</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">method&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="getUsers"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">return-type&nbsp;</span><span style="color: #ff0000;">componentType</span><span style="color: #0000ff;">="com.test.domain.User"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">method</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">mapping</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;&nbsp;<br>&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">mappings</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">&nbsp;</span></div>
getUsers方法返回类型是List，里面装的User对象。对于这种类型的方法，在配置文件中描述了它的返回值类型。<br><br>如果返回的类型是Map的话，做法和List一样。但定义的类型，是Map中的Value部分，并且这样的话，Map中Value所存放的对象就必须全部是同一种类啦。<br><br>参考资源：<br>http://wiki.springside.org.cn/display/springside/XFire<br>http://www.javaeye.com/topic/70005<br>http://junewolf.javaeye.com/blog/52523<br><img src ="http://www.blogjava.net/josson/aggbug/112292.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2007-04-20 18:22 <a href="http://www.blogjava.net/josson/archive/2007/04/20/112292.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XFire webserivce开发的一点感想.</title><link>http://www.blogjava.net/josson/archive/2007/04/19/112020.html</link><dc:creator>josson</dc:creator><author>josson</author><pubDate>Thu, 19 Apr 2007 11:13:00 GMT</pubDate><guid>http://www.blogjava.net/josson/archive/2007/04/19/112020.html</guid><wfw:comment>http://www.blogjava.net/josson/comments/112020.html</wfw:comment><comments>http://www.blogjava.net/josson/archive/2007/04/19/112020.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/josson/comments/commentRss/112020.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/josson/services/trackbacks/112020.html</trackback:ping><description><![CDATA[这两天，项目中需要开发一些webservice接口，我选用了XFire框架，原来一直在用AXIS。<br><br>很多朋友都在讨论XFire和AXIS的优劣，就我而言，更喜欢XFire，至少目前是如此。<br><br>最讨厌axis要生成一段东西，才能在wsdd文件注册服务，很是麻烦。而且，调试时要是设成debug，那可就惨了，一大堆用户信息，出了异常还不好捕捉。相比之下，XFire的开发就要简单的点多了，包括代码开发，配置，还是返回自定义类型，真是easy。不过，客户端调用时(动态模式或根据WSDL生成Client Stub)，返回的自定义类型是否能顺利取得，到时需要研究一下。<br><br>今天，就返回类型问题困了好久，还好已经解决了。<br>
<p>对象的属性、函数的参数和返回值如果为int、String、Date等普通类型以及由普通类型组成的复杂对象都无需定义。我见到只有两种情况需要定义：</p>
<ul>
    <li>无法使用泛型定义Collection中元素的类型时。
    </li>
    <li>需要为属性定义不同的名字，或者定义复杂对象里的某些属性不要输出。</li>
</ul>
若是遇害到上述情况的话，需要进行aegis配置，文件名应与接口的文件名相同，并且放在同一目录下，如UserService.java，则定义一下UserService.aegis.xml文件，定义内容如下：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">mappings</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">mapping</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">method&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="getResources"</span><span style="color: #0000ff;">&gt;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp; &lt;</span>!--配置<span style="color: #0000ff;">getResources</span>服务的返回值，List内对象为<span style="color: #0000ff;">Resource</span>--&gt;
<br><span style="color: #000000;"></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">return-type&nbsp;</span><span style="color: #ff0000;">componentType</span><span style="color: #0000ff;">="com.test.Resource"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">method</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">method&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="getAuthentication"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">return-type&nbsp;</span><span style="color: #ff0000;">componentType</span><span style="color: #0000ff;">="com.test.Authentication"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">method</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">mapping</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">mappings</span><span style="color: #0000ff;">&gt;</span></div>
<br>若返回的<strong><span style="font-size: 13.5pt; color: black; font-family: verdana;" lang="EN-US">Javabeans</span></strong><span style="font-size: 13.5pt; color: black; font-family: verdana;" lang="EN-US">存在</span><strong><span style="font-size: 13.5pt; color: black; font-family: verdana;" lang="EN-US">Collections </span></strong><span style="font-size: 13.5pt; color: black; font-family: verdana;" lang="EN-US">时，需要定义一个与javabean相关的文件名，如User</span><span style="font-size: 13.5pt; color: black; font-family: verdana;" lang="EN-US">.aegis.xml，并且放在相同的目录下：</span><span style="font-size: 13.5pt; color: black; font-family: verdana;" lang="EN-US">
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">mappings</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">mapping</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">User&nbsp;bean&nbsp;&nbsp;，包含了一个&nbsp;&nbsp;List&nbsp;&nbsp;，&nbsp;&nbsp;其中的对象是Resource&nbsp;&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="resources"</span><span style="color: #ff0000;">&nbsp;componentType</span><span style="color: #0000ff;">="com.test.Resource"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">配置User类，忽略内嵌的roles属性不要输出XML</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">property&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="roles"</span><span style="color: #ff0000;">&nbsp;ignore</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">mapping</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">mappings</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br></span></div>
<br><br></span>有空将XFire使用总结一下，也贴出来。<br><br>  <img src ="http://www.blogjava.net/josson/aggbug/112020.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/josson/" target="_blank">josson</a> 2007-04-19 19:13 <a href="http://www.blogjava.net/josson/archive/2007/04/19/112020.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>