java web 之间通信_Java web做服务器之间的通信方法

我们都知道用socket通过TCP,或UDP协议连接不同的机器进行通信,做个客服端服务器端,用阻塞监听来接受发送的信息。现在我说的是不直接用socket连接来通信,而是Java.net包里有个抽象类URLConnection,

它代表应用程序和 URL 之间的通信链接。此类的实例可用于读取和写入此 URL 引用的资源。通常,创建一个到 URL 的连接需要几个步骤:

openConnection()

connect()

对影响到远程资源连接的参数进行操作。

与资源交互;查询头字段和内容。---------------------------->

时间

通过在 URL 上调用 openConnection方法创建连接对象。

处理设置参数和一般请求属性。

使用 connect方法建立到远程对象的实际连接。

远程对象变为可用。远程对象的头字段和内容变为可访问。

使用以下方法修改设置参数:

setAllowUserInteraction

setDoInput

setDoOutput

setIfModifiedSince

setUseCaches

使用以下方法修改一般请求属性:

setRequestProperty

使用 setDefaultAllowUserInteraction和 setDefaultUseCaches可设置 AllowUserInteraction和 UseCaches参数的默认值。 上面每个 set方法都有一个用于获取参数值或一般请求属性值的对应 get方法。适用的具体参数和一般请求属性取决于协议。 在建立到远程对象的连接后,以下方法用于访问头字段和内容:

getContent

getHeaderField

getInputStream

getOutputStream

某些头字段需要经常访问。以下方法:

getContentEncoding

getContentLength

getContentType

getDate

getExpiration

getLastModifed

提供对这些字段的便捷访问。getContent方法使用 getContentType方法以确定远程对象类型;子类重写 getContentType方法很容易。 一般情况下,所有的预连接参数和一般请求属性都可忽略:预连接参数和一般请求属性默认为敏感值。对于此接口的大多数客户端而言,只有两个需要的方法:getInputStream和 getContent,它们通过便捷方法镜像到 URL类中。 有关 http连接的请求属性和头字段的更多信息,可从以下位置找到:

有关 fileNameMap的注意事项:在 JDK 1.1.6 以前的版本中,URLConnection的 fileNameMap字段是公共的。在 JDK 1.1.6 及以后的版本中,fileNameMap字段是私有的;对其添加了 accessor 方法和 mutator 方法 getFileNameMap及 setFileNameMap以便访问。Compatibility 页中也对此更改进行了介绍。 完成请求后,在一个 URLConnection 的 InputStream 或 OutputStream 上调用 close() 方法可以释放与此实例相关的网络资源,除非特定的协议规范为其指定了其他行为。

具体方法和属性查看相关的api文档。它有两个子类HttpURLConnection, JarURLConnection ,它的底层实现就是socket来完成的 ,现在我们来看看子类HttpURLConnection写的一个实例。

public void synchronizeOthersServer() throws BoException {

String[] ips = StringUtil.split(appServers, "|");

// 同步其他服务器的html文件

try {

for (String ip : ips) {

URL url = new URL("http://" + ip + SYCHRONIZED_URL);

HttpURLConnection conn = (HttpURLConnection) url

.openConnection();

conn.setDoOutput(true);

conn.setRequestMethod("POST");

String param = "ipAndport=" + ip;

// conn.setConnectTimeout(CONNECT_TIMEOUT);

// conn.setReadTimeout(READ_TIMEOUT);

conn.connect();

OutputStream out = conn.getOutputStream();

out.write(param.getBytes());

out.flush();

out.close();

if (conn.getResponseCode() >= 400) {

throw new BoException("同步服务器前台左边菜单树html文件异常:" + ip);

}

}

} catch (Exception e) {

throw new BoException("同步服务器文件超时,请稍后再试!");

}

}

用这种方法做同步不是个好方法,但是这的确是一种解决同步的方案。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值