java 推技术_Java基础-Java中的”推”技术

本文介绍了B/S程序中HTTP协议的工作方式及带来的问题,引出“推”技术。阐述了Java中“拉”与“推”的概念,说明了“推”技术原理。还讲解了HTTP协议关键格式,给出简易web服务器示例代码及编译运行方法,最后提及扩展可实现无刷新聊天室。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在一般的B/S程序中(最典型的是web服务),工作的方式是客户端(brower)向服务器端(server)发送一个请求,服务器端响应这个请求并发回客户端所请求的数据。在这个过程中服务器端扮演的是一个被动响应的角色,一般的情况下,服务器端是不会主动向客户端写数据的。由于HTTP是一个无连接的协议,也就是说当服务器端完成对客户端的响应后,双方的连接就断开了,直到下一次客户端发出请求时再重新建立连接。这样的HTTP协议是节省网络资源的,但是也给我们带来了一些麻烦,比如客户端不能实时探查服务器端的数据变化,不能作出及时的响应。所以当我们在做一些需要客户端和服务器端互相响应的程序时(比如聊天室、web短信息),不得不在客户端不停的刷新页面,以求获得最新的数据,这样做增加的服务器的负担。如果服务器能在数据发生变化的时候主动向客户端写数据,那么问题就解决了,这就是所谓的“推”技术。

在java中,客户端主动向服务器端申请数据,叫做“拉”;服务器主动向客户端写数据,叫做“推”。我们可以在服务器端打开某个端口,监听客户端的连接,就可以向客户端随意写数据,这是我们做C/S程序的原理,“推”技术采用相同的原理,只是客户端是浏览器而已,只要我们按照浏览器能够识别的格式向客户端写数据,客户端就可以通过HTTP与服务器建立连接,并获得数据。

HTTP是一个很庞大的协议,但是我们只需要用到很小一部分。最重要的是要知道按照什么格式写数据,浏览器才认识。当我们浏览一个网站的某一页,比如www.sohu.com/page.htm的时候,我们是在向服务器发送这样一个信息:

GET /page.htm HTTP/1.0

From: someuser@somehost.com

User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT 5.0; DigExt)

空行

其中第一行是我们要关注的,它由空格分隔成三部分,一是请求的方法(get),二是请求的页面,三是HTTP的版本。如果请求无误,服务器将返回如下信息:

HTTP/1.0 200 OK

Date: Thu, 8 Oct 2002 14:23:11 GMT

Content-Type: text/html

Content-Length: 1644

<html>

<body>

<h1>Hello world!</h1>

(其他内容)...

</body>

</html>

第一行表示连接成果,然后是返回数据的属性,从开始才是返回给浏览器返回的数据。在我们自己的程序中只需要按照上述格式写数据,就可以实现一个自己的简易web服务器。下面是一个hello,world的例子:

//myServer.java

import java.io.*;

import java.net.*;

public class myServer

{

static ServerSocket server=null;

static OutputStreamWriter ow=null;

public static void main(String args[])

{

int port=800;

try

{

server=new ServerSocket(port);

}catch(Exception e)

{

System.out.println(e);

}

while(true)

{

try

{

Socket socket=server.accept();

ow=new OutputStreamWriter(socket.getOutputStream());

ow.write("HTTP/1.0 200 ok ");

ow.write("Content-Type:text/html ");

ow.write("");

ow.write("hello,world");

ow.write("");

ow.flush();

socket.close();

}catch(Exception e)

{

System.out.println(e);

}

}

}

}

编译:javac myServer.java

运行:java myServer

然后打开浏览器,输入

0818b9ca8b590ca3270a3433284dd417.pnghttp://localhost:800,将会返回一个”hello,world”  以上就是一个“推”技术的简单实现,将它扩展一下,比如加入多线程响应,就可以实现无刷新的聊天室,请读者自己考虑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值