﻿<?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-chinadave</title><link>http://www.blogjava.net/chinadave/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 06:04:31 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 06:04:31 GMT</pubDate><ttl>60</ttl><item><title>Tomcat6.0 SSL的配置</title><link>http://www.blogjava.net/chinadave/archive/2009/12/14/305930.html</link><dc:creator>whoami</dc:creator><author>whoami</author><pubDate>Mon, 14 Dec 2009 09:30:00 GMT</pubDate><guid>http://www.blogjava.net/chinadave/archive/2009/12/14/305930.html</guid><wfw:comment>http://www.blogjava.net/chinadave/comments/305930.html</wfw:comment><comments>http://www.blogjava.net/chinadave/archive/2009/12/14/305930.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chinadave/comments/commentRss/305930.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chinadave/services/trackbacks/305930.html</trackback:ping><description><![CDATA[<p class="g_p_center g_t_wrap g_t_left g_t_20 g_c_pdin c07" id="blogtitle_fks_082070082084082070087081086095080082085066086083083070" style="margin: 20px auto 10px;"><span style="font-family: '微软雅黑','黑体',Arial,Helvetica,Sans-Serif;">Tomcat6.0 SSL的配置</span></p>
<div class="g_p_center g_t_right g_c_pdin g_h_20 c08" style="margin-bottom: 15px;">
<div class="g_p_left">
<a id="aBelongClsfks_082070082084082070087081086095080082085066086083083070" class="c05" href="http://blog.163.com/haizai219@126/blog/static/44412555200962733028452/#" onclick="NEBlog.gPermaLinkPage.updownMenu.openSameClass('fks_080065084085084068082087074071080082080065081083083', 'J2EE');">J2EE</a>
&nbsp;&nbsp;<span class="g_t_12 c08">2009-07-27 15:30</span>
<span class="c08">&nbsp;&nbsp;阅读<nobr id="accessCount_fks_082070082084082070087081086095080082085066086083083070">217</nobr>&nbsp;&nbsp;&nbsp;评论<nobr id="comCount_fks_082070082084082070087081086095080082085066086083083070">0</nobr></span>
<span class="c08">&nbsp;</span>
</div>
<div>字号：
<a id="bigfont" href="http://blog.163.com/haizai219@126/blog/static/44412555200962733028452/#" class="g_c_ul c05" onclick="NEBlog.gPermaLinkPage.updownMenu.changeFont('blogtext_fks_082070082084082070087081086095080082085066086083083070', 1);return false;" style="font-size: 12px;">大</a><span class="g_t_bold c07" id="bigfont_off" style="display: none;">大</span>&nbsp;
<a id="middlefont" href="http://blog.163.com/haizai219@126/blog/static/44412555200962733028452/#" class="g_c_ul c05" onclick="NEBlog.gPermaLinkPage.updownMenu.changeFont('blogtext_fks_082070082084082070087081086095080082085066086083083070', 2);return false;" style="font-size: 12px;">中</a><span class="g_t_bold c07" id="middlefont_off" style="display: none;">中</span>&nbsp;
<a id="smallfont" class="g_c_ul c05" href="http://blog.163.com/haizai219@126/blog/static/44412555200962733028452/#" onclick="NEBlog.gPermaLinkPage.updownMenu.changeFont('blogtext_fks_082070082084082070087081086095080082085066086083083070', 3);return false;" style="display: none; font-size: 12px;">小</a><span class="g_t_bold c07" id="smallfont_off" style="display: inline;">小</span>
</div>
</div>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: #333333;" lang="EN-US">1. </span><span style="font-family: 宋体; color: #333333;">参考：</span></p>
<p style="text-align: left; text-indent: 21pt; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: #333333;" lang="EN-US">Tomcat 6.0 </span><span style="font-family: 宋体; color: #333333;">自带的文档</span><span style="font-family: Arial; color: #333333;" lang="EN-US">docs/ssl-howto.html</span><span style="font-family: 宋体; color: #333333;">，详细介绍了配置过程。</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: #333333;" lang="EN-US">2. </span><span style="font-family: 宋体; color: #333333;">目的：</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: #333333;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体; color: #333333;">以下详细描述配置过程，仅作为备忘录。</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: #333333;" lang="EN-US">3. </span><span style="font-family: 宋体; color: #333333;">备忘录：</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: #333333;" lang="EN-US">Step1</span><span style="font-family: 宋体; color: #333333;">，安装</span><span style="font-family: Arial; color: #333333;" lang="EN-US">tomcat 6.0.18</span><span style="font-family: 宋体; color: #333333;">，此为当前最新版本，需</span><span style="font-family: Arial; color: #333333;" lang="EN-US">JDK5.0</span><span style="font-family: 宋体; color: #333333;">或以上。</span></p>
<p style="margin-left: 42.05pt; text-align: left; text-indent: -21pt; line-height: 16.5pt;" align="left"><span style="font-family: Wingdings; color: #333333;" lang="EN-US"><span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span style="font-family: Arial; color: #333333;" lang="EN-US">JDK</span><span style="font-family: 宋体; color: #333333;">安装后，可以在命令行下使用如下命令检测是否成功。</span></p>
<p style="margin-left: 21.05pt; text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: #333333;" lang="EN-US">C:\Documents and
Settings\new&gt;</span><strong><span style="font-family: Arial; color: red;" lang="EN-US">java -version</span></strong></p>
<p style="margin-left: 21.05pt; text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: blue;" lang="FR">java version "1.6.0_10"</span></p>
<p style="margin-left: 21.05pt; text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: blue;" lang="FR">Java(TM) SE Runtime
Environment (build 1.6.0_10-b33)</span></p>
<p style="margin-left: 21.05pt; text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: blue;" lang="EN-US">Java HotSpot(TM)
Client VM (build 11.0-b15, mixed mode, sharing)</span></p>
<p style="margin-left: 21.05pt; text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: 宋体;">看到以上蓝色信息，则表示</span><span style="font-family: Arial;" lang="EN-US">JDK</span><span style="font-family: 宋体;">安装配置成功。</span></p>
<p style="margin-left: 42.05pt; text-align: left; text-indent: -21pt; line-height: 16.5pt;" align="left"><span style="font-family: Wingdings;" lang="EN-US"><span>l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span></span><span style="font-family: Arial;" lang="EN-US">Tomcat</span><span style="font-family: 宋体;">的运行需要配置</span><span style="font-family: Arial;" lang="EN-US">JDK_HOME</span><span style="font-family: 宋体;">和</span><span style="font-family: Arial;" lang="EN-US">JRE_HOME</span><span style="font-family: 宋体;">环境变量，</span><span style="font-family: Arial;" lang="EN-US">JRE_HOME</span><span style="font-family: 宋体;">默认等于</span><span style="font-family: Arial;" lang="EN-US">JDK_HOME</span><span style="font-family: 宋体;">的值。</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: #333333;" lang="EN-US">Step2</span><span style="font-family: 宋体; color: #333333;">，创建服务器端</span><span style="font-family: Arial; color: #333333;" lang="EN-US">certificate
keystore</span><span style="font-family: 宋体; color: #333333;">和自签名</span><span style="font-family: Arial; color: #333333;" lang="EN-US">certificate</span><span style="font-family: 宋体; color: #333333;">。</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: #333333;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体; color: #333333;">在命令行下使用如下命令：</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial;" lang="EN-US">C:\Documents and Settings\new&gt;<span style="color: red;">keytool
-genkey -alias mykey -keyalg RSA -keystore server.keystore</span></span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: 宋体; color: blue;">输入</span><span style="font-family: Arial; color: blue;" lang="EN-US">keystore</span><span style="font-family: 宋体; color: blue;">密码：</span><span style="font-family: Arial; color: blue;" lang="EN-US">123456</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: 宋体; color: blue;">再次输入新密码</span><span style="font-family: Arial; color: blue;" lang="EN-US">:123456</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: 宋体; color: blue;">您的名字与姓氏是什么？</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: blue;" lang="EN-US"><span>&nbsp;
</span>[Unknown]</span><span style="font-family: 宋体; color: blue;">：</span><span style="font-family: Arial; color: blue;" lang="EN-US"><span>&nbsp; </span>dinstone</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: 宋体; color: blue;">您的组织单位名称是什么？</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: blue;" lang="EN-US"><span>&nbsp;
</span>[Unknown]</span><span style="font-family: 宋体; color: blue;">：</span><span style="font-family: Arial; color: blue;" lang="EN-US"><span>&nbsp; </span>advance software ltd.</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: 宋体; color: blue;">您的组织名称是什么？</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: blue;" lang="EN-US"><span>&nbsp;
</span>[Unknown]</span><span style="font-family: 宋体; color: blue;">：</span><span style="font-family: Arial; color: blue;" lang="EN-US"><span>&nbsp; </span>china</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: 宋体; color: blue;">您所在的城市或区域名称是什么？</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: blue;" lang="EN-US"><span>&nbsp;
</span>[Unknown]</span><span style="font-family: 宋体; color: blue;">：</span><span style="font-family: Arial; color: blue;" lang="EN-US"><span>&nbsp; </span>beijing</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: 宋体; color: blue;">您所在的州或省份名称是什么？</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: blue;" lang="EN-US"><span>&nbsp;
</span>[Unknown]</span><span style="font-family: 宋体; color: blue;">：</span><span style="font-family: Arial; color: blue;" lang="EN-US"><span>&nbsp; </span>beijing</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: 宋体; color: blue;">该单位的两字母国家代码是什么</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: blue;" lang="EN-US"><span>&nbsp;
</span>[Unknown]</span><span style="font-family: 宋体; color: blue;">：</span><span style="font-family: Arial; color: blue;" lang="EN-US"><span>&nbsp; </span>cn</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: blue;" lang="EN-US">CN=dinstone, OU=advance software ltd.,
O=china, L=beijing, ST=beijing, C=cn </span><span style="font-family: 宋体; color: blue;">正确吗？</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: blue;" lang="EN-US"><span>&nbsp; </span>[</span><span style="font-family: 宋体; color: blue;">否</span><span style="font-family: Arial; color: blue;" lang="EN-US">]</span><span style="font-family: 宋体; color: blue;">：</span><span style="font-family: Arial; color: blue;" lang="EN-US"><span>&nbsp; </span>y</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: blue;" lang="EN-US">&nbsp;</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: 宋体; color: blue;">输入</span><span style="font-family: Arial; color: blue;" lang="EN-US">&lt;mykey&gt;</span><span style="font-family: 宋体; color: blue;">的主密码</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: blue;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体; color: blue;">（如果和</span><span style="font-family: Arial; color: blue;" lang="EN-US"> keystore </span><span style="font-family: 宋体; color: blue;">密码相同，按回车）：</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: 宋体; color: #333333;">在</span><span style="font-family: Arial; color: #333333;" lang="EN-US">C:\Documents and Settings\new</span><span style="font-family: 宋体; color: #333333;">下可以找到一个文件：</span><span style="font-family: Arial; color: #333333;" lang="EN-US">server.keystore</span><span style="font-family: 宋体; color: #333333;">，其中就包含了自签名的证书。</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: 宋体; color: #333333;">注意：</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: #333333;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体; color: #333333;">这里要求</span><span style="font-family: Arial; color: #333333;" lang="EN-US">certificate
keystore </span><span style="font-family: 宋体; color: #333333;">和</span><span style="font-family: Arial; color: #333333;" lang="EN-US">certificate</span><span style="font-family: 宋体; color: #333333;">的密码一致，此为</span><span style="font-family: Arial; color: #333333;" lang="EN-US">Tomcat</span><span style="font-family: 宋体; color: #333333;">的约束。</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: #333333;" lang="EN-US">Step3</span><span style="font-family: 宋体; color: #333333;">，在</span><span style="font-family: Arial; color: #333333;" lang="EN-US">%TOMCAT_HOME%</span><span style="font-family: 宋体; color: #333333;">目录下新建目录</span><span style="font-family: Arial; color: #333333;" lang="EN-US">keystore</span><span style="font-family: 宋体; color: #333333;">，并拷贝</span><span style="font-family: Arial; color: #333333;" lang="EN-US">server.keystore</span><span style="font-family: 宋体; color: #333333;">到其目录下。</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: #333333;" lang="EN-US">Step4</span><span style="font-family: 宋体; color: #333333;">，修改</span><span style="font-family: Arial; color: #333333;" lang="EN-US">%TOMCAT_HOME%/conf/server.xml</span><span style="font-family: 宋体; color: #333333;">文件。添加</span><span style="font-family: Arial; color: #333333;" lang="EN-US">https</span><span style="font-family: 宋体; color: #333333;">的</span><span style="font-family: Arial; color: #333333;" lang="EN-US">Connector</span><span style="font-family: 宋体; color: #333333;">。</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: #333333;" lang="EN-US">&lt;Connector </span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: #333333;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>port="8443" minSpareThreads="5"
maxSpareThreads="75"</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: #333333;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>enableLookups="true" disableUploadTimeout="true" </span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: #333333;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>acceptCount="100"<span>&nbsp;
</span>maxThreads="200"</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: #333333;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>scheme="https" secure="true"
SSLEnabled="true"</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: #333333;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style="font-family: Arial; color: red;" lang="EN-US">keystoreFile="keystore/server.keystore"
keystorePass="123456"</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: #333333;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>clientAuth="false" sslProtocol="TLS"/&gt;</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: 宋体; color: #333333;">注意：</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial; color: #333333;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: Arial; color: red;" lang="EN-US">keystoreFile</span><span style="font-family: 宋体; color: red;">指向文件</span><span style="font-family: Arial; color: #333333;" lang="EN-US">%TOMCAT_HOME%/</span><span style="font-family: Arial; color: red;" lang="EN-US">keystore/server.keystore</span><span style="font-family: 宋体; color: red;">文件。</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: Arial; color: red;" lang="EN-US">keystorePass</span><span style="font-family: 宋体; color: red;">就是刚才生成</span><span style="font-family: Arial; color: red;" lang="EN-US">certificate
keystore</span><span style="font-family: 宋体; color: red;">的密码。</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial;" lang="EN-US">Step5</span><span style="font-family: 宋体;">，测试</span><span style="font-family: Arial;" lang="EN-US">Https</span><span style="font-family: 宋体;">。访问</span><span style="font-family: Arial;" lang="EN-US"><a href="https://localhost:8443/">https://localhost:8443/</a></span><span style="font-family: 宋体;">，提示有不安全的证书，接受证书，看到可亲的</span><span style="font-family: Arial;" lang="EN-US">tom</span><span style="font-family: 宋体;">猫。</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-family: Arial;" lang="EN-US">4. </span><span style="font-family: 宋体;">延伸</span></p>
<p style="text-align: left; text-indent: 21pt; line-height: 16.5pt;" align="left"><span style="font-family: 宋体;">某些情况下，某些特定资源需要走</span><span style="font-family: Arial;" lang="EN-US">https</span><span style="font-family: 宋体;">协议，如登录请求。这时，我们可以在</span><span style="font-family: Arial;" lang="EN-US">web.xml</span><span style="font-family: 宋体;">中配置约束。</span></p>
<p style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f5fbf;" lang="EN-US">&lt;security-constraint&gt;</span></p>
<p style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f5fbf;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;web-resource-collection&gt;</span></p>
<p style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f5fbf;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span>&lt;web-resource-name&gt;SSL
Resource&lt;/web-resource-name&gt;</span></p>
<p style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f5fbf;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp; </span>&lt;url-pattern&gt;/login.jsp&lt;/url-pattern&gt;</span></p>
<p style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f5fbf;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/web-resource-collection&gt;</span></p>
<p style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f5fbf;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;user-da<wbr>ta-constraint&gt;</span></p>
<pre><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f5fbf;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;transport-guarantee&gt;</span></pre>
<pre><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f5fbf;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>CONFIDENTIAL</span></pre>
<p style="margin-left: 84pt; text-align: left; text-indent: 10pt;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f5fbf;" lang="EN-US">&lt;/transport-guarantee&gt;</span></p>
<p style="text-align: left;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f5fbf;" lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;/user-da<wbr>ta-constraint&gt;</span></p>
<p style="text-align: left; line-height: 16.5pt;" align="left"><span style="font-size: 10pt; font-family: &quot;Courier New&quot;; color: #3f5fbf;" lang="EN-US">&lt;/security-constraint&gt;</span></p>
<p><span style="font-family: 宋体; color: red;">这样当使用如下请求访问登录页面时，则服务器将该请求建立在</span><span style="font-family: Arial; color: red;" lang="EN-US">https</span><span style="font-family: 宋体; color: red;">连接上。</span></p>
<p><span style="font-family: Arial;" lang="EN-US"><a href="http://localhost:8080/CCB/login.jsp">http://localhost:8080/CCB/login.jsp</a></span></p>
<img src ="http://www.blogjava.net/chinadave/aggbug/305930.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chinadave/" target="_blank">whoami</a> 2009-12-14 17:30 <a href="http://www.blogjava.net/chinadave/archive/2009/12/14/305930.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat6配置使用SSL双向认证</title><link>http://www.blogjava.net/chinadave/archive/2009/12/14/305865.html</link><dc:creator>whoami</dc:creator><author>whoami</author><pubDate>Mon, 14 Dec 2009 03:51:00 GMT</pubDate><guid>http://www.blogjava.net/chinadave/archive/2009/12/14/305865.html</guid><wfw:comment>http://www.blogjava.net/chinadave/comments/305865.html</wfw:comment><comments>http://www.blogjava.net/chinadave/archive/2009/12/14/305865.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chinadave/comments/commentRss/305865.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chinadave/services/trackbacks/305865.html</trackback:ping><description><![CDATA[最近要做一个登录时数字证书验证的功能，在用户登录时除了效验用户名密码，还需验证其数字证书。 <br />
<br />
相关资源：<a href="http://www.ibm.com/developerworks/cn" target="_blank">IBM  developerWroks中国</a>中的<a href="http://www.ibm.com/developerworks/cn/security/se-tcssl/index.html" target="_blank">tomcat4中使用SSL</a>，<a href="http://www.javaeye.com/" target="_blank">javaeye</a>中的<a href="http://www.javaeye.com/article/88918?page=2" target="_blank">Acegi X.509双向认证</a> <br />
<br />
与<a href="http://www.ibm.com/developerworks/cn/security/se-tcssl/index.html" target="_blank">tomcat4中使用SSL</a>中的异同：jdk1.4中已经包含JSSE。 <br />
<br />
与<a href="http://www.javaeye.com/article/88918?page=2" target="_blank">AcegiX.509双向认证</a>中的异同：tomcat6配置文件多了SSLEnabled="true"属性。  <br />
<br />
1.生成CA证书。目前不使用第三方权威机构的CA来认证，自己充当CA的角色。 <br />
<br />
<blockquote>1.创建私钥 ：C:\OpenSSL\apps&gt;openssl genrsa -out root/root-key.pem  1024 <br />
2.创建证书请求 ：C:\OpenSSL\apps&gt;openssl req -new -out root/root-req.csr  -key root/root-key.pem <br />
3.自签署证书 ：C:\OpenSSL\apps&gt;openssl x509 -req -in  root/root-req.csr -out root/root-cert.pem -signkey <br />
root/root-key.pem -days  3650 <br />
4.将证书导出成浏览器支持的.p12格式 ：C:\OpenSSL\apps&gt;openssl pkcs12 -export  -clcerts -in root/root-cert.pem -inkey <br />
root/root-key.pem -out root/root.p12  <br />
</blockquote><br />
2.生成server证书。 <br />
<br />
<blockquote>1.创建私钥 ：C:\OpenSSL\apps&gt;openssl genrsa -out server/server-key.pem  1024 <br />
2.创建证书请求 ：C:\OpenSSL\apps&gt;openssl req -new -out  server/server-req.csr -key server/server-key.pem <br />
3.自签署证书  ：C:\OpenSSL\apps&gt;openssl x509 -req -in server/server-req.csr -out  server/server-cert.pem -signkey <br />
server/server-key.pem -CA root/root-cert.pem  -CAkey root/root-key.pem -CAcreateserial -days 3650 <br />
4.将证书导出成浏览器支持的.p12格式  ：C:\OpenSSL\apps&gt;openssl pkcs12 -export -clcerts -in server/server-cert.pem  -inkey <br />
server/server-key.pem -out server/server.p12  <br />
</blockquote><br />
3.生成client证书。 <br />
<br />
<blockquote>1.创建私钥 ：C:\OpenSSL\apps&gt;openssl genrsa -out client/client-key.pem  1024 <br />
2.创建证书请求 ：C:\OpenSSL\apps&gt;openssl req -new -out  client/client-req.csr -key client/client-key.pem <br />
3.自签署证书  ：C:\OpenSSL\apps&gt;openssl x509 -req -in client/client-req.csr -out  client/client-cert.pem -signkey <br />
client/client-key.pem -CA root/root-cert.pem  -CAkey root/root-key.pem -CAcreateserial -days 3650 <br />
4.将证书导出成浏览器支持的.p12格式  ：C:\OpenSSL\apps&gt;openssl pkcs12 -export -clcerts -in client/client-cert.pem  -inkey <br />
client/client-key.pem -out client/client.p12  <br />
</blockquote><br />
4.根据root证书生成jks文件 <br />
<br />
<blockquote>C:\OpenSSL\apps\root&gt;keytool -import -v -trustcacerts -storepass  password -alias root -file root-cert.pem <br />
-keystore root.jks  <br />
</blockquote><br />
5.配置tomcat  ssl，修改conf/server.xml。tomcat6中多了SSLEnabled="true"属性。 <br />
keystorefile,  truststorefile设置为你正确的相关路径 <br />
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">connector</span><span>&nbsp;</span><span class="attribute">secure</span><span>=</span><span class="attribute-value">"true"</span><span>&nbsp;</span><span class="attribute">scheme</span><span>=</span><span class="attribute-value">"https"</span><span>&nbsp;</span><span class="attribute">protocol</span><span>=</span><span class="attribute-value">"HTTP/1.1"</span><span>&nbsp;</span><span class="attribute">port</span><span>=</span><span class="attribute-value">"8443"</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="attribute">sslenabled</span><span>=</span><span class="attribute-value">"true"</span><span>&nbsp;</span><span class="attribute">maxhttpheadersize</span><span>=</span><span class="attribute-value">"8192"</span><span>&nbsp;</span><span class="attribute">maxthreads</span><span>=</span><span class="attribute-value">"150"</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="attribute">minsparethreads</span><span>=</span><span class="attribute-value">"25"</span><span>&nbsp;</span><span class="attribute">maxsparethreads</span><span>=</span><span class="attribute-value">"75"</span><span>&nbsp;</span><span class="attribute">enablelookups</span><span>=</span><span class="attribute-value">"false"</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="attribute">disableuploadtimeout</span><span>=</span><span class="attribute-value">"true"</span><span>&nbsp;</span><span class="attribute">acceptcount</span><span>=</span><span class="attribute-value">"100"</span><span>&nbsp;</span><span class="attribute">sslprotocol</span><span>=</span><span class="attribute-value">"TLS"</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="attribute">clientauth</span><span>=</span><span class="attribute-value">"true"</span><span>&nbsp;</span><span class="attribute">keystorefile</span><span>=</span><span class="attribute-value">"d:/path/bin/x509/server.p12"</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="attribute">keystoretype</span><span>=</span><span class="attribute-value">"PKCS12"</span><span>&nbsp;</span><span class="attribute">keystorepass</span><span>=</span><span class="attribute-value">"123456"</span><span>&nbsp;</span><span class="attribute">truststorefile</span><span>=</span><span class="attribute-value">"d:/path/bin/x509/root.jks"</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="attribute">truststoretype</span><span>=</span><span class="attribute-value">"JKS"</span><span>&nbsp;</span><span class="attribute">truststorepass</span><span>=</span><span class="attribute-value">"123456"</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<br />
6.将root.p12，client.p12分别导入到IE中去（打开IE-&gt;;Internet选项-&gt;内容-&gt;证书）。  <blockquote>root.p12导入至<strong>受信任的根证书颁发机构</strong>，client.p12导入至<strong>个人</strong></blockquote>7.访问你的应用<a href="http://ip:8443/" target="_blank">http://ip:8443</a>，如果配置正确的话会出现请求你数字证书的对话框。  <br />
8.在jsp中取得符合x.509格式的证书<br />
<ol class="dp-j" start="1">
    <li class="alt"><span><span>&lt;%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//获得certificate&nbsp;chain&nbsp;&nbsp;&nbsp;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;X509Certificate[]&nbsp;ca=(X509Certificate[])request.getAttribute(<span class="string">"javax.servlet.request.X509Certificate"</span><span>);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(ca==</span><span class="keyword">null</span><span>)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(<span class="string">"No&nbsp;cert&nbsp;info!"</span><span>);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">else</span><span>&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;&nbsp;serial=ca[<span class="number">0</span><span>].getSerialNumber().toString();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;DN=ca[<span class="number">0</span><span>].getSubjectDN().toString();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%&gt;&nbsp; </span></li>
</ol>
<br />
<div class="code_title"><br />
</div>
<img src ="http://www.blogjava.net/chinadave/aggbug/305865.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chinadave/" target="_blank">whoami</a> 2009-12-14 11:51 <a href="http://www.blogjava.net/chinadave/archive/2009/12/14/305865.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java&amp;CORBA编程实例</title><link>http://www.blogjava.net/chinadave/archive/2009/11/16/302469.html</link><dc:creator>whoami</dc:creator><author>whoami</author><pubDate>Mon, 16 Nov 2009 03:05:00 GMT</pubDate><guid>http://www.blogjava.net/chinadave/archive/2009/11/16/302469.html</guid><wfw:comment>http://www.blogjava.net/chinadave/comments/302469.html</wfw:comment><comments>http://www.blogjava.net/chinadave/archive/2009/11/16/302469.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chinadave/comments/commentRss/302469.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chinadave/services/trackbacks/302469.html</trackback:ping><description><![CDATA[<span style="font-size: 12pt;"><span style="font-size: 10pt;">
<p>Java IDL技术在Java平台上添加了CORBA(Common Object Request Broker
Architecture)功能，提供了基于标准的互操作能力和连接性。Java IDL技术使得分布式的Java
Web应用能够通过使用工业标准的IDL和IIOP(Internet Inter-ORB
Protocol)来透明地调用远程网络服务的操作。运行时组件(Runtime
Components)包括了一个用于分布式计算且使用IIOP通信的Java ORB.</p>
<p>可移植对象适配器（Portable Object Adapter，POA）<br />
CORBA对象的负责分隔服务器端远程调用句柄
（handler）到远程对象和它的服务者（servant）。对象由远程调用所暴露，而服务者包含实际处理这些请求的方法。每个对象都可以选择服务者为
静态的（一次）或动态的（每个远程调用），在这两种情况下，都允许调用转移到另一台服务器。<br />
在服务器端，POA形成了类似树状的结构，每个POA都负责一到多个服务的对象。树的分支可以是独立活动的、或钝化的，服务者调用有不同的代码和不同的请求处理策略。</p>
<p>API规范<br />
&nbsp;&nbsp;&nbsp; * org.omg.CORBA 包 - 提供了OMG CORBA APIs到Java编程语言的映射<br />
&nbsp;&nbsp;&nbsp; * org.omg.CosNaming 包 - 为Java IDL提供命名服务<br />
&nbsp;&nbsp;&nbsp; * org.omg.PortableServer 包 - 为建立服务器端的可移植的、跨越多ORB的应用程序提供类和接口<br />
&nbsp;&nbsp;&nbsp; * org.omg.PortableInterceptor 包 - 提供了注册ORB钩子的机制，此钩子通过ORB服务能截取正常的ORB执行流<br />
&nbsp;&nbsp;&nbsp; * org.omg.DynamicAny 包 - 提供了使得任何值都能被动态解释（或遍历）和通过DynAny对象构造出来的类和接口<br />
&nbsp;&nbsp;&nbsp; * org.omg.CORBA.ORB - 为CORBA ORB功能的API</p>
<p>分布式对象之间的关系有两方面：客户端和服务器。<br />
服务器提供远程接口，客户端调用远程接口。<br />
在客户端，应用程序包括远程对象的引用。该对象引用有stub方法，它是独立的远程方法。stub方法实际连接到ORB，因此调用它实际上转发调用到服务器。<br />
在服务器端，ORB使用skeleton代码翻译远程调用为本地对象的方法调用。Skeleton把调用转换成指定实现的格式，并在方法中调用。当方法返回时，Skeleton代码转换方法调用的结果或错误，经ORB送回客户端。</p>
<p>Java IDL开发过程<br />
1）定义远程接口<br />
使用IDL语言为远程对象定义接口。<br />
【Billing.idl源代码】如下：</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://blog.csdn.net/chszs/archive/2009/07/16/4353478.aspx#" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><a href="http://blog.csdn.net/chszs/archive/2009/07/16/4353478.aspx#" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy to clipboard</a><a href="http://blog.csdn.net/chszs/archive/2009/07/16/4353478.aspx#" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a><a href="http://blog.csdn.net/chszs/archive/2009/07/16/4353478.aspx#" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div>
</div>
<ol class="dp-j" start="1">
    <li class="alt"><span class="comment">//&nbsp;声明CORBA&nbsp;IDL模块&nbsp;&nbsp;</span></li>
    <li class="">module&nbsp;BillingApp{&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;声明接口&nbsp;&nbsp;</span></li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">interface&nbsp;Billing{&nbsp;&nbsp;</span></li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;successBilling();&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oneway&nbsp;<span class="keyword">void&nbsp;shutdown();&nbsp;&nbsp;</span></li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp;&nbsp;</li>
    <li class="">};&nbsp;&nbsp;</li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="java">// 声明CORBA IDL模块
module BillingApp{
// 声明接口
interface Billing{
string successBilling();
oneway void shutdown();
};
};</textarea>
<p>2）编译远程接口<br />
使用idlj编译器生成Java语言的stub和skeleton源文件。<br />
idlj编译器缺省只生成客户端的binding代码。如果同时需要客户端的bindings和服务器端的skeletons，必须加上-fall选项。<br />
使用POA(Portable Object Adaptor)的优点：<br />
&#183; 允许编程者构建对象在不同ORB产品之间的可移植实现<br />
&#183; 支持带持久化标识的对象<br />
&#183; 对对象的透明活动提供支持<br />
&#183; 允许单个servant支持多种对象同时标识<br />
注意：确定jdk/bin目录下有：idlj、java、javac、orbd<br />
命令：<br />
&nbsp;idlj -fall Billing.idl<br />
在当前目录下生成BillingApp目录，包含如下六个文件：<br />
&#183; Billing.java&nbsp;&nbsp;&nbsp; ————&gt; 此接口包含IDL接口的Java版本。它继承自org.omg.CORBA.Object，提供标准的CORBA对象功能。<br />
&#183; BillingHelper.java&nbsp;&nbsp;&nbsp; ————&gt; 此类提供辅助功能，Helper类负责读写数据类型到CORBA流，以及插入和提取数据类型。<br />
&#183; BillingHolder.java&nbsp;&nbsp;&nbsp; ————&gt; This final class holds a public instance member of type Billing.<br />
&#183; BillingOperations.java&nbsp;&nbsp;&nbsp; ————&gt; 此接口包含successBilling()和shutdown()方法。<br />
&#183;
BillingPOA.java&nbsp;&nbsp;&nbsp; ————&gt;
此抽象类是基于流的服务器Skeleton，为服务器提供基本的CORBA功能。它继承org.omg.PortableServer.Servant，
实现了InvokeHandler接口和BillingOperations接口。服务器类BillingServant继承BillingPOA。<br />
&#183;
_BillingStub.java&nbsp;&nbsp;&nbsp; ————&gt;
此类是客户端stub，为客户端提供CORBA功能。它继承org.omg.CORBA.Object，提供标准CORBA对象功能。还扩展了
BillingOperations接口和org.omg.CORBA.portable.IDLEntity接口。</p>
<p>3）实现服务器端<br />
一旦使用idlj编译器后，就可以使用它产生的Skeleton装配服务器应用程序了。另外要实现远程接口方法，服务器代码应包含启动ORB和等待远程客户端调用的机制。<br />
服务器端由两个类组成，一个是servant，另一个是Server。<br />
servant是BillingImpl类，是Billing IDL接口的实现，每个Billing实例均由BillingImpl实例实现。servant是BillingPOA的子类。<br />
servant包含了IDL定义的所有方法，与通常的Java方法类似。<br />
server类含服务器的main()方法，它：<br />
&#183; 创建和初始化ORB实例<br />
&#183; 获得根POA的引用并激活POAManager<br />
&#183; 创建一个Servant实例（CORBA的Billing对象的实现）并通知ORB<br />
&#183; 获得根命名上下文<br />
&#183; 在命名上下文用&#8220;Billing&#8221;名注册新对象<br />
&#183; 等待客户端调用此新对象</p>
<p>【BillingImpl.java源码】：<br />
</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://blog.csdn.net/chszs/archive/2009/07/16/4353478.aspx#" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><a href="http://blog.csdn.net/chszs/archive/2009/07/16/4353478.aspx#" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy to clipboard</a><a href="http://blog.csdn.net/chszs/archive/2009/07/16/4353478.aspx#" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a><a href="http://blog.csdn.net/chszs/archive/2009/07/16/4353478.aspx#" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div>
</div>
<ol class="dp-j" start="1">
    <li class="alt"><span class="keyword">import&nbsp;org.omg.CORBA.ORB;&nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">import&nbsp;BillingApp.*;&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">class&nbsp;BillingImpl&nbsp;<span class="keyword">extends</span>&nbsp;BillingPOA{&nbsp;&nbsp;</span></li>
    <li class="">&nbsp;<span class="keyword">private&nbsp;ORB&nbsp;orb;&nbsp;&nbsp;</span></li>
    <li class="alt">&nbsp;<span class="keyword">public&nbsp;<span class="keyword">void</span>&nbsp;setORB(ORB&nbsp;orb_val){&nbsp;&nbsp;</span></li>
    <li class="">&nbsp;&nbsp;<span class="keyword">this.orb&nbsp;=&nbsp;orb_val;&nbsp;&nbsp;</span></li>
    <li class="alt">&nbsp;}&nbsp;&nbsp;</li>
    <li class="">&nbsp;<span class="comment">/**&nbsp;</span></li>
    <li class="alt"><span class="comment">&nbsp;&nbsp;*&nbsp;实现successBilling()方法&nbsp;</span></li>
    <li class=""><span class="comment">&nbsp;&nbsp;*/&nbsp;&nbsp;</span></li>
    <li class="alt">&nbsp;<span class="keyword">public&nbsp;String&nbsp;successBilling()&nbsp;{&nbsp;&nbsp;</span></li>
    <li class="">&nbsp;&nbsp;<span class="keyword">return&nbsp;<span class="string">"\nBilling&nbsp;success!!\n"</span>;&nbsp;&nbsp;</span></li>
    <li class="alt">&nbsp;}&nbsp;&nbsp;</li>
    <li class="">&nbsp;<span class="comment">/**&nbsp;</span></li>
    <li class="alt"><span class="comment">&nbsp;&nbsp;*&nbsp;实现shutdown()方法&nbsp;</span></li>
    <li class=""><span class="comment">&nbsp;&nbsp;*/&nbsp;&nbsp;</span></li>
    <li class="alt">&nbsp;<span class="keyword">public&nbsp;<span class="keyword">void</span>&nbsp;shutdown(){&nbsp;&nbsp;</span></li>
    <li class="">&nbsp;&nbsp;orb.shutdown(<span class="keyword">false);&nbsp;&nbsp;</span></li>
    <li class="alt">&nbsp;}&nbsp;&nbsp;</li>
    <li class="">}&nbsp;&nbsp;</li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="java">import org.omg.CORBA.ORB;
import BillingApp.*;
class BillingImpl extends BillingPOA{
private ORB orb;
public void setORB(ORB orb_val){
this.orb = orb_val;
}
/**
* 实现successBilling()方法
*/
public String successBilling() {
return "\nBilling success!!\n";
}
/**
* 实现shutdown()方法
*/
public void shutdown(){
orb.shutdown(false);
}
}
</textarea>
<p>【BillingServer.java源码】：<br />
</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://blog.csdn.net/chszs/archive/2009/07/16/4353478.aspx#" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><a href="http://blog.csdn.net/chszs/archive/2009/07/16/4353478.aspx#" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy to clipboard</a><a href="http://blog.csdn.net/chszs/archive/2009/07/16/4353478.aspx#" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a><a href="http://blog.csdn.net/chszs/archive/2009/07/16/4353478.aspx#" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div>
</div>
<ol class="dp-j" start="1">
    <li class="alt"><span class="keyword">import&nbsp;org.omg.CORBA.ORB;&nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">import&nbsp;org.omg.CosNaming.NameComponent;&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">import&nbsp;org.omg.CosNaming.NamingContextExt;&nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">import&nbsp;org.omg.CosNaming.NamingContextExtHelper;&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">import&nbsp;org.omg.PortableServer.POA;&nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">import&nbsp;BillingApp.*;&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">public&nbsp;<span class="keyword">class</span>&nbsp;BillingServer&nbsp;{&nbsp;&nbsp;</span></li>
    <li class="">&nbsp;<span class="keyword">public&nbsp;<span class="keyword">static</span>&nbsp;<span class="keyword">void</span>&nbsp;main(String&nbsp;args[]){&nbsp;&nbsp;</span></li>
    <li class="alt">&nbsp;&nbsp;<span class="keyword">try{&nbsp;&nbsp;</span></li>
    <li class="">&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;创建和初始化ORB&nbsp;&nbsp;</span></li>
    <li class="alt">&nbsp;&nbsp;&nbsp;ORB&nbsp;orb&nbsp;=&nbsp;ORB.init(args,&nbsp;<span class="keyword">null);&nbsp;&nbsp;</span></li>
    <li class="">&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;获得根POA的引用并激活POAManager&nbsp;&nbsp;</span></li>
    <li class="alt">&nbsp;&nbsp;&nbsp;POA&nbsp;rootpoa&nbsp;=&nbsp;(POA)orb.resolve_initial_references(<span class="string">"RootPOA");&nbsp;&nbsp;</span></li>
    <li class="">&nbsp;&nbsp;&nbsp;rootpoa.the_POAManager().activate();&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;创建servant并注册到ORB&nbsp;&nbsp;</span></li>
    <li class="">&nbsp;&nbsp;&nbsp;BillingImpl&nbsp;billingImpl&nbsp;=&nbsp;<span class="keyword">new&nbsp;BillingImpl();&nbsp;&nbsp;</span></li>
    <li class="alt">&nbsp;&nbsp;&nbsp;billingImpl.setORB(orb);&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;从servant获得对象引用&nbsp;&nbsp;</span></li>
    <li class="alt">&nbsp;&nbsp;&nbsp;org.omg.CORBA.Object&nbsp;ref&nbsp;=&nbsp;rootpoa.servant_to_reference(billingImpl);&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;Billing&nbsp;href&nbsp;=&nbsp;BillingHelper.narrow(ref);&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;得到根命名上下文&nbsp;&nbsp;</span></li>
    <li class="">&nbsp;&nbsp;&nbsp;org.omg.CORBA.Object&nbsp;objRef&nbsp;=&nbsp;orb.resolve_initial_references(<span class="string">"NameService");&nbsp;&nbsp;</span></li>
    <li class="alt">&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;使用命名上下文，它是互操作命名服务规范的一部分&nbsp;&nbsp;</span></li>
    <li class="">&nbsp;&nbsp;&nbsp;NamingContextExt&nbsp;ncRef&nbsp;=&nbsp;NamingContextExtHelper.narrow(objRef);&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;在命名中绑定对象引用&nbsp;&nbsp;</span></li>
    <li class="">&nbsp;&nbsp;&nbsp;String&nbsp;name&nbsp;=&nbsp;<span class="string">"Billing";&nbsp;&nbsp;</span></li>
    <li class="alt">&nbsp;&nbsp;&nbsp;NameComponent&nbsp;path[]&nbsp;=&nbsp;ncRef.to_name(name);&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;ncRef.rebind(path,&nbsp;href);&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;System.out.println(<span class="string">"BillingServer&nbsp;is&nbsp;ready&nbsp;and&nbsp;waiting...");&nbsp;&nbsp;</span></li>
    <li class="">&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;等待客户端调用&nbsp;&nbsp;</span></li>
    <li class="alt">&nbsp;&nbsp;&nbsp;orb.run();&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;}<span class="keyword">catch(Exception&nbsp;e){&nbsp;&nbsp;</span></li>
    <li class="alt">&nbsp;&nbsp;&nbsp;System.err.println(<span class="string">"ERROR:"+e);&nbsp;&nbsp;</span></li>
    <li class="">&nbsp;&nbsp;&nbsp;e.printStackTrace(System.out);&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;System.out.println(<span class="string">"BillingServer&nbsp;Exiting&nbsp;...");&nbsp;&nbsp;</span></li>
    <li class="alt">&nbsp;}&nbsp;&nbsp;</li>
    <li class="">}&nbsp;&nbsp;</li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="java">import org.omg.CORBA.ORB;
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import org.omg.PortableServer.POA;
import BillingApp.*;
public class BillingServer {
public static void main(String args[]){
try{
// 创建和初始化ORB
ORB orb = ORB.init(args, null);
// 获得根POA的引用并激活POAManager
POA rootpoa = (POA)orb.resolve_initial_references("RootPOA");
rootpoa.the_POAManager().activate();
// 创建servant并注册到ORB
BillingImpl billingImpl = new BillingImpl();
billingImpl.setORB(orb);
// 从servant获得对象引用
org.omg.CORBA.Object ref = rootpoa.servant_to_reference(billingImpl);
Billing href = BillingHelper.narrow(ref);
// 得到根命名上下文
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
// 使用命名上下文，它是互操作命名服务规范的一部分
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
// 在命名中绑定对象引用
String name = "Billing";
NameComponent path[] = ncRef.to_name(name);
ncRef.rebind(path, href);
System.out.println("BillingServer is ready and waiting...");
// 等待客户端调用
orb.run();
}catch(Exception e){
System.err.println("ERROR:"+e);
e.printStackTrace(System.out);
}
System.out.println("BillingServer Exiting ...");
}
}
</textarea>
<p>4）实现客户端<br />
与第三步类似，可以使用idlj产生的stub作为客户端应用程序的基础。客户端代码建立于stub之上，启动ORB，使用服务器提供的命名服务查询，获得远程对象的引用，调用其方法。<br />
【BillingClient.java源码】：<br />
</p>
<div class="dp-highlighter">
<div class="bar">
<div class="tools"><a href="http://blog.csdn.net/chszs/archive/2009/07/16/4353478.aspx#" onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;">view plain</a><a href="http://blog.csdn.net/chszs/archive/2009/07/16/4353478.aspx#" onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;">copy to clipboard</a><a href="http://blog.csdn.net/chszs/archive/2009/07/16/4353478.aspx#" onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;">print</a><a href="http://blog.csdn.net/chszs/archive/2009/07/16/4353478.aspx#" onclick="dp.sh.Toolbar.Command('About',this);return false;">?</a></div>
</div>
<ol class="dp-j" start="1">
    <li class="alt"><span class="keyword">import&nbsp;org.omg.CORBA.ORB;&nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">import&nbsp;org.omg.CosNaming.NamingContextExt;&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">import&nbsp;org.omg.CosNaming.NamingContextExtHelper;&nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">import&nbsp;BillingApp.*;&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">public&nbsp;<span class="keyword">class</span>&nbsp;BillingClient&nbsp;{&nbsp;&nbsp;</span></li>
    <li class="">&nbsp;<span class="keyword">static&nbsp;Billing&nbsp;billingImpl;&nbsp;&nbsp;</span></li>
    <li class="alt">&nbsp;<span class="keyword">public&nbsp;<span class="keyword">static</span>&nbsp;<span class="keyword">void</span>&nbsp;main(String&nbsp;args[]){&nbsp;&nbsp;</span></li>
    <li class="">&nbsp;&nbsp;<span class="keyword">try{&nbsp;&nbsp;</span></li>
    <li class="alt">&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;创建和初始化ORB&nbsp;&nbsp;</span></li>
    <li class="">&nbsp;&nbsp;&nbsp;ORB&nbsp;orb&nbsp;=&nbsp;ORB.init(args,&nbsp;<span class="keyword">null);&nbsp;&nbsp;</span></li>
    <li class="alt">&nbsp;&nbsp;&nbsp;System.out.println(<span class="string">"ORB&nbsp;initialised");&nbsp;&nbsp;</span></li>
    <li class="">&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;获得根命名上下文&nbsp;&nbsp;</span></li>
    <li class="alt">&nbsp;&nbsp;&nbsp;org.omg.CORBA.Object&nbsp;objRef&nbsp;=&nbsp;orb.resolve_initial_references(<span class="string">"NameService");&nbsp;&nbsp;</span></li>
    <li class="">&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;使用NamingContextExt代替命名上下文，它是互操作命名服务的一部分&nbsp;&nbsp;</span></li>
    <li class="alt">&nbsp;&nbsp;&nbsp;NamingContextExt&nbsp;ncRef&nbsp;=&nbsp;NamingContextExtHelper.narrow(objRef);&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;在命名中解析对象引用&nbsp;&nbsp;</span></li>
    <li class="alt">&nbsp;&nbsp;&nbsp;String&nbsp;name&nbsp;=&nbsp;<span class="string">"Billing";&nbsp;&nbsp;</span></li>
    <li class="">&nbsp;&nbsp;&nbsp;billingImpl&nbsp;=&nbsp;BillingHelper.narrow(ncRef.resolve_str(name));&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;System.out.println(<span class="string">"Obtained&nbsp;a&nbsp;handle&nbsp;on&nbsp;server&nbsp;object:&nbsp;"+billingImpl);&nbsp;&nbsp;</span></li>
    <li class="alt">&nbsp;&nbsp;&nbsp;System.out.println(billingImpl.successBilling());&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;&nbsp;billingImpl.shutdown();&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;&nbsp;}<span class="keyword">catch(Exception&nbsp;e){&nbsp;&nbsp;</span></li>
    <li class="">&nbsp;&nbsp;&nbsp;System.out.println(<span class="string">"ERROR:&nbsp;"+e);&nbsp;&nbsp;</span></li>
    <li class="alt">&nbsp;&nbsp;&nbsp;e.printStackTrace(System.out);&nbsp;&nbsp;</li>
    <li class="">&nbsp;&nbsp;}&nbsp;&nbsp;</li>
    <li class="alt">&nbsp;}&nbsp;&nbsp;</li>
    <li class="">}&nbsp;&nbsp;</li>
</ol>
</div>
<textarea style="display: none;" cols="50" rows="15" name="code" class="java">import org.omg.CORBA.ORB;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import BillingApp.*;
public class BillingClient {
static Billing billingImpl;
public static void main(String args[]){
try{
// 创建和初始化ORB
ORB orb = ORB.init(args, null);
System.out.println("ORB initialised");
// 获得根命名上下文
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
// 使用NamingContextExt代替命名上下文，它是互操作命名服务的一部分
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
// 在命名中解析对象引用
String name = "Billing";
billingImpl = BillingHelper.narrow(ncRef.resolve_str(name));
System.out.println("Obtained a handle on server object: "+billingImpl);
System.out.println(billingImpl.successBilling());
billingImpl.shutdown();
}catch(Exception e){
System.out.println("ERROR: "+e);
e.printStackTrace(System.out);
}
}
}
</textarea>
<p><br />
5）启动应用程序<br />
要运行服务器和客户端，必须先启动命名服务，再启动服务器，最后运行客户端。<br />
此例用到命名服务，它使得servant对象的操作对客户端有效。服务器需要命名服务的对象引用，命名服务可以发布对象引用实现各种接口。客户端使用对象引用来调用方法。<br />
Java SE 1.4以上提供了两种可选的命名服务：<br />
&#183; tnameserv<br />
一种透明的命名服务<br />
&#183; orbd<br />
包含自启动服务、透明的命名服务、持久化命名服务和命名管理器的后台处理进程。<br />
本例使用orbd。</p>
<p>5.1）启动orbd<br />
注意：Solaris系统运行要求root权限并以1024端口开始进程。因此，对所有OS，可以选用大于或等于1024的端口以实现统一。<br />
-ORBInitialPort选项用于指定端口（非缺省状态）。<br />
例如：假定使用1050端口的Java ORB Daemon（orbd），命令如下：<br />
start orbd -ORBInitialPort 1050 -ORBInitialHost localhost</p>
<p>5.2）开始Billing服务器<br />
start java BillingServer -ORBInitialPort 1050 -ORBInitialHost localhost<br />
注：如在同一台主机上运行，可省略-ORBInitialHost localhost</p>
<p>5.3）运行客户端应用程序<br />
java BillingClient -ORBInitialPort 1050 -ORBInitialHost localhost</p>
</span></span>
<img src ="http://www.blogjava.net/chinadave/aggbug/302469.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chinadave/" target="_blank">whoami</a> 2009-11-16 11:05 <a href="http://www.blogjava.net/chinadave/archive/2009/11/16/302469.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse3.2下配置ORBStudio插件的corba开发环境</title><link>http://www.blogjava.net/chinadave/archive/2009/11/16/302464.html</link><dc:creator>whoami</dc:creator><author>whoami</author><pubDate>Mon, 16 Nov 2009 01:42:00 GMT</pubDate><guid>http://www.blogjava.net/chinadave/archive/2009/11/16/302464.html</guid><wfw:comment>http://www.blogjava.net/chinadave/comments/302464.html</wfw:comment><comments>http://www.blogjava.net/chinadave/archive/2009/11/16/302464.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chinadave/comments/commentRss/302464.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chinadave/services/trackbacks/302464.html</trackback:ping><description><![CDATA[<p><font color="#0000ff" face="宋体" size="3"><font color="#ff6600" size="4">一、 使用到的软件</font><br />
1. corba产品：OpenORB<br />
下载地址：</font><a href="http://sourceforge.net/projects/openorb/"><font color="#0000ff" face="宋体" size="3">http://sourceforge.net/projects/openorb/</font></a><br />
<font color="#0000ff" face="宋体" size="3">解压后如下图所示</font></p>
<div forimg="1"><font color="#0000ff" face="宋体" size="3"><img class="blogimg" small="0" src="http://hiphotos.baidu.com/ghoul0813/pic/item/189517137bbeadf5f6039e5d.jpg" border="0"  alt="" /></font></div>
<p><br />
<br />
<font color="#0000ff" face="宋体" size="3">2. 开发工具Eclipse 3.4.2</font></p>
<p><br />
<font color="#0000ff" face="宋体" size="3">3. 插件：ORBStudio777<br />
下载地址：.</font><a href="ftp://www.orbzone.org/"><font color="#0000ff" face="宋体" size="3">ftp://www.orbzone.org</font></a><font color="#0000ff" face="宋体" size="3"> 用户名称：orbzone_downloads 密码：orbzone_downloads<br />
使用第三方Ftp工具或者迅雷的资源探测器登陆后进入CORBA_Utilities文件夹，下面有3个zip压缩文件ORBStudio 775, ORBStudio776, ORBStudio777 ，我选择了777下载。<br />
解压后如下图所示</font></p>
<p><font color="#0000ff" face="宋体" size="3"><img class="blogimg" small="0" src="http://hiphotos.baidu.com/ghoul0813/pic/item/e897a06d77627dde4216945d.jpg" border="0"  alt="" /></font></p>
<p><font color="#0000ff" face="宋体" size="3">4. Javacc<br />
下载javacc,网址：</font><a href="https://javacc.dev.java.net/"><font color="#0000ff" face="宋体" size="3">https://javacc.dev.java.net/</font></a><br />
<font color="#0000ff" face="宋体" size="3">解压后如下图所示<br />
</font></p>
<div forimg="1"><font color="#0000ff" face="宋体" size="3"><img class="blogimg" small="0" src="http://hiphotos.baidu.com/ghoul0813/pic/item/91dddb23206e5f779922ed5d.jpg" border="0"  alt="" /></font></div>
<p> </p>
<p> </p>
<p><font color="#0000ff" face="宋体" size="3"><font color="#ff6600" size="4">二、安装配置</font><br />
1. 解压OpenOrb.rar<br />
2. 解压ORBStudio777.zip，从ORBStudio/plugins/下面取得 ORBStudio_7.7.7.jar
的JAR包放到Eclipse/plugins下面.我用的Eclipse版本是Eclipse3.4.2。如果考入Jar包前以前Eclipse是运行
的请关闭，重新运行。<br />
3. 运行CMD 到DOS，再到存放javacc的bin目录，输入 javacc -tm D:\Eclipse3.22\eclipse\ORBStudio\IDLParser.jj<br />
<img class="blogimg" small="0" src="http://hiphotos.baidu.com/ghoul0813/pic/item/f75a94f7bacb5707730eec5d.jpg" border="0"  alt="" /><br />
4. 添加环境变量TCOO_HOME，值为OpenOrb目录的路径<br />
5. 启动eclipse<br />
6. windows/preferences/出现如下窗口选择ORB Studio/IDL Compiler/ 在右边选择OpenORB这里有5种编译器我们使用JacORB. 打开IDL Compiler 前面的加号选择<br />
<img class="blogimg" small="0" src="http://hiphotos.baidu.com/ghoul0813/pic/item/c37791f3f953b4ee0b46e05d.jpg" border="0"  alt="" /><br />
右边参数IDL Command： D:\ComponentTechnology\OpenOrb\OpenORB\bin\idl2java.bat<br />
Command Options: -d %D% %F% <br />
<img class="blogimg" small="0" src="http://hiphotos.baidu.com/ghoul0813/pic/item/5a81874c6b9616dcd62afc5d.jpg" border="0"  alt="" /><br />
这样就配置成功了Eclipse下面的Corba开发。Eclipse的新建选择如图：</font></p>
<p><font color="#0000ff" face="宋体" size="3"><img class="blogimg" small="0" src="http://hiphotos.baidu.com/ghoul0813/pic/item/a141ce43ab687d349213c65e.jpg" border="0"  alt="" /><br />
</font></p>
<p><font color="#0000ff" face="宋体" size="3"><font color="#ff6600" size="4">三、开发步骤参考</font><br />
1. 在eclipse里新建项目，Project lauyout 选择Create separate source and output folders</font></p>
<p><font color="#0000ff" face="宋体" size="3">2.
给新项目添加Libraries,右键Properites---&gt;Libraries---&gt;Add
Library---&gt;User Library---&gt;User
Libraries...---&gt;New...---&gt;Add JARs...<br />
找到OpenOrb\OpenORB\lib目录下openorb_orb-1.4.0.jar,openorb_orb_tools-1.4.0.jar<br />
OpenOrb\OpenORB\lib\endorsed目录下openorb_orb_omg-1.4.0.jar<br />
OpenOrb\tools\lib目录下launcher.jar,tools-1.4.0.jar<br />
OpenOrb\tools\lib\ext目录下所有.jar文件</font></p>
<p><font color="#0000ff" face="宋体" size="3">3. src上右键New---&gt;Other---&gt;CORBA Wizard---&gt;IDL files---&gt;Simple IDL</font></p>
<p><font color="#0000ff" face="宋体" size="3">4. 选择IDL文件，右键ORB Menu---&gt;Compile,就自动生成文件</font></p>
<p><font color="#0000ff" face="宋体" size="3">5.
src上右键New---&gt;Other---&gt;CORBA Wizard---&gt;Server---&gt;Active
object map---&gt;Next在弹出的对话框里IDL
filename栏选择/{projectName}/src/{IDLname}.idl<br />
&nbsp;&nbsp;&nbsp;  Interface栏选择IDL文件里定义的接口名<br />
&nbsp;&nbsp;&nbsp;  Package栏里填写包名<br />
&nbsp;&nbsp;&nbsp;  Server classname栏里填写服务端类名<br />
---&gt;Next 在弹出的对话框,选中Create server class:项</font></p>
<p><font color="#0000ff" face="宋体" size="3">6. 为生成的服务端类添加未实现的方法,并填写方法体</font></p>
<p><font color="#0000ff" face="宋体" size="3">7. src
上右键New---&gt;Other---&gt;CORBA Wizard---&gt;Client---&gt;Simple
implementation 在弹出的对话框里IDL filename栏选择/{projectName}/src/{IDLname}.idl<br />
&nbsp;&nbsp;&nbsp;  Interface栏选择IDL文件里定义的接口名<br />
&nbsp;&nbsp;&nbsp;  Package栏里填写包名<br />
&nbsp;&nbsp;&nbsp;  Client classname栏里填写客户端类名</font></p>
<p><font color="#0000ff" face="宋体" size="3">8. 在客户端类的main方法里，取消注释test.getORBInterface().operation1("A message in the bottle..."); 并修改传递的String内容</font></p>
<p><font color="#0000ff" face="宋体" size="3">9. 运行服务端程序Server_AOM.java，然后运行客户端程序MyServiceClientImpl.java</font></p>
<p><font color="#339966" face="宋体" size="3">如果，你要将你的程序包发布到别的机器上，就要用到名称服务，使用名称服务，我们需要在java代码上作些修改：</font></p>
<p><font color="#339966" face="宋体" size="3">使用名称空间的配置：</font></p>
<p><font color="#339966" face="宋体" size="3">1. 找到并注释服务端Server_AOM.java里main方法的下列代码：</font></p>
<p><font color="#339966" face="宋体" size="3">PrintWriter ps = new PrintWriter(new FileOutputStream(new File("server.ior")));<br />
ps.println(orb.object_to_string(obj));<br />
ps.close();</font></p>
<p><font color="#339966" face="宋体" size="3">取消下列代码（位置在上面代码的上方）的注释：</font></p>
<p><font color="#339966" face="宋体" size="3">// org.omg.CORBA.Object ncobj = orb.resolve_initial_references("NameService");<br />
// NamingContextExt nc = NamingContextExtHelper.narrow(ncobj);<br />
// nc.bind(nc.to_name("MyServerObject"), obj);</font></p>
<p><font color="#339966" face="宋体" size="3">修改bind方法为rebind，并引入新的类</font></p>
<p><br />
<font color="#339966" face="宋体" size="3">2. 找到并注释客户端MyServiceClientImpl.java里main方法的下列代码：</font></p>
<p><font color="#339966" face="宋体" size="3">LineNumberReader input = new LineNumberReader(new FileReader("server.ior"));<br />
String ior = input.readLine();<br />
org.omg.CORBA.Object obj = orb.string_to_object(ior);</font></p>
<p><font color="#339966" face="宋体" size="3">取消下列代码（位置在上面代码的上方）的注释：</font></p>
<p><font color="#339966" face="宋体" size="3">// org.omg.CORBA.Object ncobj = orb.resolve_initial_references("NameService");<br />
// NamingContextExt nc = NamingContextExtHelper.narrow(ncobj);<br />
// org.omg.CORBA.Object obj = nc.resolve_str("MyServerObject");</font></p>
<p><font color="#339966" face="宋体" size="3">引入新的类</font></p>
<p><font color="#339966" face="宋体" size="3">修改org.omg.CORBA.Object ncobj = orb.resolve_initial_references("NameService");里面的参数，服务端Server_AOM.java也要改。</font></p>
<p><font color="#339966" face="宋体" size="3">改为"corbaloc::1.2@hostname:portNumber/NameService"</font></p>
<p><font color="#339966" face="宋体" size="3">修改resolve_initial_references方法为string_to_object</font></p>
<p><font color="#339966" face="宋体" size="3">修改所有异常为Exception</font></p>
<p><br />
<font color="#339966" face="宋体" size="3">3. 用命令行的方式，在OpenOrb\NamingService\bin目录下执行ins -ORBPort=portNumber</font></p>
<p><br />
<font color="#339966" face="宋体" size="3">4. 带参数 -ORBInitRef NameService=corbaloc::1.2@hostname:portNumber/NameService 运行服务端Server_AOM.java，</font></p>
<p><br />
<font color="#339966" face="宋体" size="3">5. 然后运行客户端程序MyServiceClientImpl.java，结果是一样的。</font></p>
<p><font color="#339966" face="宋体" size="3">目前为止，corba的本地、远程开发都已经配置完毕。</font></p>
<img src ="http://www.blogjava.net/chinadave/aggbug/302464.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chinadave/" target="_blank">whoami</a> 2009-11-16 09:42 <a href="http://www.blogjava.net/chinadave/archive/2009/11/16/302464.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>