📄 chapter13.htm
字号:
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=1&chapter=13'>上一页</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=1'>下一页</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>Java网络编程之URI、URL研究(下4)</div> <DIV style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; FONT-SIZE: 10.5pt; COLOR: black; LINE-HEIGHT: 180%" align=left> <br> <P><SPAN class=f14> 为了辅助编码,Java提供了java.net.URLEncoder类,它声明了一对静态的encode()方法。每个方法有一个String参数并返回包含已编码的参数内容的String对象的引用。例如,如果encode()发现参数中有空格,它在结果中用加号代替空格。<BR><BR> 下面的代码片断演示了调用URLEncoder的encode(String s)方法,对a 空格 b字符串进行编码。结果a+b存储在一个新的String对象中,result引用它。</P>
<TABLE width="100%" bgColor=#ffffff>
<TBODY>
<TR>
<TD>String result = URLEncoder.encode ("a b");</TD></TR></TBODY></TABLE><BR> 作为准备窗体数据的补充,必须告诉URLConnection对象数据已经被发送了,因为URLConnection默认的操作是获取数据。为了完成这种事务,你可以首先把openConnection()的返回值转换为HttpURLConnection类型(在确保该返回值的类型正确后)。接着调用结果对象的setRequestMethod(String method)方法,把POST作为method参数引用的对象的值。<BR><BR> 另一个必须完成的事务是调用URLConnection的setDoOutput(boolean doOutput)方法,其参数的值必须为true。这种事务是必要的,因为URLConnection对象在默认情况下不支持输出。(接着程序最终可以调用URLConnection的getOutputStream()方法,为发送的窗体数据返回一个资源的输出流的引用)。<BR><BR> 列表6是URLDemo3的源代码,它演示了把窗体数据发送给某个"了解"application/x-www-form-urlencoded内容类型的资源。它实现了前面提到的各种事务。<BR><BR> 列表6: URLDemo3.java<BR><BR>
<TABLE width="100%" bgColor=#ffffff>
<TBODY>
<TR>
<TD>// URLDemo3.java<BR><BR>import java.io.*;<BR>import java.net.*;<BR><BR>class URLDemo3<BR>{<BR>public static void main (String [] args) throws IOException<BR>{<BR>// 检查最后两个参数和参数的数量<BR><BR>if (args.length < 2 || args.length % 2 != 0)<BR>{<BR>System.err.println ("usage: java URLDemo3 name value " +<BR>"[name value ...]");<BR>return;<BR>}<BR><BR>// 建立程序连接服务器程序资源的URL对象,它返回一个窗体的名称/值对<BR><BR>URL url;<BR>url = new URL <BR>("http://banshee.cs.uow.edu.au:2000/~nabg/echo.cgi");<BR><BR>// 向某个特定协议对象返回表现http资源连接的引用<BR><BR>URLConnection uc = url.openConnection ();<BR><BR>// 验证连接的类型,必须是HttpURLConnection的<BR><BR>if (!(uc instanceof HttpURLConnection))<BR>{<BR>System.err.println ("Wrong connection type");<BR>return;<BR>}<BR><BR>// 表明程序必须把名称/值对输出到服务器程序资源<BR><BR>uc.setDoOutput (true);<BR><BR>// 表明只能返回有用的信息<BR><BR>uc.setUseCaches (false);<BR><BR>//设置Content-Type头部指示指定URL已编码数据的窗体MIME类型<BR><BR>uc.setRequestProperty ("Content-Type",<BR>"application/x-www-form-urlencoded");<BR><BR>// 建立名称/值对内容发送给服务器<BR><BR>String content = buildContent (args);<BR><BR>//设置Content-Type头部指示指定URL已编码数据的窗体MIME类型<BR><BR>uc.setRequestProperty ("Content-Length",<BR>"" + content.length ());<BR><BR>// 提取连接的适当的类型<BR><BR>HttpURLConnection hc = (HttpURLConnection) uc;<BR><BR>// 把HTTP请求方法设置为POST(默认的是GET)<BR><BR>hc.setRequestMethod ("POST");<BR><BR>// 输出内容<BR><BR>OutputStream os = uc.getOutputStream ();<BR>DataOutputStream dos = new DataOutputStream (os);<BR>dos.writeBytes (content);<BR>dos.flush ();<BR>dos.close ();<BR><BR>// 从服务器程序资源输入和显示内容<BR><BR>InputStream is = uc.getInputStream ();<BR><BR>int ch;<BR>while ((ch = is.read ()) != -1)<BR>System.out.print ((char) ch);<BR><BR>is.close ();<BR>}<BR><BR>static String buildContent (String [] args)<BR>{<BR>StringBuffer sb = new StringBuffer ();<BR><BR>for (int i = 0; i < args.length; i++)<BR>{<BR>// 为正确的传输对参数编码<BR><BR>String encodedItem = URLEncoder.encode (args [i]);<BR><BR>sb.append (encodedItem);<BR><BR>if (i % 2 == 0)<BR>sb.append ("="); // 分离名称和值<BR>else<BR>sb.append ("&"); // 分离名称/值对<BR>}<BR><BR>// 删除最后的 & 间隔符<BR><BR>sb.setLength (sb.length () - 1);<BR><BR>return sb.toString ();<BR>}<BR>}</TD></TR></TBODY></TABLE><BR> 你可以会奇怪为什么URLDemo3没有调用URLConnection的connect()的方法。这个方法没有被明显的调用,因为如果连向资源的连接没有建立的话,其它的URLConnection方法(例如getContentLength())会明确的调用connect()方法。但是一旦连建立了接,调用这些方法(例如setDoOutput(boolean doOutput))就是违反规定的。在connect()被(明确地或隐含地)调用后,这些方法会产生一个IllegalStateException对象。<BR>在URLDemo3编译后,在命令行输入java URLDemo3 name1 value1 name2 value2 name3 value3,你可以看到下面的输出:<BR><BR>
<TABLE width="100%" bgColor=#ffffff>
<TBODY>
<TR>
<TD><html> <head><BR><title>Echoing your name value pairs</title><BR></head><BR><body><BR><ol><BR><li>name1 : value1<BR><li>name2 : value2<BR><li>name3 : value3<BR></ol><BR><hr><BR>Mon Feb 18 08:58:45 2002<BR></body><BR></html></TD></TR></TBODY></TABLE><BR> 该服务器程序资源的输出由HTML组成,这些HTML回应的是name1、value1、name2、 value2、name3和value3。<BR><BR> <B>技巧</B><BR><BR> 如果你需要URL对象的URL的字符串表现形式,请调用toExternalForm()或toString()。两种方法的功能是相同的。<BR><BR> <B>总结</B><BR><BR> 本文研究了Java的网络API,聚焦于URI、URL和URN。你学习了这些概念,以及怎样使用URI和URL(URL相关)的类工作,同时你学习了MIME的知识以及它与URL的关系。现在你应该编写一些代码熟悉一下所学的内容了。</SPAN><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=1&chapter=13'>上一页</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=1'>下一页</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=1&chapter=14 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 + -