`

Java应用层同步通信HttpURLConnection+Servlet(一)

阅读更多

在多层架构的设计中,实现系统间通信时,我们常常会选择webservice,这是一种面向服务编程的思想,是给异构系统提供同步调用服务的。如果是采用纯java开发平台,并且对扩展性、持续集成性要求不高时,实际上我们可以采用另外一种比较简洁的通信方式来实现系统间通信,那就是使用HttpURLConnection和servlet,我做了一个简单的demo:

服务端采用servlet实现(接收并返回字节流),下面为doPost方法的主体代码:

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		//Get input stream from client
		InputStream inStream = req.getInputStream();
		
		/* Read input stream */
		DataInputStream dataIS = new DataInputStream(inStream);
		BufferedInputStream bIS = new BufferedInputStream(dataIS);
		byte[] b = new byte[10];
		bIS.read(b);
		System.out.println(new String(b));
		
		/* Response to client */
		OutputStream os = resp.getOutputStream();
		
		DataOutputStream dataOS = new DataOutputStream(os);
		dataOS.write("response".getBytes());
		dataOS.flush();
		dataOS.close();
	}

 客户端为普通java应用程序,使用HttpURLConnection类发送http请求,代码如下:

public static void main(String[] args) throws Exception {
		//Set up a url
		URL url = new URL("http://localhost:8088/Servlet/httpConnectionServletTest");
		
		//Generate url connection
		URLConnection urlConn = url.openConnection();
		
		//Switch to http url connection
		HttpURLConnection httpUrlConn = (HttpURLConnection) urlConn;
		
		/* Output into http connection or not.
		 * If send get request, the parameter is false;
		 * If send post request, the parameter is true; */
		httpUrlConn.setDoOutput(true);
		
		//Input into http connection or not.
		httpUrlConn.setDoInput(true);
		
		//User cache or not
		httpUrlConn.setUseCaches(false);
		
		//Request context type is url encode
		httpUrlConn.setRequestProperty("Content-type", "application/x-www-form-urlencoded");
		
		//Set request method
		httpUrlConn.setRequestMethod("POST");
		
		//Get tcp connection
		httpUrlConn.connect();
		
		//get output stream object
		OutputStream outputStream = httpUrlConn.getOutputStream();
				
		DataOutputStream dataOS = new DataOutputStream(outputStream);
						
		//Flush the memory buffer and put the bytes into output stream		
		dataOS.write("request".getBytes());
		
		dataOS.flush();
		dataOS.close();
		
		//Invoke method getInputStream() to send data to server
		InputStream inStream = httpUrlConn.getInputStream();
		
		/* Get response from server 
		 * You can invoke available method to get the length of stream */
		byte[] inB = new byte[inStream.available()];
		inStream.read(inB);
		System.out.println((new String(inB)).toString());
}

 以上代码只实现了传输普通字节流,当然,也可以像RMI那样去传输对象字节流,无非就是让对象实现Serializable接口,然后序列化为Object Stream去传输,注意在客户端和服务器端都要保存对象存根,下一篇文章将给出对象的事例。

 

分享到:
评论

相关推荐

    java编程深入研究

    网络编程在Java中也占有重要地位,Socket编程和HTTP客户端库(如HttpURLConnection)使得Java应用程序能够与其他系统进行通信。此外,NIO(非阻塞I/O)和AIO(异步I/O)提供了更高效的数据传输方式。 最后,Java还...

    java_API.zip

    Java API,全称为Java应用程序接口,是Java编程语言的核心组成部分,包含了大量预先定义好的类和方法,供开发者在编写程序时直接使用。这个压缩包"java_API.zip"显然是聚焦于Java API的,其中可能包含了对Java标准库...

    java 核心技术教程笔记

    9. **持久化技术**:ORM(Object-Relational Mapping)框架如Hibernate和MyBatis简化了Java应用与数据库之间的交互,将对象模型和关系数据库模型进行映射,减少了数据访问层的复杂性。 10. **容器与部署**:Tomcat...

    Java程序设计实用教程(第2版)[张永常][程序源代码]

    - **Java应用程序类型**:了解JVM执行的三种类型:Java应用程序、Java小程序和Java Applet。 - **Java EE架构**:学习如何在企业环境中使用Servlet、JSP和EJB等技术开发Web应用。 书中的源代码分布在不同的章节...

    Java开发个人

    10. **Java EE**:Java企业版(Java EE)提供了一系列用于构建分布式、基于组件的Web应用程序的API和服务,如Servlet、JSP、EJB(Enterprise JavaBeans)、JPA(Java Persistence API)等。 11. **开发工具**:...

    Java多线程与线程安全实践-基于Http协议的断点续传.zip

    1. **HTTP协议基础**:HTTP是一种无状态的应用层协议,用于在Web上传输数据。它定义了客户端和服务器之间的交互方式。 2. **断点续传原理**:断点续传允许在下载或上传过程中暂停,并在需要时从上次中断的位置继续...

    java笔记 java笔记 java笔记

    Java编程语言是全球广泛使用的高级编程语言之一,尤其在企业级应用开发中占据主导地位。这份"java笔记"涵盖了从基础到进阶的各种Java知识,旨在帮助学习者系统地掌握这门语言。以下是对笔记内容的详细解读: 1. **...

    java网络编程_孙卫琴_有书签

    《Java网络编程精解》是孙卫琴先生的一本经典著作,主要针对Java开发者,深入讲解了Java在网络编程领域的核心知识。这本书涵盖了从基础概念到高级应用的多个方面,旨在帮助读者理解并掌握Java如何进行网络通信。以下...

    http协议开发包

    它是一个基于请求与响应模型的、无状态的、应用层的协议,并通过TCP/IP进行通信。在Java开发中,使用HTTP协议进行网络通信是非常常见的场景,例如发送HTTP请求获取网页数据、API接口调用等。 这个"HTTP协议开发包...

    Java 208道面试.docx

    Java 是一种广泛使用的编程语言,尤其在企业级应用和服务器端开发中占据主导地位。面试时,面试官通常会从多个方面考察候选人的Java技能,包括基础、容器、多线程、反射、对象拷贝、Java Web、异常处理、网络编程、...

    后台Demo

    首先,我们需要理解MyEclipse作为一款强大的Java集成开发环境,它是Eclipse的扩展版本,特别适合于Java EE项目的开发,包括Web应用和企业级服务。在本项目中,MyEclipse被用来创建和管理JavaWeb组件,这些组件将与...

    JAVA学习教程

    Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年发布。它的设计目标是具有简单性、面向对象、健壮性、安全性、可移植性等特性,使得Java在各种平台和设备上都能运行...

    Java-Network-Programming:《Java-Network-Programming》一书的注释

    Java网络编程是Java开发中的重要领域,特别是在构建分布式系统、客户端-服务器应用和实时通信时。《Java-Network-Programming》这本书深入浅出地讲解了如何利用Java API进行网络编程,包括TCP/IP通信、套接字编程、...

    java学习文档

    以下是一份详细的Java学习指南,根据描述,这些内容可能是作者在实际开发过程中积累的经验和笔记。 1. **Java基础** - **变量与数据类型**:了解Java中的基本数据类型(如int、char、boolean等)以及引用数据类型...

    Training

    - 对于企业级应用,Java EE(Enterprise Edition)提供了Servlet、JSP、EJB等技术,用于构建分布式、事务处理和数据库交互的应用。 9. **Spring框架** - Spring是Java开发中广泛使用的轻量级框架,它提供了依赖...

    study:学习笔记和代码DEMO

    - **线程同步**:synchronized关键字保证线程安全,wait()、notify()和notifyAll()方法用于线程间的通信。 - **线程池**:ExecutorService和ThreadPoolExecutor提供线程池管理,优化系统资源利用。 7. **网络编程...

Global site tag (gtag.js) - Google Analytics