`

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

阅读更多

本片文章将给出一个传输对象序列化字节流的实例,实际上对上篇文章的代码稍作修改即可。过程如下:

1.在client端和servlet建立相同存根,实现了Serializable接口的User类,注意:包路径也要相同的。代码如下:

package com.cugxw.http.vo;

import java.io.Serializable;

public class User implements Serializable {
	private static final long serialVersionUID = 1L;
	
	private String username;
	private String password;
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
}

 

2.服务器端接收字节流并转化为对象打印出来,然后返回一个普通字符串response,代码如下:

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		//Get input stream from client
		InputStream inStream = req.getInputStream();
		ObjectInputStream objInStream = new ObjectInputStream(inStream);
		
		User user = null;
		try {
			user = (User)objInStream.readObject();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		System.out.println("username=" + user.getUsername() + "\r\n" + "password=" + user.getPassword());
				
		/* Response to client */
		OutputStream os = resp.getOutputStream();
		OutputStreamWriter writer = new OutputStreamWriter(os);
		
		writer.write("response");
		writer.flush();
		writer.close();
	}

3.客户端发送一个User对象并接收服务端返回的字符串,代码如下:

	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 java serialized object
		httpUrlConn.setRequestProperty("Content-type", "application/x-java-serialized-object");
				
		//Set request method
		httpUrlConn.setRequestMethod("POST");
		
		//Get tcp connection
		httpUrlConn.connect();
		
		//get output stream object
		OutputStream outputStream = httpUrlConn.getOutputStream();
		
		//output java serialized object
		ObjectOutputStream objOutputStream = new ObjectOutputStream(outputStream);
		
		User user = new User();
		user.setUsername("cugxw");
		user.setPassword("123456");
		
		//write object into memory buffer area
		objOutputStream.writeObject(user);
		
		//Flush the memory buffer and put the object into output stream
		objOutputStream.flush();
		
		objOutputStream.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());
	}

 

分享到:
评论

相关推荐

    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程序设计实用教程(第2版)[张永常][程序源代码]

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

    java 核心技术教程笔记

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

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

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

    Java开发个人

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

    java笔记 java笔记 java笔记

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

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

    这本书涵盖了从基础概念到高级应用的多个方面,旨在帮助读者理解并掌握Java如何进行网络通信。以下是对书中关键知识点的详细解读: 1. **Java网络编程基础**: - **套接字(Socket)编程**:Java中的Socket类和...

    Java 208道面试.docx

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

    http协议开发包

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

    java学习文档

    - **HTTP通信**:利用HttpURLConnection或HttpClient进行HTTP请求。 8. **Java反射机制** - **类加载与反射**:了解类的加载过程,使用反射动态创建对象。 - **反射API**:Class类、Constructor类、Method类和...

    JAVA学习教程

    它的设计目标是具有简单性、面向对象、健壮性、安全性、可移植性等特性,使得Java在各种平台和设备上都能运行,包括桌面应用、服务器端应用、移动应用以及嵌入式系统。 本"JAVA学习教程"全面覆盖了Java的基础到高级...

    后台Demo

    【后台Demo】是一个基于MyEclipse开发的Android应用后台项目,展示了如何将JavaWeb技术应用于Android应用程序的后台处理。在Android应用开发中,后台服务通常用于执行耗时操作,如数据同步、定时任务或者在用户界面...

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

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

    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