程式先锋Java技术维客

Java Socket编程的一个秘密类

九月 22, 2009 by czl

介绍

 

Java平台在java.net包里来实现Socket。在这本文中,我们将使用Java.net包中的下面三个类来工作:

 

·URLConnection

 

·Socket

 

·ServerSocket

 

在java.net包里包含有更多的类,但是这些是你最经常遇见的,让我们从URLConnection开始,这个类提供了在你的java代码里使用Socket的方法而无需了解Socket的底层机制。

 

甚至不用尝试就可以使用sockets

 

连接到一个URL包括以下几个步骤:

 

·创建一个URLConnection

 

·用不同的setter方法配置它

 

·连接到URLConnection

 

·与不同的getter方法进行交互

 

下面,我们来用一些例子示范怎样使用URLConnection从一台服务器上请求一份文档。

 

URLClient类

 

我们将从URLClient类的结构开始讲起。

 

 

import java.io.*;
import java.net.*;
public class URLClient {
 protected URLConnection connection;
 public static void main(String[] args) {}
 public String getDocumentAt(String urlString) {}
}

 

注意:必须要先导入java.net和java.io包才行

 

我们给我们的类一个实例变量用于保存一个URLConnection

 

我们的类包含一个main()方法用于处理浏览一个文档的逻辑流(logic flow),我们的类还包含了getDocumentAt()方法用于连接服务器以及请求文档,下面我们将探究这些方法的细节。

 

浏览文档

 

main()方法用于处理浏览一个文档的逻辑流(logic flow):

 

 

public static void main(String[] args) {
 URLClient client = new URLClient();
 String yahoo = client.getDocumentAt("http://www.yahoo.com");
 System.out.println(yahoo);
}

 

我们的main()方法仅仅创建了一个新的URLClient类的实例并使用一个有效的URL String来调用getDocumentAt()方法。当调用返回文档,我们把它储存在一个String里并把这个String输出到控制台上。然而,实际的工作是getDocumentAt()方法当中完成的。

 

从服务器上请求一份文档

 

getDocumentAt()方法处理在实际工作中如何从web上得到一份文档:

 

 

public String getDocumentAt(String urlString) {
 StringBuffer document = new StringBuffer();
 try {
  URL url = new URL(urlString);
  URLConnection conn = url.openConnection();
  BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
  String line = null;
  while ((line = reader.readLine()) != null)
   document.append(line + "\n");
   reader.close();
 } catch (MalformedURLException e) {
  System.out.println("Unable to connect to URL: " + urlString);
 } catch (IOException e) {
  System.out.println("IOException when connecting to URL: " + urlString);
 }
 return document.toString();
}

 

getDocumentAt()方法有一个String类型的参数包含我们想得到的那份文档的URL。我们先创建一个StringBuffer用于保存文档的行。接着,我们用传进去的参数urlString来创建一个新的URL。然后,我们创建一个URLConnection并打开它:

 

URLConnection conn = url.openConnection();

 

一旦有了一个URLConnection,我们就获得它的InputStream并包装成InputStreamReader,然后我们又把它进而包装成BufferedReader以至于我们能够读取从服务器获得的文档的行,我们在java代码中处理socket的时候会经常使用这种包装技术。在我们继续学习之前你必须熟悉它:

 

BufferedReader reader =new BufferedReader(new InputStreamReader(conn.getInputStream()));

 

有了BufferedReader,我们能够容易的读取文档的内容。我们在一个while...loop循环里调用reader上的readline()方法:

 

String line = null;

while ((line = reader.readLine()) != null)

document.append(line + "\n");

 

调用readLine()方法后从InputStream传入行终止符(例如换行符)时才产生阻塞。如果没有得到,它将继续等待,当连接关闭时它才会返回null,既然这样,一旦我们获得一个行,我们连同一个换行符把它追加到一个调用的文档的StringBuffer上。这样就保留了从服务器上原文档的格式。

 

当我们读取所有行以后,我们应该关闭BufferedReader:

 

reader.close();

 

如果提供给urlString的URL构造器无效,则将会抛出一个MalformedUR特拉LException异常。同样如果产生了其他的错误,例如从连接获取InputStream时,将会抛出IOException。

 

总结

 

1.用一个你想连接的资源的有效的url String来实例化URL

 

2.连接到指定URL

 

3.包装InputStream为连接在BufferedReader以至于你可以读取行

 

4.用你的BufferedReader读取文档内容

 

5.关闭BufferedReader

VMware将斥资4.2亿美元收购SpringSource

八月 12, 2009 by czl
VMware将斥资4.2亿美元收购SpringSource[Read More]

8月编程语言排行榜

八月 11, 2009 by czl
8月编程语言排行榜[Read More]

Java如何进阶

七月 27, 2009 by czl
本来我想把这篇文章的名字命名为: <怎样成为一个优秀的Java程序员>的, 但是自己还不够优秀, 而本篇所涉及的都是自己学习和工作中的一些经验, 后来一想, 叫<怎样进阶Java>可能更为合适吧. 能给初学Java的人一个参考, 也就是我本来的心愿. 如果有大牛看到不妥之处, 敬请指正. 我一定会修正的 :).[Read More]

利用数字签名超越Java Applet的安全限制

七月 08, 2009 by czl
Java技术之所以在今天得到了如此广阔的应用,其中它的安全性是不能不提的。不同于其它技术(例如 Microsoft的ActiveX)中安全性作为附加设计和补丁,Java从设计之初便考虑到了安全性。[Read More]

用Delphi开发JNI(Java Native Interface)应用

七月 02, 2009 by czl
用Delphi开发JNI(Java Native Interface)应用介绍。[Read More]

独家:程序员必备Java API和类搜索辅助工具发布

六月 24, 2009 by czl
【CSDN6月23日消息】根据国外媒体报道,卡耐基梅隆大学计算机系的研究人员日前开发了两款工具用于帮助程序员从成千上万的Java API中选择合适的API。[Read More]

Java EE 6遥遥无期 预览版两极分化

六月 19, 2009 by czl
对Java开发者来说,最近可以说是一段有趣的时间。被Oracle收购后,Java的保管人Sun Microsystems的业务正在被Oracle一步步合并,而同时一个重要的Java新规范正接近完成。
[Read More]

JSP安全编程实例浅析

六月 18, 2009 by czl
Java Server Page(JSP)作为建立动态网页的技术正在不断升温。JSP和ASP、PHP、工作机制不太一样。一般说来,JSP页面在执行时是编译式,而不是解释式的。首次调用JSP文件其实是执行一个编译为Servlet的过程。当浏览器向服务器请求这一个JSP文件的时候,服务器将检查自上次编译后JSP文件是否有改变,如果没有改变,就直接执行Servlet,而不用再重新编译,这样,效率便得到了明显提高。
[Read More]

JAVA新技术在协同OA中的应用

六月 17, 2009 by czl
JAVA新技术在协同OA中的应用。[Read More]

提升JSP应用程序的七大绝招

六月 17, 2009 by czl
本文讲述了调整JSP和servlet的一些非常实用的方法,它可使你的servlet和JSP页面响应更快,扩展性更强。而且在用户数增加的情况下,系统负载会呈现出平滑上长的趋势。在本文中,我将通过一些实际例子和配置方法使得你的应用程序的性能有出人意料的提升。其中,某些调优技术是在你的编程工作中实现的。而另一些技术是与应用服务器的配置相关的。在本文中,我们将详细地描述怎样通过调整servlet和JSP页面,来提高你的应用程序的总体性能。在阅读本文之前,假设你有基本的servlet和JSP的知识。[Read More]

6月编程语言排行榜:JavaScript占有率创新高

六月 15, 2009 by czl
新闻资讯6月编程语言排行榜:JavaScript占有率创新高.[Read More]

看看世界各地开发高手谈Java

六月 12, 2009 by czl
看看世界各地开发高手是怎么谈Java的![Read More]

struts2中如何使s:select标签只读

六月 12, 2009 by czl
struts2中如何使s:select标签只读[Read More]

Sql Server 带参数的存储过程执行方法

六月 11, 2009 by czl

这一篇我们介绍带参数的存储过程执行方法,它调用通用数据访问类(SqlHelper)执行 SqlHelper.ExecuteNonQuery()方法,使用示例为。

[Read More]

Search

 

« 七月 2010
星期日星期一星期二星期三星期四星期五星期六
    
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
       
今天

Feeds

Navigation