📄 chapter26.htm
字号:
COLOR: #000000; TEXT-DECORATION: underline}.navigater { FONT-SIZE: 12px; COLOR: #333333; LINE-HEIGHT: 19px; TEXT-DECORATION: none}A.navigater:hover { COLOR: #cc0000}.g1 { FONT-SIZE: 14px}.g2 { PADDING-LEFT: 21px; PADDING-TOP: 5px}.g3 { FONT-WEIGHT: bold; COLOR: #ab6503}.g4 { COLOR: #ff0000}.img { BORDER-RIGHT: #800000 1px solid; BORDER-TOP: #800000 1px solid; BORDER-LEFT: #800000 1px solid; BORDER-BOTTOM: #800000 1px solid}.img1 { BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid}.f14 { FONT-SIZE: 14px; LINE-HEIGHT: 26px}.f20 { FONT-WEIGHT: bold; FONT-SIZE: 20px}.top_red { COLOR: #d70709; TEXT-DECORATION: none}.center01 { COLOR: #000000; LINE-HEIGHT: 20px}.center01 TD { COLOR: #000000; LINE-HEIGHT: 20px}.center01 A:link { COLOR: #000000; TEXT-DECORATION: none}.center01 A:visited { COLOR: #000000; TEXT-DECORATION: none}.center01 A:hover { COLOR: #2b7128; TEXT-DECORATION: underline}.center02 { COLOR: #194e00; LINE-HEIGHT: 20px}.center02 TD { COLOR: #194e00; LINE-HEIGHT: 20px}.center02 A:link { COLOR: #194e00; TEXT-DECORATION: none}.center02 A:visited { COLOR: #194e00; TEXT-DECORATION: none}.center02 A:hover { COLOR: #194e00; TEXT-DECORATION: underline}--></style><TABLE width=760 border=0 align=center cellPadding=0 cellSpacing=0 bgcolor="#F3F3F3" valign="top"> <tr class="center01"> <td width="488" style="padding-left:10px;padding-top:10px"> <a href="index.php">连载</a> > <a href="slist.php?class1=6">程序设计</a> > <a href="slist.php?class2=7">Java</a> > <a href="serialize.php?id=387">Java网络编程专辑</a> </td> <td width="280" style="padding-left:10px;padding-top:10px"> <div align="center"> <font color=#0000FF><a href='chapter.php?id=387&volume=2&chapter=12'>上一页</a></font> <font color=#0000FF><a href="serialize.php?id=387">回书目</a></font> <font color=#0000FF><a href='chapter.php?id=387&volume=2&chapter=14'>下一页</a></font> </div> </td> </tr> <tr class="center01"> <td colspan="2" align="center" style="padding-left:10px;padding-top:10px"> </td> </tr> <TBODY> <TR> <TD colspan="2" align=middle> <BR> <div style="FONT-SIZE: 18pt; COLOR: #990000; FONT-FAMILY: 楷体_GB2312" align=center><B>网络协议</b></div><br><div style="COLOR: #990000; font-family: ; font-size: 18px;宋体;" align=center>SOAP协议初级指南(2)</div> <DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; FONT-SIZE: 10.5pt; COLOR: black; LINE-HEIGHT: 180%" align=left> <br> <P><STRONG>目前的技术存在的问题?</STRONG><BR><BR> 尽管DCOM和IIOP都是固定的协议,业界还没有完全转向其中任何一个协议。没有融合的部分原因是文化的问题所致。而且在当一些组织试图标准化一个或另一个协议的时候,两个协议的技术适用性就被提出质疑。传统上认为DCOM和CORBA都是合理服务器到服务器端的通信协议。但是,二者对客户到服务器端的通信都存在明显的弱点,尤其是客户机被散布在Internet上的时候。 <BR><BR> DCOM 和 CORBA/IIOP都是依赖于单个厂商的解决方案来最大优势地使用协议。尽管两个协议都在各种平台和产品上被实现了,但现实是选定的发布需要采用单一厂商的实现。在DCOM的情况下,这意味着每个机器要运行在Windows NT。(尽管DCOM已经被转移到其它平台,但它只在Windows?上获得了广泛的延伸)。在CORBA情况下,这意味着每个机器要运行同样的ORB产品。的确让两个CORBA产品用IIOP相互调用是有可能的,但是许多高级的服务(如安全和事务)此时通常不是可交互的。而且,任何专门厂商为同样的机器的通信所作的优化很难起作用,除非所有的应用被建立在同一个ORB产品上。<BR><BR> DCOM 和CORBA/IIOP都依赖于周密管理的环境。两个任意的计算机使得DCOM或IIOP 在环境之外被成功调用(calls out of the box)的几率是很低的。特别是在考虑安全性的时候尤其是这样。尽管写一个能成功地运用DCOM或IIOP的紧缩包(shrink-wrap)应用是可能的,但这样做要比基于socket的应用要更多地关注细节。这对于乏味但必需的配置和安装管理任务特别适用。<BR><BR> DCOM 和 CORBA/IIOP都依赖于相当高技术的运行环境。尽管进程内的COM似乎特别简单,但COM/DCOM远程处理程序绝对不只是几天就解决的事情。IIOP 是一个比DCOM更容易实现的协议,但两个协议都有相当多的深奥的规则来处理数据排列、类型信息和位操作。这使得一般的程序员在没有领会ORB产品或OLE32.DLL的情况下去构造一个简单的CORBA或DCOM调用也变得很困难。<BR><BR> 也许对DCOM和CORBA/IIOP来说,最令人难以忍受的一点是它们不能在Internet 上发挥作用。对DCOM来说,一般用户的iMac 或廉价的运行Windows 95的PC 兼容机要想使用你的服务器执行基于领域认证几乎是不可能的。更糟的是,如果防火墙或代理服务器分隔开了客户和服务器的机器,任何IIOP或DCOM包要通过的可能性是很低的,主要是由于大多数Internet连接技术对HTTP协议的偏爱所致。尽管一些厂商如Microsoft, Iona和Visigenic都已经建立了通道技术,但这些产品很容易对配置错误敏感而且它们是不可交互的。<BR><BR> 在一个服务器群落中这些问题并不能影响DCOM或IIOP的使用。因为在服务器群落中主机的数量很少(一般是成百上千,而不是成千上万),这就抵消了DCOM基于ping的生命周期管理的成本。在服务器群落中,所有主机被一个公共管理域管理的机率很大,使得统一的配置变得可能。相对少量的机器也能保持商业ORB产品可控制使用的成本,因为只需要更少量的ORB许可权。如果只有IIOP在服务器群落中被使用,就只需要少量的ORB许可权。最后,在服务器群落中所有主机有直接的IP连接也是可能的,这就消除了与防火墙相关的DCOM和 IIOP问题。</P>
<P><SPAN class=f14> <STRONG>HTTP作为一个更好的RPC</STRONG><BR><BR> 在服务器群落中使用DCOM 和CORBA 是通用的做法,但客户机则使用HTTP进入服务器群落。HTTP与RPC的协议很相似,它简单、配置广泛,并且对防火墙比其它协议更容易发挥作用。HTTP请求一般由Web服务器软件(如IIS和Apache)来处理,但越来越多的应用服务器产品正在支持HTTP作为除DCOM和IIOP外的又一个协议。<BR><BR> 象DCOM和IIOP一样,HTTP层通过TCP/IP进行请求/响应通信。一个HTTP的客户端用TCP连接到HTTP服务器。在HTTP中使用的标准端口号是80,但任何其它端口也能被使用。在建立TCP连接后,客户端可以发送一个请求消息到服务器端。服务器在处理请求后发回一个HTTP响应消息到客户端。请求和响应消息都可以包含任意的传输体的信息,通常用Content-Length和Content-Type的 HTTP 头来标记。下面是一个合法的HTTP请求消息: <BR><BR>POST /foobar HTTP/1.1<BR>Host: 209.110.197.12<BR>Content-Type: text/plain<BR>Content-Length: 12<BR>Hello, World<BR><BR> 你可能已经注意到HTTP头只是一般文本。这使得用包检查程序或基于文本的Internet工具(如telnet)来诊断HTTP问题变得更容易。HTTP基于文本的属性也使得HTTP更容易适用于在Web开发中流行的低技术水平的编程环境。<BR><BR> HTTP请求的第一行包含三个组件:HTTP方法,请求-URI,协议版本。在前面的例子中,这些分别对应于POST, /foobar, 和 HTTP/1.1。Internet工程任务组(IETF)已经标准化了数量固定的HTTP方法。GET是HTTP用来访问Web的方法。 POST是建立应用程序的最常用的HTTP方法。和GET不一样,POST允许任意数据从客户端发送到服务器端。请求URI (Uniform Resource Identifier)是一个HTTP服务器端软件,它用来识别请求的目标的简单的标识符(它更象一个IIOP/GIOP object_key 或一个DCOM IPID)。关于URIs更多的信息请参照"URIs, URLs, and URNs"。在这个例子中协议的版本是HTTP/1.1, 它表示遵守RFC 2616的规则。HTTP/1.1比HTTP/1.0多增加了几个特性,包括对大块数据传输的支持以及对在几个HTTP请求之间保持TCP连接的支持。 <BR><BR> 请求的第三行和第四行指定了请求体的尺寸和类型。Content-Length 头指定了体信息的比特数。Content-Type类型标识符指定MIME类型为体信息的语法。HTTP (象 DCE一样) 允许服务器和客户端协商用于编制信息的传输语法。大多数DCE应用采用NDR.。大多数Web应用采用text/html 或其它基于文本的语法。<BR><BR> 注意在上面样例中Content-Length头与请求体之间的空行。不同的HTTP头被carriage-return/行码序列划定界限。这些头与体之间用另外的carriage-return/行码序列来划定界限。请求接着包括原始字节,这些字节的语法和长度由Content-Length和Content-Type HTTP 头来识别。在这个例子中,内容是十二字节的普通文本字符串"Hello, World"。<BR><BR> 在处理了请求之后,HTTP服务器被期望发回一个HTTP响应到客户端。响应必须包括一个状态代码来表示请求的结果。响应也可以包含任意的体信息。下面是一个HTTP响应消息:<BR><BR>200 OK<BR>Content-Type: text/plain<BR>Content-Length: 12<BR>dlroW ,olleH<BR><BR> 在这个例子中,服务器返回状态代码200,它是HTTP中标准的成功代码。如果服务器端不能破解请求代码,它将返回下列的响应:<BR><BR>400 Bad Request <BR>Content-Length: 0 <BR><BR> 如果HTTP服务器决定到目标URI的请求应该临时转向另外的一个不同的URI,下列响将被返回:<BR><BR>307 Temporarily Moved <BR>Location: http://209.110.197.44/foobar <BR>Content-Length: 0 <BR><BR> 这个响应告知客户,请求将能够通过重新传递它到在Location头中指定的地址来被满足。<BR><BR> 所有的标准状态码和头都在RFC 2616中被描述。它们中很少的内容与SOAP用户直接相关,但有一个明显的例外。在HTTP/1.1,底层的TCP连接在多个请求/响应对之间重用。HTTP Connection头允许客户端或服务器中任何一方关闭底层的连接。通过增加下列HTTP头到请求或响应中,双方都会要求在处理请求后关闭它们的TCP连接:<BR><BR>Connection: close<BR><BR> 当与HTTP/1.0软件交互时,为了保持TCP连接,建议发送方加入下列HTTP头到每个请求或响应中:<BR><BR>Connection: Keep-Alive <BR><BR> 这个头使缺省的HTTP/1.0协议在每次响应后重新开始TCP连接的行为无法使用。<BR><BR> HTTP的一个优点是它正被广泛的使用和接受。图4表示了一个简单的Java程序,它发送前面表示的请求并从响应中解析出结果字符串。<BR><BR> 下面则是一个简单的C程序用CGI来读取来自HTTP请求的字符串并通过HTTP响应把它的逆序串返回。<BR><BR>#include <stdio.h><BR>int main(int argc, char **argv) {<BR>char buf[4096];<BR>int cb = read(0, buf, sizeof(buf));<BR>buf[cb] = 0;<BR>strrev(buf);<BR>printf("200 OK\r\n");p> <BR>printf("Content-Type: text/plain\r\n");<BR>printf("Content-Length: %d\r\n", cb);<BR>printf("\r\n");<BR>printf(buf);<BR>return 0;<BR><BR> 服务器的实现是用Java servlet,以避免CGI的每个请求一个进程的开销。<BR><BR>一般 来说CGI是花费代价最小的写HTTP服务器端代码的方法。实际上,每一个HTTP服务器端产品都提供了一个更有效的机制来让你的代码处理一个HTTP请求。IIS提供了ASP和ISAPI作为写HTTP代码的机制。Apache允许你用运行在Apache后台程序中的 C或Perl来写模块。大多数应用服务器软件允许你写Java servlet,COM组件,EJB Session beans或基于可携带对象适配器(POA)接口的CORBA servants。</SPAN></P><br><br> </DIV> </TD> </TR> <TR> <TD class=center01> <div align="center">来源:天极网 作者:<div> </TD> <TD width="280" class=center01> <div align="center"> <font color=#0000FF><a href='chapter.php?id=387&volume=2&chapter=12'>上一页</a></font> <font color=#0000FF><a href="serialize.php?id=387">回书目</a></font> <font color=#0000FF><a href='chapter.php?id=387&volume=2&chapter=14'>下一页</a></font> </div> </TD> </TR> </TBODY></TABLE><table><tr><td width="760"> <table width="760" height="10" border="0" cellpadding="0" cellspacing="0"> <tr> <td></td> </tr> </table> <!------------ 评论 ----------------> <table width="760" border="0" cellpadding="0" cellspacing="0"> <tr> <td><iframe width="100%" id=vs frameborder=0 scrolling=no src="comment_list1.php?id=387"></iframe> </td> </tr> </table><br><script language=javascript>function CheckNetwordForm(theForm){ if("" == theForm.content.value) { alert("写两句吧~~"); theForm.content.focus(); return false; } var index; for(index=0;index<theForm.content.value.length;index++) { if(" " != theForm.content.value.charAt(index)) break; } if(index == theForm.content.value.length) { alert("写两句吧~~"); theForm.content.focus(); return false; } if (theForm.content.value.length>100){ alert("评论字数不能超过100哦"); theForm.content.focus(); return false; } return true;}</script> <!------------------ 评论 ---------------> <form name=netword method=post action="insertnetword.php" onsubmit="javascript: return CheckNetwordForm(this);"> <table width="760" border="0" cellpadding="0" cellspacing="0"> <tr> <td height="25" class="text6"> 给此书打分:<a name="1"></a> <select name="score"> <option value=5 selected>非常好</option> <option value=4>还凑合</option> <option value=3>一般吧</option> <option value=2>不太行</option> <option value=1>太差了</option> </select> 用户名: <input name="id" value=387 type="hidden" id="id"> <input name="backurl" value=/book/chapter.php?id=387&volume=2&chapter=13 type="hidden"> <input name="username" type="text" id="username" size="20" maxlength="20"> <font color="#666666">*评论字数请控制在一百字以内</font> </td> </tr> </table> <br> <textarea name="content" cols="80" rows="4" wrap="OFF" id="description"></textarea> <input type="submit" name="Submit" value="提交"> </form> </td> </tr></table></td></tr></table> <TABLE cellSpacing=0 cellPadding=0 width=760 border=0> <TBODY> <TR> <TD width="1003" height=9 background=images/t_bj01.gif><IMG height=1 src="images/ccc.gif" width=1></TD> </TR> </TBODY></TABLE><TABLE cellSpacing=0 cellPadding=0 width=760 bgColor=#ffffff border=0> <TBODY> <TR> <TD><HR width=760 noShade SIZE=1> </TD> </TR> <TR> <TD align=middle><A class=black href="http://www.chinaren.com/" target=_blank>ChinaRen</A> - <A class=black href="http://big5.www.sohu.com/" target=_blank>繁体版</A> - <A class=black href="http://hr.sohu.com/hrm.html" target=_blank>搜狐招聘</A> - <A class=black href="http://add.sohu.com/" target=_blank>网站登录</A> - <A class=black href="http://help.sohu.com/" target=_blank>帮助中心</A> - <A class=black href="http://book.news.sohu.com/onClick=this.style.behavior='url(#default#homepage)';this.setHomePage('http://www.sohu.com');return" target=_blank false;>设置首页</A> - <A class=black href="http://adinfo.sohu.com/" target=_blank>广告服务</A> - <A class=black href="http://www.sohu.com/about/lianxi.htm" target=_blank>联系方式</A> - <A class=black href="http://www.sohu.com/about/privacy.html" target=_blank>保护隐私权</A> - <A class=black href="http://www.sohu.com/about/" target=_blank>About SOHU</A> - <A class=black href="http://www.sohu.com/about/" target=_blank>公司介绍</A><BR> <SPAN class=eng>Copyright © 2004 Sohu.com Inc. All rights reserved. 搜狐公司 版权所有</SPAN> </TD> </TR> </TBODY></TABLE></center></body></html><script language="JavaScript" src="http://nielsen.js.sohu.com/nnselect.js"></script><noscript><img src='http://ping.nnselect.com/ping.gif?c=119' height='1' width='1'></noscript>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -