`

Java通信之URL通信基础

    博客分类:
  • Java
阅读更多

java对网络通信以及提供了比较全面的jdk支持,java.net包能让程序员直接在程序中实现网络通信。

在技术日新月异的现在,我们能通过很多方式实现数据通信,比如webservice、url通信、socket通信等等,今天简单介绍下URL通信。

学习准备:建议首先学习java的IO基础知识

 

URL是统一资源定位器的简写,URL可以访问Internet和www,可以通过url访问网络资源或文件。

java提供了java.net.URL类来封装URL,大家可以在jdk api中看该类的详细介绍。

下面写一个最简单的URL创建和使用方式:

		URL url = new URL("http://www.baidu.com/");
		System.out.println("授权部分:"+url.getAuthority());
		System.out.println("网页内容:"+url.getContent());
		System.out.println("默认端口:"+url.getDefaultPort());
		System.out.println("文件名:"+url.getFile());
		System.out.println("主机名:"+url.getHost());
		System.out.println("路径名:"+url.getPath());
		System.out.println("端口号:"+url.getPort());
		System.out.println("协议名:"+url.getProtocol());
		System.out.println("查询部分:"+url.getQuery());
		System.out.println("锚点:"+url.getRef());
		System.out.println("userInfo:"+url.getUserInfo());
		
		String charSet = "gb2312";
		System.out.println("--------------getContent获取网页内容-------------------");
		//获取并打印url页面的html源文件
		InputStream in = (InputStream) url.getContent();
		BufferedReader br = new BufferedReader(new InputStreamReader(in,charSet));
		String s = br.readLine() ;
		while(s!=null){
			System.out.println(s);
			s = br.readLine();
		}
		br.close(); 
		in.close(); 

 

 

有了URL还不够,它只能获得URL本身的基本信息,如果要实现通信,需要使用URLConnection(如果是http通信,可以使用它的子类HttpURLConnection)。通过url的openConnection方法可以打开连接。

URLConnection urlConn = new URL(url).openConnection();
HttpURLConnection httpConn = (HttpURLConnection)new URL(url).openConnection();

 

 

HttpURLConnection有两种请求方式:POST和GET,跟平常J2EE项目一样。可以通过设置setRequestMethod来配置请求方式:

httpConn.setRequestMethod("POST");
httpConn.setRequestMethod("GET");

 注意请求方式字符串需要大写,如果请求方式有误,会抛出ProtocolException异常

 

 

POST和GET发送请求方式有所不同:POST向指定服务器发送的信息是被封装在http内部,而GET发送请求是通过http地址后拼接参数信息(http://www.xx.xx?xx=xx&xxx=xx)实现的。POST向服务器发送信息的时候是把请求信息以IO“流”的形式发送,而GET方式无法通过“流”形式传输。

 

下面代码通过GET方式发送请求:

String urlString = "http://localhost:8080/TestConn/Conn";
//传递一条参数
urlString += "?id=1";
URL url = new URL(urlString);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection()
httpConn.setRequestMethod("GET");
//调用connect方法执行通信
httpConn.connect();

 

下面代码通过POST方式发送请求:

String urlString = "http://localhost:8080/TestConn/Conn";
URL url = new URL(urlString);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection()
httpConn.setRequestMethod("POST");
//设置是否向httpUrlConnection输出,如果是POST请求,则需要设为true, 默认情况下是false; 
httpConn.setDoInput(true);
//设置是否从httpUrlConnection读入,默认情况下是true;
httpConn.setDoOutput(true);
//Post请求不能使用缓存
httpConn.setUseCaches(true);
//设定传送的内容类型是可序列化的java对象
httpConn.setRequestProperty("Content-type", "application/x-java-serialized-object");
//创建输出流发送请求数据
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(httpConn.getOutputStream()));
bw.write(new String("我勒个去..."));
bw.flush();
bw.close();

 

注意:一旦使用了httpConn.getOutputStream().write()方法,httpConn.setRequestMethod("GET");将失效,其请求方法会自动转为POST

 

 

服务器处理GET请求的时候通过request.getParameter方式获取请求参数,POST请求通过request.getInputStream流的形式获取。

/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String s = request.getParameter("id");
		
		response.setCharacterEncoding("UTF-8");
		response.getWriter().print(s);
		response.getWriter().close();
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//获取IO数据
		BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream()));
		
		StringBuffer sb = new StringBuffer();
		String s;
		while((s = br.readLine())!=null){
			sb.append(s);
			sb.append("\n");
		}
		
		response.setCharacterEncoding("UTF-8");
		response.getWriter().print(sb.toString());
		response.getWriter().close();
	}

 

 

获取服务器响应数据的时候可以通过IO的输入流取得:

public static String getInput(HttpURLConnection http) throws IOException{
		//获取指定URL返回的IO数据
		InputStream in = http.getInputStream();
		BufferedReader br = new BufferedReader(new InputStreamReader(in));
		
		StringBuffer sb = new StringBuffer();
		String s;
		while((s = br.readLine())!=null){
			sb.append(s);
			sb.append("\n");
		}
		br.close();
		in.close();
		
		return sb.toString();
	}

 

 

 

 

下面用一个完整代码总结下URL通信的方法:

	public static void main(String[] args) throws IOException {
		//①创建URL对象(如果是GET请求,则url后要拼接请求参数)
		String urlString = "http://localhost:8080/TestConn/Conn";
		URL url = new URL(urlString);
		//②创建HttpUrlConnection对象
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		//③配置httpConn的属性
		httpConn.setRequestMethod("POST");
		httpConn.setDoInput(true);
		httpConn.setDoOutput(true);
		httpConn.setUseCaches(true);
		httpConn.setRequestProperty("Content-type", "application/x-java-serialized-object");
		//④发送请求信息(为什么使用字符缓冲流,这纯属个人爱好)
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(httpConn.getOutputStream()));
		bw.write("Hello URL...\n");
		bw.write("你好 ItEye...");
		bw.flush();
		bw.close();
		//⑤获取响应信息
		BufferedReader br = new BufferedReader(new InputStreamReader(httpConn.getInputStream()));
		String response = null;
		while((response = br.readLine())!=null){
			System.out.println(response);
		}
		br.close();
		//⑥通信结束....
	}

 注意:http://localhost:8080/TestConn/Conn请求的是一个servlet,代码写在本文中间偏下位置。

 

URL通信技术入门很简单,一天时间足矣。

1
0
分享到:
评论

相关推荐

    Java HTTP网络通信编程示例

    Java看的HTTP网络编程 网络通信编程实例 适用于Android网络编程 在测试代码中服务端我使用三种方式:S2SH 只用Struts2 Servlet 客户端就一种 只不过换个请求的URL 服务端和客户端交互使用了两种方式:XML JSON 目前...

    网页资料收集 JAVA与JAVASCRIPT通信乱码问题 java javascript jsp的url提交带中文参数时后台取到的是乱码问题的解决

    网页资料收集 JAVA与JAVASCRIPT通信乱码问题 java javascript jsp的url提交带中文参数时后台取到的是乱码问题的解决 网页资料收集 JAVA与JAVASCRIPT通信乱码问题 java javascript jsp的url提交带中文参数时后台取到...

    Java与网络通信程序设计

    12.2 URL通信 12.2.1 InetAddress类 12.2.2 URL类 12.2.3 URLConnection类 12.3 TCP Socket通信 1. URL通信与Socket通信的区别 2. 使用Socket通信过程 3. Socket类 4. ServerSocket类 12.4 数据报通信

    Java中Socket通信-服务端和客户端双向传输字符串实现示例代码.rar

    Java中Socket通信-服务端和客户端双向传输字符串实现示例代码。在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的...

    JAVA基础课程讲义

    第一章 JAVA入门 10 计算机语言发展史 10 机器语言 10 汇编语言 10 高级语言 10 其他高级语言 11 JAVA发展简史 12 JAVA为什么能够流行? 13 JAVA各版本的含义 13 JAVA技术体系架构 14 JAVA的特性和优势 14 JAVA应用...

    flex与 java 通信常见错误

    flex与 java 通信常见错误: [RPC Fault faultString="Send failed" faultCode="Client.Error.MessageSend" faultDetail="Channel.Connect.Failed error NetConnection.Call.Failed: ...

    Java中Socket通信-客户端与服务端相互传输对象数据示例代码.rar

    在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。 socket 的典型应用就是 ...

    Java Socket通信资料.doc

    本文档主要讲述的是Java SOCKET通信资料;Java是一种可用于进行网络编程的语言,它提供了两种功能强大的网络支持机制:URL访问网络资源的类和用Socket通讯的类,来满足不同的要求。一是URL用于访问Internet网上资源...

    java程序设计教程课件

    第2章 Java语言基础 2.1 符号集 2.2 数据类型 2.3 常量与变量 2.4 运算符与表达式 2.5 数组 第3章 流程控制结构 3.1 流程控制结构概述 3.2 选择结构 3.3 循环结构 3.4 跳转语句 第4章 面向对象程序设计 4.1 ...

    Java网络通信程序的设计

    11.1 处理URL内容 11.2 使用Socket通信 11.3 使用UDP通信

    java编程基础,应用与实例

    第1章 什么是Java程序设计语言 1 1.1 Java语言诞生背景 1 1.2 Java语言的特点 1 1.2.1 可移植性(universality) 1 1.2.2 安全性(security) 1 1.2.3 Java Virtual Machine(JVM) 2 1.2.4 面向对象的程序...

    即时通信系统(Java实现)

    即时通信系统(Java实现)#new udp.port #Fri Jan 19 15:43:12 CST 2008 jdbc.url=jdbc\:odbc\:myqq tcp.ip.port=5638 password=2004190316 jdbc.driver=sun.jdbc.odbc.JdbcOdbcDriver udp.Port=9223 username=sa #...

    JAVA语言程序设计【高清版】.pdf

    第1章 Java语言 1 1.1 Java语言简介 1 1.1.1 Java语言的问世 1 1.1.2 Java语言的组成 1 1.2 开发环境的安装 3 1.3 一个简单的Java应用程序 4 1.3.1 Java应用程序示例 4 1.3.2 使用Java核心API文档 7...

    Java中Socket通信-客户端向服务端发送照片示例代码.rar

    在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。 socket 的典型应用就是 ...

    Java网络高级编程

    其中,第1章介绍网络进程通信的基础类(InetAd-dress、URL、Socket);第1章介绍Java远程方法调用RMI;第3章介绍Java与CORBA不同体系的组件间的通信技术;第6章介绍JSP技术。第7-9间主要介绍Java有关的Web技术。其中,...

    JavaNetDemo:在JAVA中,Java.net包里面的类是进行网络编程的,其中java.net.URL类和java.net.URLConection类使编程者方便地利用URL在Internet上进行网络通信。该DEMO是关于Java.net包常用类的使用介绍

    Java获取URL对应的资源 在JAVA中,Java.net包里面的类是进行网络编程的,其中java.net.URL类和java.net.URLConection类使编程者方便地利用URL在Internet上进行网络通信。1、认识URL(Java API doc)类 URL 代表一个...

    android http通信demo

    android 当中涉及到网络编程的部分经常会用到http通信,同时android也为我么您...前面提到的HttpUrlConnection接口是java当中的通信接口,而HttpClient则是java当中自带的通信接口。这个demo就实现了这四种通信方式。

    URL通信 源代码

    URL进行通信,可熟悉线程的简单使用,附源代码!

    java程序设计于开发第十讲 网络通信

    1、网络基本概念 2、Java与Internet 3、使用InetAddress 4、使用URL 5、Socket通信 6、数据报通信

Global site tag (gtag.js) - Google Analytics