全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java实现Http服务器之一 本文将详细介绍如何基于java语言实现一个简单的Http服务器,文中将主要介绍三个方面的内容:1)Http协议的基本知识2).Socket类3).ServerSocket类读完本文后你可以把这个服务器用多线程的技术重新编写一个更好的服务器。 由于Web服务器使用Http协议通信的因此也把它叫做Http服务器,Http使用可靠的TCP连接来工作,它是面向连接的通信方式,这意味着客户端和服务器每次通信都建立自己的连接,它又是无状态的连接,当数据传输完毕后客户端和服务器端的连接立刻关闭,这样可以节省服务器的资源,当然如果需要传输大量的数据,你可以在Request的头设置Connection=keep-alive使得可以复用这一个连接通道。在HTTP协议中非常重要的两个概念就是:请求(Request)和(响应)这也是我在这里要讲述的如果你想了解Http更多的内容那么请参考RTF2616。 一个Http请求包括三个重要的部分:1)Method-URI-Protocol/Version 2)Request headers 3)Entity body 下面是一个Http请求的例子:POST /servlet/default.jsp HTTP/1.1Accept: text/plain; text/html Accept-Language: en-gb Connection: Keep-Alive Host: localhost Referer: http:/localhost/ch8/SendDetails.htm User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98) Content-Length: 33 Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate LastName=Franks&FirstName=Michael 其中第一行是Method-URI-Protocol/Version ,这是非常重要的部分,你需要从中读取客户端数据传输的方式,URI以及协议和版本,在这里分别是POST / servlet/default.jsp http/1.1,我们的简单的服务器的思路就是从request中得到URI后在你的服务器上找到这个资源,比如是一个静态的html页面,然后把它发送给浏览器。记住URI是相对于你的HTTP服务器的根目录的,所以以/来开头。接下来的部分是请求头信息它们都是以name:value这样的方式构成的,这里不再多介绍了。在Header和Entity body之间有一空行叫做CRLF,这用来标记Entity body的开始的,意思是下面的是传输的数据了。 HTTP响应和请求非常相似,同样包括三个部分:1)Protocol-Status code-Description 2)Response headers 3)Entity body 下面是一个具体的例子:HTTP/1.1 200 OKServer: Microsoft-IIS/4.0Date: Mon, 3 Jan 1998 13:13:33 GMTContent-Type: text/htmlLast-Modified: Mon, 11 Jan 1998 13:23:42 GMTContent-Length: 112something in html style.通常在J2ME联网中我们需要判断响应的状态码来决定下一步的操作,比如200代表连接成功。现在你应该清楚为什么这么做了吧。同样在Header和Entity body中有一个CRLF分割。 现在我们来看看java中的Socket类,socket其实是对编程语言的一种抽象,它提供了在网络上端对端访问的可能,但是它并不依赖于编程语言,你完全可以使用java和c语言通过socket来进行通信,在java中是通过.Socket来实现的,当你要构建一个socket的时候,你只是需要调用它的构造器public Socket(String host,int port),其中host代表目标主机的地址或名字,port代表端口,比如80。当我们创建了一个Socket的实例后我们就可以进行通信了,如果你要基于字节来通信,那么你可以通过调用getOutputStream()和getInputStream()来得到OutputStream和InputStream的对象,如果你是基于字符通信的话那么你可以用PrintWriter和BufferedReader进行二次包装,例如PrintWriter pw = new PrintWriter(socket.getOutputStream(),true)。下面是简单的使用socket通信的代码片断,实现了向:8080发送Http请求的功能Socket socket = new Socket(, 8080);OutputStream os = socket.getOutputStream();boolean autoflush = true;PrintWriter out = new PrintWriter( socket.getOutputStream(), autoflush );BufferedReader in = new BufferedReader( new InputStreamReader( socket.getInputStream() );/ send an HTTP request to the web serverout.println(GET /index.jsp HTTP/1.1);out.println(Host: localhost:8080);out.println(Connection: Close);out.println();/ read the responseboolean loop = true;StringBuffer sb = new StringBuffer(8096);while (loop) if ( in.ready() ) int i=0; while (i!=-1) i = in.read(); sb.append(char) i); loop = false; Thread.currentThread().sleep(50);/ display the response to the out consoleSystem.out.println(sb.toString();socket.close(); 接下来介绍与Socket类对应的ServerSocket类的使用,与Socket代表客户端不同的是,ServerSocket是代表服务器端的,因为它必须在某个端口不停的监视是否有客户端连接进来。通过调用ServerSocket的构造器我们可以建立起监听特定端口的Server。例如new ServerSocket(8080, 1, InetAddress.getByName();这样我们在本机的8080端口建立起来了ServerSocket。当你调用ServerSocket的accept()方法后,只有有连接进来的时候,这个方法才会返回一个Socket的对象,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年中国挤压铝管行业市场前景预测及投资价值评估分析报告
- 2026年中国盲人卫生巾行业市场规模及投资前景预测分析报告
- 2026年中国硫含量测定器行业市场前景预测及投资价值评估分析报告
- 2025江苏宿迁产发商业保理有限公司业务部客户经理招聘1人考试笔试模拟试题及答案解析
- 2026中国铁路广州局集团有限公司招聘普通高校毕业生682人(二)笔试考试备考试题及答案解析
- (人教2024版)英语八年级上册Unit 6 大单元教学设计(新教材)
- 佛山市城市供用水合同2025年合同履行监督报告审核
- 2026年防城港职业技术学院单招职业技能考试题库新版
- 2026年宁夏职业技术学院单招职业适应性测试题库附答案
- 2026年河北省承德市单招职业适应性考试题库及答案1套
- 5G通信模块设计项目分析方案
- 汽车维修入股协议合同
- 教育家精神课件
- 2025年四川教师公招《教育公共基础知识》试题答案
- 2026蒙牛「星动力」校园招聘笔试考试参考试题及答案解析
- 2025年机械行业安全生产考试题库(行业安全规范试卷)
- 教师职业发展规划与晋升路径解析
- 2025年实验室检验质控知识考试试题及答案解析
- 2025贵州毕节市中级人民法院招聘聘用制法官助理30人考试参考题库及答案解析
- 医院地震疏散培训
- 4.11 拧螺丝 课件 2025-2026学年科学二年级上册苏教版
评论
0/150
提交评论