针对网络通信的不同层次,Java提供了不同的API,其提供的网络功能有四大类:InetAddress:用于标识网络上的硬件资源,主要是IP地址;URL:统一资源定位符,通过URL可以直接读取或写入网络上的数据;Sockets:使用TCP协议实现的网络通信Socket相关的类;Datagram:使用UDP协议,将数据保存在用户数据报中,通过网络进行通信。
URL处理,给定一个URL,分析URL的结构,通过URL获取网络数据
1.URL类,使用一个字符串url初始化,getXXX()返回域名、端口、参数等;openConnection()返回一个URLConnection对象
2.URLConnection类:代表与目标的连接对象,getInputStream()返回InputStream对象,其中包含从网络主机获取到的数据
3.InetAddress类:代表IP地址,静态方法getLocalHost(),getByName()获取IP
4.Socket编程
5.Java.net.Socket类:代表一个套接字
6.Java.net.ServerSocket:服务器端套接字监听类
7.Socket是TCP/IP协议的编程接口,网络上具有唯一标识的IP地址和端口号组合在一起构成唯一的套接字
8.使用socket和多线程实现一个静态网页服务器,功能有浏览静态网页,上传下载文件。COOKIE保存。
需要解决的问题:HTTP协议的get和post方法如何分别处理。HTTP协议有哪些选项。HTTP协议的状态码。服务器配置文件XML文件的解析,sax
10.阅读tomcat源码需要哪些知识:socket、如何在TCP上实现HTTP、servlet规范、类加载器、XML解析
Java中使用URL类请求网络接口
URL不具备浏览器的urlencode功能,所以请求的路径中不能使用特殊符号
例如:请求路径中有日期参数2017-12-04 12:00
如果直接将参数添加到请求路径中,可能会导致请求错误
原因是URL类中的请求方法不会对日期中的空格转换成 %20
解决问题的办法有
使用URLEncode类转换,或者手动替换请求路径中的特殊字符,例如将空格替换为%20
URLEncode使用建议:
先拼接完整URL,然后再对整个URL进行编码;
也可以对单个的参数值进行编码,
但是不要将 例如:http://192.168.3.154:11088/demo.htm?abc=123中问号后面的部分进行单独编码,然后再与前面部分拼接,这样得不到正确的URL,因为?和&都会被当作特殊字符进行处理。
使用request.getParameter()方法获取参数时,如果请求中没有对应的参数,这得到的结果是null而非空字符串。