- 浏览: 16916 次
- 性别:
- 来自: 杭州
文章分类
最新评论
在多层架构的设计中,实现系统间通信时,我们常常会选择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去传输,注意在客户端和服务器端都要保存对象存根,下一篇文章将给出对象的事例。
发表评论
-
系统集成
2013-06-27 16:26 0实现异构系统的集成 ... -
ssg2
2013-03-27 14:33 0test -
ssg1
2013-03-27 14:29 0test -
workspace
2013-02-20 17:17 0work -
HashMap和Hashtable的比较
2013-01-24 12:29 1127这两个类是java中进行key-value存储、查询的常用 ... -
hash
2013-01-23 17:23 0两个类是java中进行key-value存储、查询的常用类, ... -
String、StringBuffer、StringBuilder的区别
2013-01-22 21:03 1251String、StringBuffe ... -
String、
2013-01-22 16:20 0String、StringBuffer、String ... -
factory
2013-01-18 16:32 0设计模式可分为三种类型:创建模式、结构模式和行为模式,这也从 ... -
javaoi
2013-01-10 16:16 0http://www.ibm.com/developerwor ... -
基于java的守护进程(deamon)开发
2012-12-25 17:33 0package com.cugxw.deamon; im ... -
Java应用层同步通信HttpURLConnection+Servlet(二)
2012-12-24 15:18 1910本片文章将给出一个传输对象序列化字节流的实例,实际上对上篇文 ... -
XML基本应用
2012-12-21 11:40 0xml -
test
2012-12-12 16:42 0Software Project Management Col ... -
Java线程的创建
2012-10-19 17:08 1052很多书上介绍Java的线程创建有两种方式,一种是继承Threa ... -
Java的多线程控制
2012-10-19 15:58 810->Java的多线程控制在多线程编程中经常会用到,线程在 ... -
测试XmlHandler,接上篇(自己实现的XML和Entity映射工具)
2012-10-12 16:26 1553关于XmlHandler的单元测试代码: package t ... -
自己实现的XML和Entity映射工具XmlHandler
2012-10-12 16:23 2127公司不允许随便下载第三方jar包,但是公司lib库中的jar又 ...
相关推荐
网络编程在Java中也占有重要地位,Socket编程和HTTP客户端库(如HttpURLConnection)使得Java应用程序能够与其他系统进行通信。此外,NIO(非阻塞I/O)和AIO(异步I/O)提供了更高效的数据传输方式。 最后,Java还...
Java API,全称为Java应用程序接口,是Java编程语言的核心组成部分,包含了大量预先定义好的类和方法,供开发者在编写程序时直接使用。这个压缩包"java_API.zip"显然是聚焦于Java API的,其中可能包含了对Java标准库...
9. **持久化技术**:ORM(Object-Relational Mapping)框架如Hibernate和MyBatis简化了Java应用与数据库之间的交互,将对象模型和关系数据库模型进行映射,减少了数据访问层的复杂性。 10. **容器与部署**:Tomcat...
- **Java应用程序类型**:了解JVM执行的三种类型:Java应用程序、Java小程序和Java Applet。 - **Java EE架构**:学习如何在企业环境中使用Servlet、JSP和EJB等技术开发Web应用。 书中的源代码分布在不同的章节...
10. **Java EE**:Java企业版(Java EE)提供了一系列用于构建分布式、基于组件的Web应用程序的API和服务,如Servlet、JSP、EJB(Enterprise JavaBeans)、JPA(Java Persistence API)等。 11. **开发工具**:...
1. **HTTP协议基础**:HTTP是一种无状态的应用层协议,用于在Web上传输数据。它定义了客户端和服务器之间的交互方式。 2. **断点续传原理**:断点续传允许在下载或上传过程中暂停,并在需要时从上次中断的位置继续...
Java编程语言是全球广泛使用的高级编程语言之一,尤其在企业级应用开发中占据主导地位。这份"java笔记"涵盖了从基础到进阶的各种Java知识,旨在帮助学习者系统地掌握这门语言。以下是对笔记内容的详细解读: 1. **...
《Java网络编程精解》是孙卫琴先生的一本经典著作,主要针对Java开发者,深入讲解了Java在网络编程领域的核心知识。这本书涵盖了从基础概念到高级应用的多个方面,旨在帮助读者理解并掌握Java如何进行网络通信。以下...
它是一个基于请求与响应模型的、无状态的、应用层的协议,并通过TCP/IP进行通信。在Java开发中,使用HTTP协议进行网络通信是非常常见的场景,例如发送HTTP请求获取网页数据、API接口调用等。 这个"HTTP协议开发包...
Java 是一种广泛使用的编程语言,尤其在企业级应用和服务器端开发中占据主导地位。面试时,面试官通常会从多个方面考察候选人的Java技能,包括基础、容器、多线程、反射、对象拷贝、Java Web、异常处理、网络编程、...
首先,我们需要理解MyEclipse作为一款强大的Java集成开发环境,它是Eclipse的扩展版本,特别适合于Java EE项目的开发,包括Web应用和企业级服务。在本项目中,MyEclipse被用来创建和管理JavaWeb组件,这些组件将与...
Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年发布。它的设计目标是具有简单性、面向对象、健壮性、安全性、可移植性等特性,使得Java在各种平台和设备上都能运行...
Java网络编程是Java开发中的重要领域,特别是在构建分布式系统、客户端-服务器应用和实时通信时。《Java-Network-Programming》这本书深入浅出地讲解了如何利用Java API进行网络编程,包括TCP/IP通信、套接字编程、...
以下是一份详细的Java学习指南,根据描述,这些内容可能是作者在实际开发过程中积累的经验和笔记。 1. **Java基础** - **变量与数据类型**:了解Java中的基本数据类型(如int、char、boolean等)以及引用数据类型...
- 对于企业级应用,Java EE(Enterprise Edition)提供了Servlet、JSP、EJB等技术,用于构建分布式、事务处理和数据库交互的应用。 9. **Spring框架** - Spring是Java开发中广泛使用的轻量级框架,它提供了依赖...
- **线程同步**:synchronized关键字保证线程安全,wait()、notify()和notifyAll()方法用于线程间的通信。 - **线程池**:ExecutorService和ThreadPoolExecutor提供线程池管理,优化系统资源利用。 7. **网络编程...