<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
<channel>
<title><![CDATA[汪云飞 ’s ToolBox]]></title>
        <image>
        <title>http://hi.baidu.com</title>
        <link>http://hi.baidu.com</link>
        <url>http://img.baidu.com/img/logo-hi.gif</url>
        </image>
<description><![CDATA[容颜不老，青春永驻]]></description>
<link>http://hi.baidu.com/wiselyman</link>
<language>zh-cn</language>
<generator>www.baidu.com</generator>
<ttl>5</ttl>


<item>
        <title><![CDATA[枚举类]]></title>
        <link><![CDATA[http://hi.baidu.com/wiselyman/blog/item/651974890b0ec7b90e24445a.html]]></link>
        <description><![CDATA[
		
		<span><img class="blogimg" border="0" small="0" src="http://hiphotos.baidu.com/wiselyman/pic/item/1ce9f7dc21abf18ecc1166cb.jpg"><br>
<span><img class="blogimg" border="0" small="0" src="http://hiphotos.baidu.com/wiselyman/pic/item/ba0fb9fd5ba29b3908244da3.jpg"><br>
<span><img class="blogimg" border="0" small="0" src="http://hiphotos.baidu.com/wiselyman/pic/item/ae21effe5fcbf71e5d600896.jpg"><br>
<span><img class="blogimg" border="0" small="0" src="http://hiphotos.baidu.com/wiselyman/pic/item/4b41de43b4bb9a3c72f05d97.jpg"><br>
<span><img class="blogimg" border="0" small="0" src="http://hiphotos.baidu.com/wiselyman/pic/item/2c85fcde0b7fc77b95ee3790.jpg"><br>
<span><img class="blogimg" border="0" small="0" src="http://hiphotos.baidu.com/wiselyman/pic/item/2aa3361285eafb7ef919b891.jpg"><br>
<span><img class="blogimg" border="0" small="0" src="http://hiphotos.baidu.com/wiselyman/pic/item/c2e0980ad3bc6e3094ca6b92.jpg"><br>
</span></span></span></span></span></span></span> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/wiselyman/blog/category/java%BB%F9%B4%A1">java基础</a>&nbsp;<a href="http://hi.baidu.com/wiselyman/blog/item/651974890b0ec7b90e24445a.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月23日 星期一  21:20</pubDate>
        <category><![CDATA[java基础]]></category>
        <author><![CDATA[wiselyman]]></author>
		<guid>http://hi.baidu.com/wiselyman/blog/item/651974890b0ec7b90e24445a.html</guid>
</item>

<item>
        <title><![CDATA[java 作用域 public private default protected 的差别（转）]]></title>
        <link><![CDATA[http://hi.baidu.com/wiselyman/blog/item/f059a677809f7411b151b909.html]]></link>
        <description><![CDATA[
		
		<span class="Apple-style-span" style="word-spacing: 0px; font: medium  Times New Roman ; text-transform: none; color: rgb(0,0,0); text-indent: 0px; white-space: normal; letter-spacing: normal; border-collapse: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class="Apple-style-span" style="webkit-border-horizontal-spacing: 2px; webkit-border-vertical-spacing: 2px">
<table style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">
    <tbody style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">
        <tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">
            <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">
            <h3 style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">
            <div style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" align="center">java 作用域 public private default protected 的差别</div>
            </h3>
            </td>
        </tr>
        <tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">
            <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" height="400">
            <table style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" cellspacing="1" cellpadding="0" width="728" border="0">
                <tbody style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">
                    <tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" height="30">
                        <td style="padding-right: 0px; padding-left: 0px; font-size: 13px; padding-bottom: 0px; margin: 0px; color: rgb(0,128,0); padding-top: 0px" align="center">1楼&nbsp;&nbsp;&nbsp; 2009-02-17</td>
                    </tr>
                    <tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">
                        <td style="padding-right: 0px; padding-left: 0px; font-size: 13px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><br style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">
                        <table style="table-layout: fixed; padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px" width="100%" bgcolor="#f1f1f1">
                            <tbody style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">
                                <tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">
                                    <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; word-break: break-all; padding-top: 0px; word-wrap: break-word">
                                    <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; text-align: left">在Java中有四种不同的作用域，分别是 public protected default 和private，这四种不同的作用域的限制由前到后逐渐的增加。</p>
                                    <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; text-align: left">现在来看看public的作用域，在所有的作用域中，public可谓是最宽松的，在编写类文件的时候，只要该类以public关键字修饰，那么这个类的类文件就必须以该类的简单类名来命名。在类的内部，被它修饰的无论是参数还是方法，都可以在任何地方访问的到(当然前提是这个类是公开的，就是上文说到的是以public关键字修饰的类)。</p>
                                    <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; text-align: left">而对于protected作用域来说，它的限制就严格了一点，它只允许本类、同一个包内的其他类（这个类不是它的子类）或者它的子类使用被它修饰的方法或者参数（以protected修饰的类貌似还没遇到过，O(∩_∩)O~，有用过的给个提醒），子类使用父类中的protected方法或者参数时不受包位置的影响，这就意味着，即使位于不同包的类想要调用它父类的protected方法或者参数也是被允许的。</p>
                                    <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; text-align: left">对于default作用域（即不加任何的关键字修饰的方法或者参数），它的限制就严格的多了，除了本类和本包中的类能访问以外，就是不在同一个包内的它自己的子类也不能访问(有点像老子跟儿子分家了，老子的东西就不能给儿子用了一样O(∩_∩)O~)。</p>
                                    <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; text-align: left">private作用域在这四种之内是最为严格的，除了它自己，哪怕是同包内的其他类都不允许使用。通常我们使用这个关键字来实现对类的方法的隔离，它意味着，除了本类的方法能够调用这个私有化成员以外，其他的包括同包中的类和子类都不能访问这些个私有的成员。（肥水不流外人田嘛，能被private修饰的东东怎么说也是相当有价值的了）。</p>
                                    <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; text-align: left">具体的信息看下图：</p>
                                    <p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; text-align: left"> </p>
                                    <table class="quote_title" style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; height: 122px" cellspacing="1" width="655" align="center" border="1">
                                        <caption style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"></caption>
                                        <tbody style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">
                                            <tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">
                                                <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">作用域</td>
                                                <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">当前类</td>
                                                <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">同一包内</td>
                                                <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">子孙类</td>
                                                <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">其他包</td>
                                            </tr>
                                            <tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">
                                                <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">public</td>
                                                <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; ">√</span></td>
                                                <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; ">√</span></td>
                                                <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; ">√</span></td>
                                                <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; ">√</span></td>
                                            </tr>
                                            <tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">
                                                <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">protected</td>
                                                <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; ">√</span></td>
                                                <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; ">√</span></td>
                                                <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; ">√</span></td>
                                                <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; ">×</span></td>
                                            </tr>
                                            <tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">
                                                <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">default</td>
                                                <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; ">√</span></td>
                                                <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; ">√</span></td>
                                                <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; ">×</span></td>
                                                <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; ">×</span></td>
                                            </tr>
                                            <tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">
                                                <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">private</td>
                                                <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; ">√</span></td>
                                                <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; ">×</span></td>
                                                <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; ">×</span></td>
                                                <td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; ">×</span></td>
                                            </tr>
                                        </tbody>
                                    </table>
                                    </td>
                                </tr>
                            </tbody>
                        </table>
                        </td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tbody>
</table>
</span></span> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/wiselyman/blog/category/java%BB%F9%B4%A1">java基础</a>&nbsp;<a href="http://hi.baidu.com/wiselyman/blog/item/f059a677809f7411b151b909.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月23日 星期一  16:31</pubDate>
        <category><![CDATA[java基础]]></category>
        <author><![CDATA[wiselyman]]></author>
		<guid>http://hi.baidu.com/wiselyman/blog/item/f059a677809f7411b151b909.html</guid>
</item>

<item>
        <title><![CDATA[spring-ws服务端和简单的eclipse生成的webservice 客户端 示例]]></title>
        <link><![CDATA[http://hi.baidu.com/wiselyman/blog/item/2f7b21ddeae0dbd38c10296f.html]]></link>
        <description><![CDATA[
		
		<p>spring -ws是基于契约先行（contract first）的原则实现的web service。</p>
<p>自从JDK1.5的annotation出现以后，我偏向于写注解而不写xml，所以我在项目中尽量写注解来替代xml</p>
<p>闲话少说。动手做。</p>
<p>必备包：spring.jar ; spring-ws-1.5.8-all.jar ; wsdl4j-1.6.1.jar ; spring-mvc-2.5.6.jar;</p>
<p>XmlSchema-1.4.3.jar ; commons-logging-1.1.1.jar</p>
<p>spring-ws是契约先行，先写wsdl文件的内容，然后生成所需要的java类。</p>
<p>而wsdl是由包含请求和返回以及数据xsd文件，使用spring-ws生成的。</p>
<p>这里演示一个简单的spring-ws</p>
<p>一个人客户端输入自己的卡号，返回这个人的所有信息。</p>
<p><strong>xsd文件（workerInfo.xsd）</strong></p>
<p><font color="#ff0000">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<br>
&lt;xs:schema xmlns:xs=&quot;</font><a href="http://www.w3.org/2001/XMLSchema"><font color="#ff0000">http://www.w3.org/2001/XMLSchema</font></a><font color="#ff0000">&quot;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  xmlns:tns=&quot;</font><a href="http://ajjws.com/schemas/workerinfo"><font color="#ff0000">http://ajjws.com/schemas/workerinfo</font></a><font color="#ff0000">&quot;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  elementFormDefault=&quot;qualified&quot;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  targetNamespace=&quot;</font><a href="http://ajjws.com/schemas/workerinfo"><font color="#ff0000">http://ajjws.com/schemas/workerinfo</font></a><font color="#ff0000">&quot;&gt;</font></p>
<p><font color="#ff0000">&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--查询请求，输入的是一个字符串的证件号码CardNo--&gt;<br>
&nbsp;&nbsp;&nbsp;  &lt;xs:element name=&quot;WorkerRequest&quot;&gt;<br>
&nbsp;&nbsp;&nbsp;  &lt;xs:complexType&gt;<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;  &lt;xs:all&gt;<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &lt;xs:element name=&quot;CardNo&quot; type=&quot;xs:string&quot; /&gt;<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;  &lt;/xs:all&gt;<br>
&nbsp;&nbsp;&nbsp;  &lt;/xs:complexType&gt;<br>
&nbsp;&nbsp;&nbsp;  &lt;/xs:element&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--数据返回，返回的是一个WorkerInfo数据类型--&gt;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  &lt;xs:element name=&quot;WorkerResponse&quot;&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  &lt;xs:complexType&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;  &lt;xs:all&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &lt;xs:element name=&quot;WorkerResponse&quot; type=&quot;tns:WorkerInfo&quot; /&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;  &lt;/xs:all&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  &lt;/xs:complexType&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  &lt;/xs:element&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></p>
<p><font color="#ff0000"> &lt;!--WorkerInfo数据类型其实就是一个Java类，由下面几个属性组成--&gt;&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  &lt;xs:complexType name=&quot;WorkerInfo&quot;&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  &lt;xs:sequence&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;  &lt;xs:element name=&quot;id&quot; type=&quot;xs:long&quot;&gt;&lt;/xs:element&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;  &lt;xs:element name=&quot;cardNo&quot; type=&quot;xs:string&quot;&gt;&lt;/xs:element&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;  &lt;xs:element name=&quot;workerName&quot; type=&quot;xs:string&quot;&gt;&lt;/xs:element&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;  &lt;xs:element name=&quot;workerSex&quot; type=&quot;xs:string&quot;&gt;&lt;/xs:element&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  &lt;/xs:sequence&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;  &lt;/xs:complexType&gt;<br>
&lt;/xs:schema&gt;</font></p>
<p><font color="#000000">对于spring-ws要配置的地方有</font></p>
<p><font color="#000000"><strong>web.xml:</strong></font></p>
<p><font color="#ea9999">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<br>
&lt;web-app xmlns:xsi=&quot;</font><a href="http://www.w3.org/2001/XMLSchema-instance"><font color="#ea9999">http://www.w3.org/2001/XMLSchema-instance</font></a><font color="#ea9999">&quot; xmlns=&quot;</font><a href="http://java.sun.com/xml/ns/javaee"><font color="#ea9999">http://java.sun.com/xml/ns/javaee</font></a><font color="#ea9999">&quot; xmlns:web=&quot;</font><a href="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><font color="#ea9999">http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd</font></a><font color="#ea9999">&quot; xsi:schemaLocation=&quot;</font><a href="http://java.sun.com/xml/ns/javaee"><font color="#ea9999">http://java.sun.com/xml/ns/javaee</font></a><font color="#ea9999"> </font><a href="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><font color="#ea9999">http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd</font></a><font color="#ea9999">&quot; id=&quot;WebApp_ID&quot; version=&quot;2.5&quot;&gt;<br>
  &lt;display-name&gt;ajjws&lt;/display-name&gt;<br>
&lt;servlet&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;servlet-name&gt;ajjws&lt;/servlet-name&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;servlet-class&gt;org.springframework.ws.transport.http.MessageDispatcherServlet&lt;/servlet-class&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;init-param&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;param-name&gt;transformWsdlLocations&lt;/param-name&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;param-value&gt;true&lt;/param-value&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;/init-param&gt;<br>
&nbsp;&nbsp;&nbsp;  &lt;/servlet&gt;</font></p>
<p><font color="#ea9999">&nbsp;&nbsp;&nbsp;  &lt;servlet-mapping&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;servlet-name&gt;ajjws&lt;/servlet-name&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br>
&nbsp;&nbsp;&nbsp;  &lt;/servlet-mapping&gt;<br>
&lt;/web-app&gt;</font></p>
<p><strong><font color="#000000">ajjws-servlet.xml:(名称和web.xml的servlet-name相同)</font></strong></p>
<p><font color="#e06666">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<br>
&lt;beans xmlns=&quot;</font><a href="http://www.springframework.org/schema/beans"><font color="#e06666">http://www.springframework.org/schema/beans</font></a><font color="#e06666">&quot;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  xmlns:xsi=&quot;</font><a href="http://www.w3.org/2001/XMLSchema-instance"><font color="#e06666">http://www.w3.org/2001/XMLSchema-instance</font></a><font color="#e06666">&quot;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  xmlns:context=&quot;</font><a href="http://www.springframework.org/schema/context"><font color="#e06666">http://www.springframework.org/schema/context</font></a><font color="#e06666">&quot;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  xsi:schemaLocation=&quot;</font><a href="http://www.springframework.org/schema/beans"><font color="#e06666">http://www.springframework.org/schema/beans</font></a><br>
<font color="#e06666">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font><a href="http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"><font color="#e06666">http://www.springframework.org/schema/beans/spring-beans-2.5.xsd</font></a><br>
<font color="#e06666">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </font><a href="http://www.springframework.org/schema/context"><font color="#e06666">http://www.springframework.org/schema/context</font></a><font color="#e06666"> </font><a href="http://www.springframework.org/schema/context/spring-context-2.5.xsd"><font color="#e06666">http://www.springframework.org/schema/context/spring-context-2.5.xsd</font></a><font color="#e06666">&quot;&gt;</font></p>
<p><font color="#e06666">&lt;!--对com.ajjws下的包里的类自动扫描，从而不用定义文件中bean，在类中使用@Service@component等-调用时候使用@Resource或者@AutoWired-&gt;&nbsp;&nbsp;&nbsp;&nbsp;  </font></p>
<p><font color="#e06666">&lt;context:annotation-config/&gt;<br>
  &lt;context:component-scan base-package=&quot;com.ajjws&quot;/&gt;<br>
&nbsp;&nbsp; &lt;!--指定xsd文件的地址--&gt;<br>
 &lt;bean id=&quot;schemaCollection&quot; class=&quot;org.springframework.xml.xsd.commons.CommonsXsdSchemaCollection&quot;&gt;</font></p>
<p><font color="#e06666">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;property name=&quot;xsds&quot;&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   &lt;list&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp; &lt;value&gt;/WEB-INF/xsds/workerInfo.xsd&lt;/value&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;/list&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;/property&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;property name=&quot;inline&quot; value=&quot;true&quot;/&gt;<br>
&nbsp;&nbsp;&nbsp;  &lt;/bean&gt;<br>
&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;  <br>
  <br>
 &lt;bean class=&quot;org.springframework.ws.server.endpoint.adapter.GenericMarshallingMethodEndpointAdapter&quot;&gt;<br>
&nbsp;&nbsp; &lt;constructor-arg ref=&quot;marshaller&quot; /&gt;<br>
 &lt;/bean&gt;</font></p>
<p><font color="#e06666">&lt;!--利用Jaxb2实现xml到Java的转换--&gt; </font></p>
<p><font color="#e06666">&lt;bean id=&quot;marshaller&quot; class=&quot;org.springframework.oxm.jaxb.Jaxb2Marshaller&quot;&gt;<br>
&nbsp;&nbsp; &lt;property name=&quot;contextPath&quot; value=&quot;com.ajjws.beans&quot; /&gt;<br>
 &lt;/bean&gt;</font></p>
<p><font color="#e06666">&lt;!--申明我们用注解来实现请求和Endpoint的映射对应--&gt;</font></p>
<p><font color="#e06666">  &lt;bean class=&quot;org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping&quot;/&gt;<br>
&nbsp;&nbsp;</font></p>
<p><font color="#e06666">&lt;!--通过xsd文件定义wsdl--&gt;<br>
 &lt;bean id=&quot;ajjws&quot; class=&quot;org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition&quot;&gt;<br>
&nbsp;&nbsp;&nbsp;   &lt;property name=&quot;schemaCollection&quot; ref=&quot;schemaCollection&quot; /&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;property name=&quot;portTypeName&quot; value=&quot;Ajj&quot; /&gt;<br>
&nbsp;&nbsp;&nbsp;   &lt;property name=&quot;locationUri&quot; value=&quot;</font><a href="http://localhost:8080/ajjws/services"><font color="#e06666">http://localhost:8080/ajjws/services</font></a><font color="#e06666">&quot; /&gt;<br>
&nbsp;&nbsp;  &nbsp;&nbsp; &lt;property name=&quot;targetNamespace&quot; value=&quot;</font><a href="http://ajjws.com/definitions"><font color="#e06666">http://ajjws.com/definitions</font></a><font color="#e06666">&quot; /&gt; <br>
&nbsp;&nbsp;  &lt;/bean&gt;<br>
 <br>
&lt;/beans&gt;<br>
</font></p>
<p><font color="#000000">安装jaxb eclipse插件，在xsd文件上点右键，选择jaxb2.1-&gt;run xjc</font></p>
<p><font color="#000000"><span><img class="blogimg" border="0" small="0" src="http://hiphotos.baidu.com/wiselyman/pic/item/b74f0c3b57b00bc414cecb6c.jpg"></span></font></p>
<p><font color="#000000"><span>运行后会在com.ajjws.bean包下通过xsd文件生成的java类</span></font></p>
<p><font color="#000000"><span>如下所示：</span></font></p>
<p><font color="#000000"><span><span><img class="blogimg" border="0" small="0" src="http://hiphotos.baidu.com/wiselyman/pic/item/b813903d80d6132ebba16769.jpg"><br>
</span></span></font></p>
<p><font color="#000000"><span><strong>Endpoint：（AjjwsEndpoint.java 响应web service的请求的文件）</strong><br>
<font color="#0000ff">package com.ajjws.ws;<br>
import javax.annotation.Resource;<br>
import org.springframework.ws.server.endpoint.annotation.Endpoint;<br>
import org.springframework.ws.server.endpoint.annotation.PayloadRoot;<br>
import com.ajjws.beans.ObjectFactory;<br>
import com.ajjws.beans.WorkerInfo;<br>
import com.ajjws.beans.WorkerRequest;<br>
import com.ajjws.beans.WorkerResponse;<br>
import com.ajjws.service.AjjService;<br>
/**<br>
 * @author wyf<br>
 *<br>
 */<br>
@Endpoint<br>
public class AjjwsEndpoint {</font></span></font></p>
<p><span><font color="#0000ff"> @Resource <br>
 private AjjService ajjService;//需配置自动扫描bean<br>
 <br>
 @Resource<br>
 private ObjectFactory objectFactory;<br>
 <br>
 @PayloadRoot(localPart=&quot;WorkerRequest&quot;,namespace=&quot;</font><a href="http://ajjws.com/schemas/workerinfo"><font color="#0000ff">http://ajjws.com/schemas/workerinfo</font></a><font color="#0000ff">&quot;)<br>
 public WorkerResponse getWorkInfo(WorkerRequest request) {&nbsp;&nbsp;<br>
&nbsp;&nbsp; WorkerResponse response=objectFactory.createWorkerResponse();<br>
&nbsp;&nbsp; WorkerInfo workerInfo=ajjService.getWorkInfo(request.getCardNo());<br>
&nbsp;&nbsp; response.setWorkerResponse(workerInfo);<br>
&nbsp;&nbsp; return response;<br>
 }<br>
}<br>
</font></span></p>
<p><font color="#000000"><span><strong>AjjService.java:</strong></span></font></p>
<p><span><font color="#0000ff">package com.ajjws.service;<br>
import com.ajjws.beans.WorkerInfo;<br>
public interface AjjService {<br>
 /**<br>
  * 获取证件信息<br>
  */<br>
 public WorkerInfo getWorkInfo(String cardNo);<br>
}<br>
</font><font color="#000000"><strong>AjjServiceImpl.java</strong></font></span></p>
<p><font color="#660000"><span>package com.ajjws.service;<br>
import org.springframework.stereotype.Service;<br>
import com.ajjws.beans.WorkerInfo;<br>
/**<br>
 * @author wyf<br>
 *<br>
 */<br>
@Service(&quot;ajjService&quot;)<br>
public class AjjServiceImpl implements AjjService { <br>
 public WorkerInfo getWorkInfo(String cardNo) {<br>
&nbsp;&nbsp; //此处仅为演示，为加入数据库<br>
&nbsp;&nbsp; System.out.println(cardNo);<br>
&nbsp;&nbsp; WorkerInfo worker=new WorkerInfo();<br>
&nbsp;&nbsp; worker.setCardNo(&quot;1234&quot;);<br>
&nbsp;&nbsp; worker.setId(1);<br>
&nbsp;&nbsp; worker.setWorkerName(&quot;wyf&quot;);<br>
&nbsp;&nbsp; worker.setWorkerSex(&quot;男&quot;);<br>
&nbsp;&nbsp; return worker;<br>
 }</span></font></p>
<p><span><font color="#000000"><font color="#660000">}</font><br>
</font></span></p>
<p> </p>
<p><span><font color="#000000">客户端使用eclipse本身自带的生成web service client</font></span></p>
<p><span><font color="#000000"><span><img class="blogimg" border="0" small="0" src="http://hiphotos.baidu.com/wiselyman/pic/item/b39a2a1ffbed13e6a686694e.jpg"></span></font></span></p>
<p><span><font color="#000000"><span><span><img class="blogimg" border="0" small="0" src="http://hiphotos.baidu.com/wiselyman/pic/item/f85d91519398cd0a43a75b4a.jpg"><br>
</span><br>
点击finish，通过wsdl生成客户端所需要的Java类</span></font></span></p>
<p><span><font color="#000000"><span>结构如下</span></font></span></p>
<p><span><font color="#000000"><span><span><img class="blogimg" border="0" small="0" src="http://hiphotos.baidu.com/wiselyman/pic/item/8c670024dc971b1dc9955957.jpg"><br>
客户端调用代码：</span></span></font></span></p>
<p><span><font color="#ff0000"><span><span><strong>package com.ajjSearch.web;<br>
import java.rmi.RemoteException;<br>
import org.springframework.ws.client.core.support.WebServiceGatewaySupport;</strong></span></span></font></span></p>
<p><span><font color="#ff0000"><span><span><strong>import com.ajjws.definitions.AjjProxy;<br>
import com.ajjws.schemas.workerinfo.WorkerInfo;<br>
import com.ajjws.schemas.workerinfo.WorkerRequest;<br>
import com.ajjws.schemas.workerinfo.WorkerResponse;</strong></span></span></font></span></p>
<p><span><font color="#ff0000"><span><span><strong>public class WsClient extends WebServiceGatewaySupport{ <br>
 public static void main(String[] args) throws RemoteException { <br>
&nbsp;&nbsp; doSomething();<br>
 }<br>
 <br>
 public static void doSomething() throws RemoteException{<br>
&nbsp;&nbsp; WorkerRequest wreq=new WorkerRequest(&quot;1111&quot;);<br>
&nbsp;&nbsp; WorkerResponse wres=new AjjProxy().getAjj().worker(wreq);<br>
&nbsp;&nbsp; System.out.println(wres.getWorkerResponse());<br>
&nbsp;&nbsp; WorkerInfo wi=wres.getWorkerResponse();<br>
&nbsp;&nbsp; System.out.println(wi.getCardNo()+&quot;  &quot;+wi.getId()+&quot;  &quot;+wi.getWorkerName()+&quot; &quot;+wi.getWorkerSex());<br>
 }<br>
}<br>
</strong></span></span></font></span></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/wiselyman/blog/category/hibernate%2Bspring">hibernate+spring</a>&nbsp;<a href="http://hi.baidu.com/wiselyman/blog/item/2f7b21ddeae0dbd38c10296f.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月12日 星期四  10:31</pubDate>
        <category><![CDATA[hibernate+spring]]></category>
        <author><![CDATA[wiselyman]]></author>
		<guid>http://hi.baidu.com/wiselyman/blog/item/2f7b21ddeae0dbd38c10296f.html</guid>
</item>

<item>
        <title><![CDATA[使用 Spring 2.5 注释驱动的 IoC 功能]]></title>
        <link><![CDATA[http://hi.baidu.com/wiselyman/blog/item/f512a8ef44bde61cfcfa3ce1.html]]></link>
        <description><![CDATA[
		
		<a href="http://www.ibm.com/developerworks/cn/java/j-lo-spring25-ioc/">http://www.ibm.com/developerworks/cn/java/j-lo-spring25-ioc/</a> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/wiselyman/blog/category/hibernate%2Bspring">hibernate+spring</a>&nbsp;<a href="http://hi.baidu.com/wiselyman/blog/item/f512a8ef44bde61cfcfa3ce1.html#comment">查看评论</a>]]></description>
        <pubDate>2009年10月28日 星期三  10:39</pubDate>
        <category><![CDATA[hibernate+spring]]></category>
        <author><![CDATA[wiselyman]]></author>
		<guid>http://hi.baidu.com/wiselyman/blog/item/f512a8ef44bde61cfcfa3ce1.html</guid>
</item>

<item>
        <title><![CDATA[使用 Spring 2.5 基于注解驱动的 Spring MVC]]></title>
        <link><![CDATA[http://hi.baidu.com/wiselyman/blog/item/89af0d085b5271db63d986e1.html]]></link>
        <description><![CDATA[
		
		<a href="http://www.ibm.com/developerworks/cn/java/j-lo-spring25-mvc/">http://www.ibm.com/developerworks/cn/java/j-lo-spring25-mvc/</a> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/wiselyman/blog/category/hibernate%2Bspring">hibernate+spring</a>&nbsp;<a href="http://hi.baidu.com/wiselyman/blog/item/89af0d085b5271db63d986e1.html#comment">查看评论</a>]]></description>
        <pubDate>2009年10月28日 星期三  10:38</pubDate>
        <category><![CDATA[hibernate+spring]]></category>
        <author><![CDATA[wiselyman]]></author>
		<guid>http://hi.baidu.com/wiselyman/blog/item/89af0d085b5271db63d986e1.html</guid>
</item>

<item>
        <title><![CDATA[spring随记]]></title>
        <link><![CDATA[http://hi.baidu.com/wiselyman/blog/item/483b79098a0880a52fddd479.html]]></link>
        <description><![CDATA[
		
		<p><strong><font size="5">Bean scopes</font></strong></p>
<p><strong>sigleton：</strong></p>
<p>Spring singleton is best described as per container and per bean.</p>
<p>The singleton scope is the default scope in Spring.</p>
<p><strong>prototype：</strong></p>
<p>creation of a new bean instance every time a request for that specific bean is made。</p>
<p>use the prototype scope for all beans that are stateful, while the singleton scope should be used for stateless beans.</p>
<p>prototype-scoped bean as somewhat of a replacement for the Java 'new' operator.</p>
<p>Spring does not manage the complete lifecycle of a prototype bean。It is the responsibility of the client code to clean up prototype scoped objects and release any expensive resources that the prototype bean(s) are holding onto.</p>
<p><strong>request（web专用）、</strong><strong>session（web专用）、</strong><strong>globle session（web专用）</strong></p>
<p><strong>servlet 2.4+ web.xml</strong></p>
<p>&lt;web-app&gt;<br>
...<br>
&lt;listener&gt;<br>
&lt;listener-class&gt;org.springframework.web.context.request.RequestContextListener&lt;/listener-class&gt;<br>
&lt;/listener&gt;<br>
...<br>
&lt;/web-app&gt;</p>
<p><strong>servlet 2.3 web.xml</strong></p>
<p>&lt;web-app&gt;<br>
..<br>
&lt;filter&gt;<br>
&lt;filter-name&gt;requestContextFilter&lt;/filter-name&gt;<br>
&lt;filter-class&gt;org.springframework.web.filter.RequestContextFilter&lt;/filter-class&gt;<br>
&lt;/filter&gt;<br>
&lt;filter-mapping&gt;<br>
&lt;filter-name&gt;requestContextFilter&lt;/filter-name&gt;<br>
&lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br>
&lt;/filter-mapping&gt;<br>
...<br>
&lt;/web-app&gt;</p>
<p>the global session scope is similar to the standard HTTP Session scope (described immediately above), and really only makes sense in the context of portlet-based web applications.</p>
<p>if you are writing a standard Servlet-based web application and you define one or more beans<br>
as having global session scope, the standard HTTP Session scope will be used, and no error will be raised.</p>
<p><font color="#ff0000">&lt;bean id=&quot;userPreferences&quot; class=&quot;com.foo.UserPreferences&quot; scope=&quot;session&quot;&gt;<br>
&lt;!-- this next element effects the proxying of the surrounding bean --&gt;<br>
&lt;aop:scoped-proxy/&gt;<br>
&lt;/bean&gt;</font></p>
<p><font color="#ff0000">&lt;!-- a singleton-scoped bean injected with a proxy to the above bean --&gt;<br>
&lt;bean id=&quot;userService&quot; class=&quot;com.foo.SimpleUserService&quot;&gt;<br>
&lt;!-- a reference to the proxied 'userPreferences' bean --&gt;<br>
&lt;property name=&quot;userPreferences&quot; ref=&quot;userPreferences&quot;/&gt;<br>
&lt;/bean&gt;<br>
&lt;/beans&gt;</font></p>
<p><font color="#000000"><font color="#00ff00">&lt;bean id=&quot;userPreferences&quot; class=&quot;com.foo.UserPreferences&quot; scope=&quot;session&quot;/&gt;<br>
&lt;bean id=&quot;userManager&quot; class=&quot;com.foo.UserManager&quot;&gt;<br>
&lt;property name=&quot;userPreferences&quot; ref=&quot;userPreferences&quot;/&gt;<br>
&lt;/bean&gt;</font><br>
From the above configuration it is evident that the singleton bean 'userManager' is being injected with a<br>
reference to the HTTP Session-scoped bean 'userPreferences'. The salient point here is that the<br>
'userManager' bean is a singleton... it will be instantiated exactly once per container, and its dependencies (in<br>
this case only one, the 'userPreferences' bean) will also only be injected (once!). This means that the<br>
'userManager' will (conceptually) only ever operate on the exact same 'userPreferences' object, that is the<br>
one that it was originally injected with. This is not what you want when you inject a HTTP Session-scoped<br>
bean as a dependency into a collaborating object (typically). Rather, what we do want is a single<br>
'userManager' object, and then, for the lifetime of a HTTP Session, we want to see and use a<br>
'userPreferences' object that is specific to said HTTP Session.</font></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/wiselyman/blog/category/hibernate%2Bspring">hibernate+spring</a>&nbsp;<a href="http://hi.baidu.com/wiselyman/blog/item/483b79098a0880a52fddd479.html#comment">查看评论</a>]]></description>
        <pubDate>2009年09月27日 星期日  21:37</pubDate>
        <category><![CDATA[hibernate+spring]]></category>
        <author><![CDATA[wiselyman]]></author>
		<guid>http://hi.baidu.com/wiselyman/blog/item/483b79098a0880a52fddd479.html</guid>
</item>

<item>
        <title><![CDATA[1、1 JCA Design and Architecture（三）]]></title>
        <link><![CDATA[http://hi.baidu.com/wiselyman/blog/item/13869722dcf905f9d6cae2b2.html]]></link>
        <description><![CDATA[
		
		<p>上接<a href="http://hi.baidu.com/wiselyman/blog/item/3b4da601c3cf690c1c9583c2.html" target="_blank">1、1 JCA Design and Architecture（二）</a></p>
<div class="Section0" style="layout-grid:  15.6pt none">
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-weight: bold; font-size: 13pt; font-style: normal;  mso-spacerun:  yes ">Storing and Managing Keys</span><span style="font-weight: bold; font-size: 13pt; font-style: normal;  mso-spacerun:  yes ">（存储并管理<font face="FranklinGothic-DemiItal">key</font><font face="宋体">）</font></span><span style="font-weight: bold; font-size: 13pt; font-style: normal;  mso-spacerun:  yes "></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt;  mso-spacerun:  yes ">Keystore<font face="宋体">是</font><font face="Palatino-Roman">public keys</font></span><span style="font-size: 10.5pt;  mso-spacerun:  yes ">和<font face="Palatino-Roman">certificates</font></span><span style="font-size: 10.5pt;  mso-spacerun:  yes ">的数据库</span><span style="font-size: 10.5pt;  mso-spacerun:  yes ">。</span><span style="font-size: 10.5pt;  mso-spacerun:  yes "></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt;  mso-spacerun:  yes ">默认情况下，这个数据库是以名为<font face="Palatino-Roman">keystore</font><font face="宋体">的文件形式存在于用户的</font><font face="Palatino-Roman">home</font><font face="宋体">目录下。</font><font face="Palatino-Roman">SUN provider</font><font face="宋体">包提供这个功能通过一个私有的格式叫做</font><font face="Palatino-Roman">JKS</font><font face="宋体">。在这个文件里的每一个</font><font face="Palatino-Roman">private key</font><font face="宋体">都有密码保护，这个文件本身也有密码保护。</font><font face="Palatino-Roman">KeyStore</font><font face="宋体">引擎类提供一个健壮的接口来实现</font><font face="Palatino-Roman">keystore provider</font><font face="宋体">。</font></span><span style="font-size: 10.5pt;  mso-spacerun:  yes "></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt;  mso-spacerun:  yes ">KeyStore<font face="宋体">存储</font><font face="Palatino-Roman">2</font><font face="宋体">种类型的条目。</font></span><span style="font-size: 10.5pt;  mso-spacerun:  yes "></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt;  mso-spacerun:  yes ">第一、</span><span style="font-size: 10.5pt;  mso-spacerun:  yes ">一个<font face="Palatino-Roman">key</font><font face="宋体">条目</font></span><span style="font-size: 10.5pt;  mso-spacerun:  yes ">（<font face="Palatino-Roman">key entry</font><font face="宋体">）</font></span><span style="font-size: 10.5pt;  mso-spacerun:  yes ">，包含敏感的<font face="Palatino-Roman">key</font><font face="宋体">信息，如：</font><font face="Palatino-Roman">private key</font><font face="宋体">和</font></span><span style="font-size: 10.5pt;  mso-spacerun:  yes ">a</span><span style="font-size: 10.5pt;  mso-spacerun:  yes ">uthenticating certificate chain</span><span style="font-size: 10.5pt;  mso-spacerun:  yes ">或者一个秘密的<font face="Palatino-Roman">key</font></span><span style="font-size: 10.5pt;  mso-spacerun:  yes ">。</span><span style="font-size: 10.5pt;  mso-spacerun:  yes "></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt;  mso-spacerun:  yes ">第二、</span><span style="font-size: 10.5pt;  mso-spacerun:  yes ">一个可信证明条目（</span><span style="font-size: 9pt; font-style: italic;  mso-spacerun:  yes ">trusted certificate entry</span><span style="font-size: 10.5pt;  mso-spacerun:  yes ">），包含验证特定<font face="Palatino-Roman">public key</font><font face="宋体">的拥有者。</font></span><span style="font-size: 10.5pt;  mso-spacerun:  yes "></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt; text-align: justify"><span style="font-size: 10.5pt;  mso-spacerun:  yes "></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt;  mso-spacerun:  yes ">Keystore<font face="宋体">如何存储依赖于其实现；因此，它不是由引擎类指定的。</font><font face="Palatino-Roman">KeyStore </font><font face="宋体">引擎类提供方法来加载并保存一个</font><font face="Palatino-Roman">keystore</font><font face="宋体">，访问</font><font face="Palatino-Roman">entry</font><font face="宋体">的别名，决定</font><font face="Palatino-Roman">entry</font><font face="宋体">类型，管理</font><font face="Palatino-Roman">entry</font><font face="宋体">本身，并获得</font><font face="Palatino-Roman">keystore</font></span><span style="font-size: 10.5pt;  mso-spacerun:  yes ">的信息。</span><span style="font-size: 10.5pt;  mso-spacerun:  yes "></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt;  mso-spacerun:  yes ">标准的<font face="Palatino-Roman">getInstance</font><font face="宋体">方法可以用来创建</font><font face="Palatino-Roman">keystore</font><font face="宋体">。</font></span><span style="font-size: 10.5pt;  mso-spacerun:  yes "></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt;  mso-spacerun:  yes ">Load<font face="宋体">方法加载从指定的输入流加载</font><font face="Palatino-Roman">keystore</font><font face="宋体">。</font></span><span style="font-size: 10.5pt;  mso-spacerun:  yes ">可选的密码是用来验证<font face="Palatino-Roman">keystore</font><font face="宋体">完整性的方法。如果没有密码指定，完整性检查不会执行。</font></span><span style="font-size: 10.5pt;  mso-spacerun:  yes "></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt;  mso-spacerun:  yes ">传入<font face="Palatino-Roman">null</font><font face="宋体">到</font><font face="Palatino-Roman">input</font><font face="宋体">位置就会创建一个空的</font><font face="Palatino-Roman">keystore</font></span><span style="font-size: 10.5pt;  mso-spacerun:  yes "></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,255);  mso-spacerun:  yes ">final void load(InputStream stream, char[] password)</span><span style="font-size: 10.5pt; color: rgb(0,0,255);  mso-spacerun:  yes "></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt;  mso-spacerun:  yes ">&ldquo;<font face="Palatino-Roman">s</font></span><span style="font-size: 10.5pt;  mso-spacerun:  yes ">tore</span><span style="font-size: 10.5pt;  mso-spacerun:  yes ">&rdquo;</span><span style="font-size: 10.5pt;  mso-spacerun:  yes ">方法</span><span style="font-size: 10.5pt;  mso-spacerun:  yes ">保存当前的<font face="Palatino-Roman">keystore</font><font face="宋体">到指定的输出流。如果指定了密码，它用来计算</font><font face="Palatino-Roman">keystore</font><font face="宋体">数据的</font></span><span style="font-size: 10.5pt;  mso-spacerun:  yes ">校验和（<font face="Times New Roman">checksum</font><font face="宋体">）并加到输出流的尾部。校验和在加载执行完整性检查时使用。</font></span><span style="font-size: 10.5pt; color: rgb(0,0,255);  mso-spacerun:  yes "></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 9pt;  mso-spacerun:  yes "></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,255);  mso-spacerun:  yes ">final void store(OutputStream stream, char[] password)</span><span style="font-size: 10.5pt; color: rgb(0,0,255);  mso-spacerun:  yes "></span></p>
</div>
 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/wiselyman/blog/category/java%B8%DF%BC%B6">java高级</a>&nbsp;<a href="http://hi.baidu.com/wiselyman/blog/item/13869722dcf905f9d6cae2b2.html#comment">查看评论</a>]]></description>
        <pubDate>2009年09月14日 星期一  16:36</pubDate>
        <category><![CDATA[java高级]]></category>
        <author><![CDATA[wiselyman]]></author>
		<guid>http://hi.baidu.com/wiselyman/blog/item/13869722dcf905f9d6cae2b2.html</guid>
</item>

<item>
        <title><![CDATA[JAVA开发者最常去的20个英文网站(转)]]></title>
        <link><![CDATA[http://hi.baidu.com/wiselyman/blog/item/b5aed5b4352c26798ad4b2c4.html]]></link>
        <description><![CDATA[
		
		1.[http://www.javaalmanac.com] &ndash; Java开发者年鉴一书的在线版本. 要想快速查到某种Java技巧的用法及示例代码, 这是一个不错的去处.
<p>2.[http://www.onjava.com] &ndash; O&rsquo;Reilly的Java网站. 每周都有新文章.</p>
<p>3.[http://java.sun.com] &ndash; 官方的Java开发者网站 &ndash; 每周都有新文章发表.</p>
<p>4.[http://www.developer.com/java] &ndash; 由Gamelan.com 维护的Java技术文章网站.</p>
<p>5.[http://www.java.net] &ndash; Sun公司维护的一个Java社区网站.</p>
<p>6.[http://www.builder.com] &ndash; Cnet的Builder.com网站 &ndash; 所有的技术文章, 以Java为主.</p>
<p>7.[http://www.ibm.com/developerworks/java] &ndash; IBM的Developerworks技术网站; 这是其中的Java技术主页.</p>
<p>8.[http://www.javaworld.com] &ndash; 最早的一个Java站点. 每周更新Java技术文章.</p>
<p>9.[http://www.devx.com/java] &ndash; DevX维护的一个Java技术文章网站.</p>
<p>10.[http://www.fawcette.com/javapro] &ndash; JavaPro在线杂志网站.</p>
<p>11.[http://www.sys-con.com/java] &ndash; Java Developers Journal的在线杂志网站.</p>
<p>12.[http://www.javadesktop.org] &ndash; 位于Java.net的一个Java桌面技术社区网站.</p>
<p>13.[http://www.theserverside.com] &ndash; 这是一个讨论所有Java服务器端技术的网站.</p>
<p>14.[http://www.jars.com] &ndash; 提供Java评论服务. 包括各种framework和应用程序.</p>
<p>15.[http://www.jguru.com] &ndash; 一个非常棒的采用Q&amp;A形式的Java技术资源社区.</p>
<p>16.[http://www.javaranch.com] &ndash; 一个论坛，得到Java问题答案的地方，初学者的好去处。</p>
<p>17.[http://www.ibiblio.org/javafaq/javafaq.html] &ndash; comp.lang.java的FAQ站点 &ndash; 收集了来自comp.lang.java新闻组的问题和答案的分类目录.</p>
<p>18.[http://java.sun.com/docs/books/tutorial/] &ndash; 来自SUN公司的官方Java指南 &ndash; 对于了解几乎所有的java技术特性非常有帮助.</p>
<p>19.[http://www.javablogs.com] &ndash; 互联网上最活跃的一个Java Blog网站.</p>
<p>20.[http://java.about.com/] &ndash; 来自About.com的Java新闻和技术文章网站.</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/wiselyman/blog/category/java%BB%F9%B4%A1">java基础</a>&nbsp;<a href="http://hi.baidu.com/wiselyman/blog/item/b5aed5b4352c26798ad4b2c4.html#comment">查看评论</a>]]></description>
        <pubDate>2009年09月14日 星期一  06:23</pubDate>
        <category><![CDATA[java基础]]></category>
        <author><![CDATA[wiselyman]]></author>
		<guid>http://hi.baidu.com/wiselyman/blog/item/b5aed5b4352c26798ad4b2c4.html</guid>
</item>

<item>
        <title><![CDATA[1、1 JCA Design and Architecture（二）]]></title>
        <link><![CDATA[http://hi.baidu.com/wiselyman/blog/item/3b4da601c3cf690c1c9583c2.html]]></link>
        <description><![CDATA[
		
		<p>接<a target="_blank" href="http://hi.baidu.com/wiselyman/blog/item/f512a8efcd309f1cfcfa3c6d.html">1、1 JCA Design and Architecture（一）</a></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"> </p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"> </p>
<p>import java.security.Signature;<br>
import java.security.KeyPair;<br>
import java.security.PublicKey;<br>
import java.security.PrivateKey;<br>
import java.security.NoSuchAlgorithmException;<br>
import java.security.InvalidKeyException;<br>
import java.security.SignatureException;</p>
<p>public class SignatureExample {<br>
&nbsp;&nbsp;&nbsp;  public byte[] signData(byte[] data, PrivateKey key)<br>
&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  try {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Signature signer = Signature.getInstance(&quot;SHA1withDSA&quot;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  signer.initSign(key);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  signer.update(data);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return(signer.sign());<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } catch(NoSuchAlgorithmException nsae) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  System.out.println(&quot;Exception: &quot; + nsae);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  nsae.printStackTrace();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } catch(InvalidKeyException ike) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  System.out.println(&quot;Exception: &quot; + ike);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ike.printStackTrace();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } catch(SignatureException se) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  System.out.println(&quot;Exception: &quot; + se);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  se.printStackTrace();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return(null);<br>
&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;  public boolean verifySig(byte[] data, PublicKey key, byte[] sig)<br>
&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  try {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Signature signer = Signature.getInstance(&quot;SHA1withDSA&quot;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  signer.initVerify(key);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  signer.update(data);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return(signer.verify(sig));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } catch(NoSuchAlgorithmException nsae) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  System.out.println(&quot;Exception: &quot; + nsae);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  nsae.printStackTrace();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } catch(InvalidKeyException ike) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  System.out.println(&quot;Exception: &quot; + ike);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ike.printStackTrace();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } catch(SignatureException se) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  System.out.println(&quot;Exception: &quot; + se);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  se.printStackTrace();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return(false);<br>
&nbsp;&nbsp;&nbsp;  }</p>
<p>public static void main(String args[])<br>
&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  SignatureExample sigEx = new SignatureExample();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  KeyPairGeneratorExample kpge = new KeyPairGeneratorExample();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  KeyPair keyPair = kpge.generateKeyPair(717);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  byte[] data = {65,66,67,68,69,70,71,72,73,74};<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  byte[] digitalSignature = sigEx.signData(data, keyPair.getPrivate());</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  boolean verified;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  // This verification will succeed<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  verified = sigEx.verifySig(data, keyPair.getPublic(), digitalSignature);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(verified) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  System.out.println(&quot;** The digital signature has been verified&quot;);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } else {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  System.out.println(&quot;** The digital signature is invalid, the wrong &quot; +<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &quot;key was used, or the data has been compromised&quot;);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  System.out.println(&quot;&quot;);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  // Generate a new key pair. Guaranteed to be different and incompatible<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  // with first set.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  keyPair = kpge.generateKeyPair(517);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  // This verification will fail<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  verified = sigEx.verifySig(data, keyPair.getPublic(), digitalSignature);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  if(verified) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  System.out.println(&quot;** The digital signature has been verified&quot;);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  } else {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  System.out.println(&quot;** The digital signature is invalid, the wrong &quot; +<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &quot;key was used, or the data has been compromised&quot;);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;  }<br>
}</p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt; text-indent: 21pt"><span style="font-size: 10.5pt; color: rgb(0,0,0); mso-spacerun: yes">KeyPairGeneratorExample类会在后面讨论，它用来获得公钥和密钥。数据使用密钥签名，使用公钥验证。</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt; text-indent: 21pt"><span style="font-size: 10.5pt; color: rgb(0,0,0); mso-spacerun: yes">//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt; text-indent: 21pt"> </p>
<span style="font-size: 10.5pt; color: rgb(0,0,0); mso-spacerun: yes">
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-weight: bold; font-size: 13pt; font-style: normal; mso-spacerun: yes">Digital Key Creation and Management</span><span style="font-weight: bold; font-size: 13pt; font-style: normal; mso-spacerun: yes">(<font face="宋体">电子</font><font face="FranklinGothic-DemiItal">key</font><font face="宋体">的创建和管理</font><font face="FranklinGothic-DemiItal">)</font></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"> </p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Security API<font face="宋体">有</font><font face="Palatino-Roman">2</font><font face="宋体">种形式的</font><font face="Palatino-Roman">key</font><font face="宋体">存在。</font></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  透明形式的<font face="Palatino-Roman">key</font><font face="宋体">允许获得</font><font face="Palatino-Roman">key</font><font face="宋体">的具体信息，比如计算</font><font face="Palatino-Roman">key</font><font face="宋体">的算法参数。</font></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  非透明形式的<font face="Palatino-Roman">key</font><font face="宋体">保持这些值隐藏并只允许你访问创建</font><font face="Palatino-Roman">key</font><font face="宋体">的算法、使用的编码和</font><font face="Palatino-Roman">key</font><font face="宋体">本身的编码形式。</font></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  透明形式的<font face="Palatino-Roman">key</font><font face="宋体">继承叫做</font><font face="Palatino-Roman">KeySpec</font><font face="宋体">标记接口。因为是一个标记接口，接口里没有方法定义。</font></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  在<font face="Palatino-Roman">java.security.spec</font><font face="宋体">包中Key的接口如下表：</font></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span><img class="blogimg" border="0" small="0" src="http://hiphotos.baidu.com/wiselyman/pic/item/54fe6f5921b511012934f0fc.jpg"></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"> </p>
<span>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt; text-indent: 21pt"><span style="font-size: 10.5pt; mso-spacerun: yes">和透明形式的<font face="Palatino-Roman">key</font><font face="宋体">相反，不透明形式继承自</font><font face="Palatino-Roman">Key</font><font face="宋体">接口，不像</font><font face="Palatino-Roman">KeySpec</font><font face="宋体">接口，</font><font face="Palatino-Roman">key</font><font face="宋体">接口定义了</font><font face="Palatino-Roman">3</font><font face="宋体">个方法，所有的实体类必须实现。这三个方法的描述如下：</font></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">&ldquo;<font face="Palatino-Roman">algorithm</font><font face="宋体">&rdquo;方法返回一个</font><font face="Palatino-Roman">string</font><font face="宋体">表示使用创建</font><font face="Palatino-Roman">key</font><font face="宋体">的算法：</font></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">String algorithm()</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">&ldquo;<font face="Palatino-Roman">getEncoded</font><font face="宋体">&rdquo;方法返回一个已编码版本</font><font face="Palatino-Roman">key</font><font face="宋体">，遵循标准编码格式，如</font></span><span style="font-size: 10.5pt; mso-spacerun: yes">X.509 or PKCS #8</span><span style="font-size: 10.5pt; mso-spacerun: yes">：</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">byte[] getEncoded()</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">&ldquo;<font face="Palatino-Roman">getFormat</font><font face="宋体">&rdquo;方法返回用来编码</font><font face="Palatino-Roman">key</font><font face="宋体">的编码格式的名称。</font></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">String getFormat()</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">&ldquo;java</span><span style="font-size: 10.5pt; mso-spacerun: yes">.security.interfaces</span><span style="font-size: 10.5pt; mso-spacerun: yes">&rdquo;<font face="宋体">包含</font><font face="Palatino-Roman">12</font><font face="宋体">个接口直接继承自</font><font face="Palatino-Roman">Key interface</font><font face="宋体">。在</font><font face="Palatino-Roman">Java API</font><font face="宋体">中，有很多类型标准的</font><font face="Palatino-Roman">key</font><font face="宋体">。如下表：</font></span></p>
</span>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span><br>
</span><span><img class="blogimg" border="0" small="0" src="http://hiphotos.baidu.com/wiselyman/pic/item/8f203eaded4fb3224a36d6c4.jpg"></span></p>
<span>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"> </p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  KeyFactory<font face="宋体">引擎类用来转换透明形式</font><font face="Palatino-Roman">key</font><font face="宋体">到非透明形式，反之亦然。 </font></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"> </p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  标准的<font face="Palatino-Roman">getInstance</font><font face="宋体">方法用来创建</font><font face="Palatino-Roman">KeyFactory</font><font face="宋体">。有</font><font face="Palatino-Roman">2</font><font face="宋体">个方法转换透明</font><font face="Palatino-Roman">key</font><font face="宋体">到非透明</font><font face="Palatino-Roman">key</font><font face="宋体">：</font></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"> </p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  一种是为公钥一种为密钥。有<font face="Palatino-Roman">1</font><font face="宋体">个方法定义来反转这些操作。</font></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"> </p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  这些操作在下面描述：</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"> </p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"> </p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"> </p>
<span style="font-size: 10.5pt; mso-spacerun: yes">
<div class="Section0" style="layout-grid:  15.6pt none">
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">generatePublic<font face="宋体">和</font><font face="Palatino-Roman">generatePrivate</font></span><span style="font-size: 10.5pt; mso-spacerun: yes">方法接受透明形式<font face="Palatino-Roman">key</font><font face="宋体">（直接或间接继承</font><font face="Palatino-Roman">KeySpec</font><font face="宋体">自</font><font face="Palatino-Roman">KeySpec</font><font face="宋体">）</font></span><span style="font-size: 10.5pt; mso-spacerun: yes">并返回非透明的<font face="Palatino-Roman">public key</font><font face="宋体">或</font><font face="Palatino-Roman">private key</font><font face="宋体">：</font></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,255); mso-spacerun: yes">PublicKey generatePublic(KeySpec keySpec)</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,255); mso-spacerun: yes">PrivateKey generatePrivate(KeySpec keySpec)</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10.5pt; mso-spacerun: yes">getKeySpec <font face="宋体">方法接受非透明形式的</font><font face="Palatino-Roman">key</font><font face="宋体">通过</font><font face="Palatino-Roman">key</font><font face="宋体">参数</font></span><span style="font-size: 10.5pt; mso-spacerun: yes">，一个指定哪个<font face="Palatino-Roman">key specification </font><font face="宋体">被转换并返回的类：</font></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,255); mso-spacerun: yes">KeySpec getKeySpec(Key key, Class keySpec)</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"> </p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">更多的从客户端的角度考虑，<font face="Palatino-Roman">KeyPair</font><font face="宋体">和</font><font face="Palatino-Roman">KeyPairGenerator</font><font face="宋体">以及</font></span><span style="font-size: 10.5pt; mso-spacerun: yes">KeyStore<font face="宋体">引擎类是用来创建、存储并管理这些</font><font face="Palatino-Roman">public/private key</font><font face="宋体">和证书。</font></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">KeyPair<font face="宋体">类定义下面</font><font face="Palatino-Roman">2</font><font face="宋体">个方法：</font></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,255); mso-spacerun: yes">PrivateKey getPrivate()</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,255); mso-spacerun: yes">PublicKey getPublic()</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">第一个方法返回正在被存储的<font face="Palatino-Roman">private key</font><font face="宋体">，第二个返回</font><font face="Palatino-Roman">public key</font><font face="宋体">。</font></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">KeyPairGenerator<font face="宋体">引擎类用来产生</font><font face="Palatino-Roman">public/private key </font><font face="宋体">对，并使用</font><font face="Palatino-Roman">KeyPair</font><font face="宋体">类来存储它们。</font></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">KeyPairGenerator<font face="宋体">引擎类产生一对</font><font face="Palatino-Roman">key</font><font face="宋体">是与算法无关的，是和</font><font face="Palatino-Roman">keyPairGenerator</font><font face="宋体">如何初始化有关。因为所有的算法使用基础</font></span><span style="font-size: 10.5pt; mso-spacerun: yes">的<font face="Palatino-Roman">size</font><font face="宋体">和</font></span><span style="font-size: 10.5pt; mso-spacerun: yes"> randomness</span><span style="font-size: 10.5pt; mso-spacerun: yes">（随机）</span><span style="font-size: 10.5pt; mso-spacerun: yes">的概念，初始化存在使得特定的算法不是必须的：</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,255); mso-spacerun: yes">void initialize(int keysize, SecureRandom random)</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,255); mso-spacerun: yes">void initialize(int keysize)</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">Keysize<font face="宋体">参数的含义是：对于每一个算法</font><font face="Palatino-Roman">keysize</font><font face="宋体">不同。</font></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">其他的算法参数也是已给预先配置好的参数。例如：一个<font face="Palatino-Roman">DSA</font><font face="宋体">算法，基于特定的</font><font face="Palatino-Roman">keysize</font><font face="宋体">，会指派它的参数不同的值。如果一个随机数产生器不被传入，</font><font face="Palatino-Roman">radomness</font><font face="宋体">通过默认系统产生器产生。</font></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"> </p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">下面形式的</span><span style="font-size: 10.5pt; mso-spacerun: yes">initialize<font face="宋体">实现初始化基于特定的参数，通过</font><font face="Palatino-Roman">params</font><font face="宋体">参数传递。如果一个随机数字产生器没有传进，</font><font face="Palatino-Roman">radomness</font><font face="宋体">由系统产生：</font></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,255); mso-spacerun: yes">void initialize(AlgorithmParameterSpec params, SecureRandom random)</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,255); mso-spacerun: yes">void initialize(AlgorithmParameterSpec params)</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"> </p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">下面方法创建并返回一个<font face="Palatino-Roman">KeyPair</font><font face="宋体">对象。每次调用这个方法都会返回单独和不同的</font><font face="Palatino-Roman">key</font><font face="宋体">对</font></span><span style="font-size: 10.5pt; mso-spacerun: yes">：</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,255); mso-spacerun: yes">KeyPair generateKeyPair()</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"> </p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"> </p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"> </p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"> </p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"> </p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"> </p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">现在有一个例子来实现<font face="Palatino-Roman">KeyGenerator</font><font face="宋体">类来产生</font><font face="Palatino-Roman">private key</font><font face="宋体">和</font><font face="Palatino-Roman">public key</font><font face="宋体">并存在</font><font face="Palatino-Roman">KeyPair</font><font face="宋体">对象里：</font></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 9pt; mso-spacerun: yes">import java.security.KeyPairGenerator;<br>
import java.security.KeyPair;<br>
import java.security.SecureRandom;<br>
import java.security.NoSuchAlgorithmException;<br>
import java.security.NoSuchProviderException;<br>
import java.security.PublicKey;<br>
import java.security.PrivateKey;<br>
public class KeyPairGeneratorExample {<br>
public KeyPair generateKeyPair(long seed)<br>
{<br>
try {<br>
// Get a DSA key generator from first<br>
// provider that provides it<br>
KeyPairGenerator keyGenerator =<br>
KeyPairGenerator.getInstance(&ldquo;DSA&rdquo;);<br>
// Get a random number generator using<br>
// algorithm SHA1PRNG from the SUN provider package.<br>
SecureRandom rng =<br>
SecureRandom.getInstance(&ldquo;SHA1PRNG&rdquo;, &ldquo;SUN&rdquo;);<br>
// Configure RNG and initialize key pair generator<br>
rng.setSeed(seed);<br>
keyGenerator.initialize(1024, rng);<br>
return(keyGenerator.generateKeyPair());<br>
} catch(NoSuchProviderException nspe) {<br>
System.out.println(&ldquo;Exception: &ldquo; + nspe);<br>
nspe.printStackTrace();<br>
} catch(NoSuchAlgorithmException nsae) {<br>
System.out.println(&ldquo;Exception: &ldquo; + nsae);<br>
nsae.printStackTrace();<br>
}<br>
return(null);<br>
}&nbsp;&nbsp;</span></p>
<div class="Section0" style="layout-grid:  15.6pt none">
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"> </p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 8.5pt; mso-spacerun: yes">public static void main(String args[])</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 8.5pt; mso-spacerun: yes">{</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 8.5pt; mso-spacerun: yes">KeyPairGeneratorExample kpge = new KeyPairGeneratorExample();</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 8.5pt; mso-spacerun: yes">KeyPair kp = kpge.generateKeyPair(717);</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 8.5pt; mso-spacerun: yes">System.out.println(&ldquo;-- Public Key ----&rdquo;);</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 8.5pt; mso-spacerun: yes">PublicKey pubKey = kp.getPublic();</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 8.5pt; mso-spacerun: yes">System.out.println(&ldquo; Algorithm=&rdquo; + pubKey.getAlgorithm());</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 8.5pt; mso-spacerun: yes">System.out.println(&ldquo; Encoded=&rdquo; + pubKey.getEncoded());</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 8.5pt; mso-spacerun: yes">System.out.println(&ldquo; Format=&rdquo; + pubKey.getFormat());</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 8.5pt; mso-spacerun: yes">System.out.println(&ldquo;\n-- Private Key ----&rdquo;);</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 8.5pt; mso-spacerun: yes">PrivateKey priKey = kp.getPrivate();</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 8.5pt; mso-spacerun: yes">System.out.println(&ldquo; Algorithm=&rdquo; + priKey.getAlgorithm());</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 8.5pt; mso-spacerun: yes">System.out.println(&ldquo; Encoded=&rdquo; + priKey.getEncoded());</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 8.5pt; mso-spacerun: yes">System.out.println(&ldquo; Format=&rdquo; + priKey.getFormat());</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 8.5pt; mso-spacerun: yes">}</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 8.5pt; mso-spacerun: yes">}</span></p>
<span style="font-size: 8.5pt; mso-spacerun: yes">
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">这个类利用特定的随机数产生器<font face="Palatino-Roman">-</font></span><span style="font-size: 10.5pt; mso-spacerun: yes">SHA1PRNG<font face="宋体">（来自</font><font face="Palatino-Roman">SUN provider</font><font face="宋体">包）。</font></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">你会看到<font face="Palatino-Roman">private</font><font face="宋体">和</font><font face="Palatino-Roman">public key</font><font face="宋体">的不同，输出结果：</font></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 8.5pt; color: rgb(0,0,255); mso-spacerun: yes">-- Public Key ----</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 8.5pt; color: rgb(0,0,255); mso-spacerun: yes">Algorithm=DSA</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 8.5pt; color: rgb(0,0,255); mso-spacerun: yes">Encoded=[B@1a46e30</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 8.5pt; color: rgb(0,0,255); mso-spacerun: yes">Format=X.509</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 8.5pt; color: rgb(0,0,255); mso-spacerun: yes">-- Private Key ----</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 8.5pt; color: rgb(0,0,255); mso-spacerun: yes">Algorithm=DSA</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 8.5pt; color: rgb(0,0,255); mso-spacerun: yes">Encoded=[B@3e25a5</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 8.5pt; color: rgb(0,0,255); mso-spacerun: yes">Format=PKCS#8</span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"> </p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes">Public key<font face="宋体">的编码格式是</font><font face="Palatino-Roman">X509</font></span><span style="font-size: 10.5pt; mso-spacerun: yes">,private key<font face="宋体">的编码格式</font><font face="Palatino-Roman">PKCS#8</font><font face="宋体">。</font></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; mso-spacerun: yes"><font face="宋体">下接：<a href="http://hi.baidu.com/wiselyman/blog/item/13869722dcf905f9d6cae2b2.html" target="_blank">1、1 JCA Design and Architecture（三）</a></font></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"> </p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"> </p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"> </p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"> </p>
</span></div>
</div>
</span></span></span> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/wiselyman/blog/category/java%B8%DF%BC%B6">java高级</a>&nbsp;<a href="http://hi.baidu.com/wiselyman/blog/item/3b4da601c3cf690c1c9583c2.html#comment">查看评论</a>]]></description>
        <pubDate>2009年09月13日 星期日  18:22</pubDate>
        <category><![CDATA[java高级]]></category>
        <author><![CDATA[wiselyman]]></author>
		<guid>http://hi.baidu.com/wiselyman/blog/item/3b4da601c3cf690c1c9583c2.html</guid>
</item>

<item>
        <title><![CDATA[1、2 Java Cryptography Extension]]></title>
        <link><![CDATA[http://hi.baidu.com/wiselyman/blog/item/13869722c01109f9d7cae29a.html]]></link>
        <description><![CDATA[
		
		1.2 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/wiselyman/blog/category/java%B8%DF%BC%B6">java高级</a>&nbsp;<a href="http://hi.baidu.com/wiselyman/blog/item/13869722c01109f9d7cae29a.html#comment">查看评论</a>]]></description>
        <pubDate>2009年09月12日 星期六  18:47</pubDate>
        <category><![CDATA[java高级]]></category>
        <author><![CDATA[wiselyman]]></author>
		<guid>http://hi.baidu.com/wiselyman/blog/item/13869722c01109f9d7cae29a.html</guid>
</item>


</channel>
</rss>