`
muscle-liu
  • 浏览: 229619 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

HttpURLConnection 与 servlet 实现同一应用在不同主机上的通信

阅读更多
最近的web项目(J2ee + Flex)求在多台主机上运行,用的是同一个数据库,实现简单的集群。具体的集群还没实现,但我的啊head要求我实现一个IM(InstantMessage即时信息)功能。这功能不难,难就在于各用户是登录在不用的主机上,要解决不同主机间的通信。

同一应用在不同主机间的通信,我想可以有两种方法:1)用java socket; 2)用http request(其实,http request的底层也是socket连接的,是对socket高层次的封装。)。

考虑到实现上的方便,我就选用了http request来实现通信(原理如下):

       先用 java HttpURLConnection 来发送http请求(因为一般的jsp/servlet发送请求时是会转向一个web地址的,这对于IM功能来说是没需要的)。根据各主机的地址,创建不同的 HttpURLConnection 。然后用一个 servlet 来处理请求,并处理相应的 IM 信息。

HttpURLConnection 实现的主要代码:

String[] reqPath;//各主机的请求路径

// 记录各主机的 URL 和相应的 HttpURLConnection
URL[] url;
HttpURLConnection[] httpURLConnection;
......
......

public void sendMessage( String sender, String msg, String receiver) {

	try {
		msg = URLEncoder.encode(msg, "UTF-8");
	} catch (UnsupportedEncodingException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

	url = new URL[reqPath.length];
	httpURLConnection = new HttpURLConnection[reqPath.length];
	for (int i = 0; i < reqPath.length; i++) {
		String urlPath = reqPath[i] + "?sender="+sender+"&msg=" + msg + "&receiver="
				+ receiver;
		System.out.println("urlPath: " + urlPath);
		try {
			url[i] = new URL(urlPath);

			httpURLConnection[i] = (HttpURLConnection) url[i]
					.openConnection();

			System.out.println("url[" + i + "]: " + url[i]);
			System.out.println("httpURLConnection[" + i + "]: "
					+ httpURLConnection[i]);

			httpURLConnection[i].setConnectTimeout(5000);
			httpURLConnection[i].setRequestMethod("POST");
			httpURLConnection[i].setDoOutput(true);
			httpURLConnection[i].setRequestProperty("Content-Type",
					"text/html;charset=UTF-8");
			httpURLConnection[i].setRequestProperty("Cache-Control",
					"no-cache");
			httpURLConnection[i].connect();

			InputStream is = httpURLConnection[i].getInputStream();
			int resCode = httpURLConnection[i].getResponseCode();
			System.out.println("ResponseCode:" + resCode);					
			is.close();
			
		} catch (MalformedURLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IOException e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		}
	}
	if (httpURLConnection != null) {
		for (int i = 0; i < httpURLConnection.length; i++) {
			httpURLConnection[i].disconnect();
		}
		httpURLConnection = null;
	}
	if (url != null) {
		url = null;
	}
}

.........


在测试中,因为所发送的 message 的是有空格,所以构造出来的 URL 也是有空格的。这对IE来说是不允许的(测试中出现了 "Server returned HTTP response code: 505"  的 exception )。所以上边代码中有 "msg = URLEncoder.encode(msg, "UTF-8");" 这一句来处理。而在处理请求的 servlet 中我们可以用 "content = URLDecoder.decode(content,"UTF-8");" 来还原 message。

小结:想实现web简单的集群,HttpURLConnection 与 servlet 就可以解决,并不需要其他高深的技术或框架。
5
0
分享到:
评论

相关推荐

    HttpURLConnection+servlet+swing登陆注册+留言板

    在IT行业中,构建一个基于Java的Web应用是常见的任务,涉及到客户端与服务器之间的交互、用户界面设计以及数据存储。在这个项目中,“HttpURLConnection + Servlet + Swing 登陆注册 + 留言板”就是一个典型的组合,...

    Java通过HttpURLConnection与servlet通信

    Java通过HttpURLConnection与Servlet通信是Web开发中常见的一种交互方式,尤其在客户端和服务端进行数据交换时。HttpURLConnection是Java标准库中提供的一个类,它允许应用程序作为一个HTTP客户端发起请求并接收响应...

    HttpURLConnection servlet 多文件参数 断点上传

    在IT行业中,网络编程是不可或缺的一部分,而HTTP协议作为互联网上的通信标准,其在Java中的实现通常是通过`HttpURLConnection`类。本知识点将深入探讨如何使用`HttpURLConnection`与Servlet协同工作,处理多文件...

    Java Servlet实现HTTP通信的例子.rar

    5. **Android与Servlet通信**:在Android应用中,可以通过`HttpURLConnection`类或第三方库(如OkHttp)发起HTTP请求,向Servlet发送数据。这些库可以方便地处理连接、编码、解码等工作。 6. **异步处理**:为了...

    客户端与服务器端通信示例代码(基于HttpURlConnection实现)

    本例演示最简单的android客户端和服务器端通信,客户端使用android4.0以上版本,服务器端为dynamic web project工程,使用时将client代码中的ip地址改为自己电脑的ipv4地址,同时保证手机和电脑处于同一网络下(内网...

    Java Applet与Java Servlet的安全通信策略与实现.rar_applet_applet servlet_jav

    本文将深入探讨Java Applet与Java Servlet之间的安全通信策略及其实现。 1. **Java Applet简介** Java Applet是嵌入在HTML页面中的小型Java程序,由Java虚拟机(JVM)在客户端浏览器中执行。Applet通常用于提供富...

    Java自带的HttpURLConnection访问接口实现文件上传

    在Java编程语言中,HTTPURLConnection是Java标准库提供的一个接口,用于通过HTTP协议与服务器进行通信。这个接口在java.net包下,是处理HTTP请求的基础类,包括发送GET、POST等请求,以及文件上传功能。在本文中,...

    http通信及servlet介绍

    在IT行业中,网络通信是构建分布式系统的基础,而HTTP(超文本传输协议)与Servlet则是其中的重要组成部分。本文将深入探讨HTTP通信以及Servlet接口,并结合Android客户端进行实践讲解。 首先,HTTP是互联网上应用...

    Android-使用HttpURLConnection实现断点续传

    本文将详细介绍如何利用HttpURLConnection实现Android应用中的断点续传功能。 首先,理解断点续传的概念。断点续传是指当下载或上传文件过程中因网络问题中断后,可以从上次中断的位置继续进行,而不是重新开始。这...

    本示例使用HttpUrlConnection实现上传文件

    在Android开发中,有时我们需要将本地的文件...通过理解以上步骤和注意事项,开发者可以有效地利用HttpURLConnection在Android应用中实现代理文件上传功能。同时,了解服务器端如何接收和处理这些文件也是至关重要的。

    安卓+servlet实现上传下载图片

    在Android客户端,我们需要使用HttpURLConnection或OkHttp库来发起HTTP请求,与Servlet进行通信。当用户选择图片后,我们可以通过Intent获取到图片的URI,然后读取图片文件并转换为字节数组。接着,将这些字节数据...

    tomcat与web程序结构与Http协议与HttpUrlConnection.pdf

    6. Web应用在Tomcat上的部署: - 默认部署目录是`webapps`。 - 访问某个应用的URL格式为:`http://localhost:8080/应用名/资源路径`。 7. HTTP响应: - 包括响应头、响应正文和协议版本号,不包括响应状态行...

    applet与servlet的网络通信

    5. **使用WebSocket进行双向通信**:如果需要实时通信,如聊天室或游戏应用,`Applet`可以利用WebSocket协议与`Servlet`建立持久连接,实现实时数据交换。 在实际应用中,为了安全性和性能考虑,通常会限制`Applet`...

    Servlet简单应用示例

    在本示例中,我们将深入理解Servlet的简单应用,包括其工作原理、创建过程以及如何与客户端进行交互。 首先,Servlet是Java的一个接口,位于javax.servlet包中。开发人员需要实现Servlet接口或继承HttpServlet类来...

    HttpURLConnection文件下载\httpURLConnection文件下载

    在Java中,如果需要从网络上下载文件,`HttpURLConnection`是一个常见的选择,它提供了与HTTP服务器进行通信的能力,包括发送请求、接收响应以及读取返回的数据。在给定的代码片段中,展示了如何使用`...

    Android与servlet交互

    在Android应用开发中,与服务器进行数据交互是常见的需求,而Servlet是一种在Java Web服务器上运行的组件,常用于处理客户端请求并返回响应。本文将详细介绍Android如何与Servlet进行交互,以及服务器端HTML代码在...

    java实现多次HttpURLConnection共享session

    总结来说,Java实现多次HttpURLConnection共享session的关键在于正确处理Cookie,保存服务器返回的Session ID,并在后续请求中携带这个ID。通过这种方式,即使没有浏览器环境,也能模拟登录状态,爬取登录后的内容。...

    使用HttpUrlConnection实现上传文件 服务器端代码

    在Java编程环境中,当需要与Web服务器交互,例如上传文件时,`HttpURLConnection`是一个常见的选择,因为它提供了灵活且高效的方式。本篇文章将详细讲解如何使用`HttpURLConnection`实现文件上传,同时涉及到服务器...

    Android与servlet服务器交互

    在IT行业中,Android和Servlet之间的交互是移动应用开发中常见的技术组合。Android是谷歌推出的开源移动操作系统,广泛用于智能手机和平板电脑,而Servlet是Java Web编程的重要组成部分,用于构建动态Web服务。本...

    Android和servlet交互的用户登录演示例子

    1. **Android网络请求库**:在Android应用中,我们通常不直接使用低级的Socket API来实现网络通信,而是选择一些高级的网络库,如`HttpURLConnection`(原生API)、`Volley`、`Retrofit`或`OkHttp`。本示例可能使用...

Global site tag (gtag.js) - Google Analytics