3网络API
概述:
对于网络的实现,java支持Socket建立服务器和客户端的通讯;并提供了Jmail API 可以方便的实现邮件传输协议;还提供了URI,URL,URLConnection对Socket的包装去良好的支持了HTTP传输协议;并且还支持TCP/IP的很多机制,半关闭连接,保活连接器等。
Socket
对于Java这样的强大平台,它肯定也是支持Socket的,程序员不用了解具体底层协议传输(默认是TCP传输,也可以设置成UDP),
可以很方便的按照的流的方式进行通讯,主要实现类方法:
Socket类:
InputStream getInputStream():获取一个输入流。
OutputStream getOutputStream():获取一个输出流。
ServerSocket类:
ServerSocket(int port):创建一个服务器套接字。
Socket accept():服务端接受一个客户端访问。
void close():关闭连接。
对于网络流的连接,如果客户端去访问服务器出错未返回,客户端不可能一直忙等,客户端需要对服务器端的连接设置一个超时。
对于Socket服务器并发的实现,我们只需简单对每一个客户端的访问都new Thread去处理所有的请求即可。
java的Socket类还有一个软肋,就是如果一端(A)成功连接到另一端(B),A向B传输大量数据,传输过程时间很长,并且还未超时,
这时一端想中断 连接是无法中断的。Java提供了SocketChannel实现套接字通道,一个可中断的网络传输管道。使用方式如下:
SocketChannel channel = SocketChannel.open(new InetSocketAddress(host, port));
由于Channel没有专门的输入输出流,可以用以下两种方式实现输入,输出流:
Scanner in = new Scanner(channel);
OutputStream outStream = Channels.newOutputStream(channel);我们还可以使用Socket去实现ftp,smtp,http,telnet
等协议的传输不过必须得按照具体协议过程去传输(详细请参考相关的RFC文档)。
URI与URL
URI:uniform resource identifier(统一资源标识符)
URI是一个纯粹的句法结构,用与指定标识Web资源的各个不同部分。URL是URI的一个特例,它包含了定义Web资源的足够信息。
URI不包含任何用户访问资源的方法-它的唯一作用就是解析。
URL:uniform resource locator(统一资源定位符)
URL是可以打开一个到达资源的流。目前java支持http:, https:, ftp: the local file system (file:), and JAR files (jar:)。
简单的可以理解为:URI可以理解成一个网络ID,而URL可以理解成一个网络资源。
URI解析:
URI规范:[scheme:]schemeSpecificPart[#fragment]
可选部分:[…] ,它与:和#可以包含在[]标识符内。
包含[scheme:]的称为绝对URI,否则成为相对URI。
绝对URI schemeSpecificPart部分如果不是以/开头,我们从就称为不透明的URI。如:
mailto:cay@horstmann.com
对于绝对透明的URI和相对的URI都是分层的。如:
http://java.sun.com/index.html
http://www.cnblogs.com/java/net/Socket.html#Socket()
一个分层的URI schemeSpecificPart部分有如下结构:
[//authority][path][?query]
基于服务器的authority部分可以采用以下形式:
[user-info@]host[:port]
prot 为整数。具体结构请参考RFC 2396,
Java可以通过URI类的方法方便获取这些结构:
GetScheme,getSchemeSpecificPart,getAuthority,getUserInfo,getHost,getPort,getPath
GetQuery,getFragment
同时URI类,还支持两个路径的绝对化和相对化,如下
relative = base.relativize(combined);
combined = base.resolve(relative);
建立URL
如果相对Web上某个资源获取更多的控制,应该使用URLConnection类,它可以比URL类获取对资源更多的控制。
在建立URL连接与传输的时候必须严格按照以下步骤去执行。
1.获取URLConnection对象(URL类)
URLConnection connection = url.OpenConnection();
2.设置请求属性
setDoOutput(默输出流是关闭的)、setRequestProperty、setConnectTimeout、setReadTimeout
setIfModifiedSince(applets)、setUseCaches(applets)、setAllowUserInteraction(applets)
对于setRequestProperty设置http请求头属性的具体格式,详细参考RFC2616
3.远程连接资源
connection.connect();
4.远程连接URL后可以,访问header information。
可以用getHeaderFieldKey ,getHeaderField,以迭代的方式去访问, JDK 1.4以后可以通过getHeaderFields获取Map<String,List<String>> headerFields Map。同时还提供了一些便于访问的常用方法。
GetContentType、getContentLength、getContentEncoding
GetDate、getExpiration、getLastModified
5.获取URL流。
GetInputStream(与url.OpenStream相同)。
提交表单数据
在html中我们可以通过GET/POST命令向Web Server服务器提交数据。
GET命令URL如下:
http://host/script?parameters
对于GET命令只需要对于针对服务器上的对象的脚本程序发送指定的参数即可(参数个数受限制),每对参数都是name=value的形式,
参数之间用&符号分割,如果参数需要按照如下方式进行编码:
对于数字和字母,编码不变;空格用+替换;其它以外的字符用%后面跟一个两位的十六进制替换。如:“S. Main”替换为“S%2e+Main”
为了方便程序员Java提供了URLEncoder,URLDecoder对URL编码进行编码和解码。
POST命令URL如下:
http://host/script
POST命令不需要加任何的参数,只需要URL类通过脚本地址获取URLConnection,然后获取输出流即可(GetOutPutStream),
然后发送scirpt需要的参数,发送的参数方式和GET的参数一样。发送完所需的参数,我们可以通过getInputStream返回服务器返回的内容。
如果服务器出现错误或异常,可以通过添加try catch{}捕获,具体错误内容可以通过URLConnection对象获取:
InputStream err = ((HttpURLConnection) connection).getErrorStream();
分享到:
相关推荐
CoreJava DAY01 Java概述 1 CoreJava DAY02 数据类型和控制结构 6 CoreJava DAY03 数组 11 CoreJava DAY04 15 CoreJava DAY05 面向对象 17 CoreJava DAY06 类的加载过程、实例化、继承、...CoreJava DAY23 网络编程 107
CoreJava是Java的基础,涵盖了Java Standard Edition (J2SE)的主要内容,包括基本语法、面向对象编程(OO)原则、核心类库的使用等。在学习CoreJava时,我们需要掌握以下几个关键知识点: 1. **编程思想**: - ...
在Java编程语言中,SortedSet接口是Set接口的一个子接口,它添加了对集合元素排序的能力。SortedSet接口要求其实现类必须维护元素的排序顺序,这种顺序可以是元素的自然顺序(即元素自身可比较),也可以是通过提供...
CoreJava全套详细笔记资料.pdf CoreJava是Java编程语言的核心部分,涵盖了Java语言的基础知识和高级应用。以下是对给定文件的详细解读和知识点总结: 一、原码、反码、补码 * 原码是指一个数的二进制表示形式,...
- `java.net`处理网络通信。 - `java.util`提供了算法、数据结构、集合框架、日期时间等工具类。 - `java.sql`和`javax.sql`用于数据库操作。 12. **数值类型转换** - Java中有严格的数值类型转换规则,包括...
在Java编程语言中,继承是面向对象编程的一个关键特性,它允许子类继承父类的属性和方法,从而实现代码的复用和扩展。在Java中,类的继承是单继承的,即一个子类只能有一个直接父类,但可以通过接口实现多继承的效果...
Java核心技术II(原书第8版)英文版,可以帮助Java程序员充电!
CoreJava_day11的学习笔记主要涵盖了集合框架,特别是关于List、Set和Map接口,以及ArrayList、Vector和LinkedList等具体实现类的知识点。 首先,集合框架是用来存放对象的对象,它提供了一组接口和类,使得我们...
### Java基础 CoreJava笔记 #### 一、面向对象编程与Java语言 面向对象编程(OOP)是一种编程范式,它将程序设计成一系列相互交互的对象。这些对象包含数据(属性)以及对该数据进行操作的方法(行为)。Java作为一...
在Java编程语言中,Core Java是基础且至关重要的部分,涵盖了面向对象编程的基本概念、类、对象、包、异常处理、输入输出、集合框架、多线程、网络编程等多个核心主题。以下是对"CoreJava_day15"学习笔记中可能涉及...
在CoreJava_day05的学习笔记中,我们主要探讨了数组、二维数组以及生成随机数的三种方法。同时,还涉及到了String对象的不同状态。 首先,数组是Java中的基础数据结构,它是一个元素的集合,可以存储基本类型(如...
本篇笔记主要针对初学者,旨在帮助他们掌握Core Java的关键知识点。 一、Java语言基础 Java语言的基础包括语法、数据类型、变量、运算符和控制流程。在Java中,数据类型分为基本类型(如int、char、boolean)和引用...
这份名为"Corejava 核心java笔记"的资料应该包含了作者在学习Java基础时的一些理解和实践心得,对于初学者来说是一份宝贵的参考资料。 1. **Java语法**: Java语法简洁而严谨,包括变量声明、数据类型(如整型、浮点...
Core JAVA 笔记 OOAD思想 笔记 Oracle 笔记 JDBC 笔记 Hibernate 笔记 HTML&java script 笔记 Servlet 笔记 Jsp 笔记 Struts 1.2 笔记 Struts 2 笔记 Ajax 笔记 Spring 笔记 SSH和Ajax的整合 笔记 PL/SQL 笔记 Java...
今天的学习笔记主要关注的是无连接的UDP(用户数据报协议)以及Java中与其相关的类,如`DatagramSocket`和`MulticastSocket`。 UDP是一种轻量级的传输层协议,它不保证数据的可靠性,不进行错误校验和重传,因此...
《Core Java 2 Volume II》是Java开发领域中一本经典的参考书籍,主要针对有经验的Java程序员,深入探讨了Java的高级特性和功能。这本书的第8版,即"Advanced Features"部分,提供了关于Java技术的详尽指南,涵盖了...