网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.Eclipse 插件EclipseShell&.
.实战角度比较EJB2和EJB3的架构异.
.Java新手常犯的几种错误.
.Java 10年回顾:世界各地开发高手.
.X3D实战基础讲座之八.
.Nokia UI学习范例FishTank研究.
.fsck的详细用法.
.使用 ConTest 进行多线程单元测试.
.2004开发技术年度综述之Java世界.
.Java本纪之J2SE发展演变史.
.将DBMS存储过程封装为会话EJB组件.
.ceil 方法.
.给.NET中的Windows窗体加载Xp样式.
.高级应用——Java动态的程序设计.
.SWT/JFace入门指南之加速开发.
.我的RMI实践.
.为什么很多Java开发人员都对JCP感.
.一些面向对象的设计法则(3).
.诊断Java代码:设计轻松的代码维护.
.JBuilder7+Weblogic7+mysql 开发.

Java实现Http服务器之一

发表日期:2008-1-5


    本文将具体介绍如何基于Java语言实现一个简单的Http服务器,文中将主要介绍三个方面的内容:
1)Http协议的基本知识
2)java.net.Socket类
3)java.net.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.1
Accept: 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 OK
Server: Microsoft-IIS/4.0
Date: Mon, 3 Jan 1998 13:13:33 GMT
Content-Type: text/html
Last-Modified: Mon, 11 Jan 1998 13:23:42 GMT
Content-Length: 112

something  in html style......................
通常在J2ME联网中我们需要判定响应的状态码来决定下一步的操作,比如200代表连接成功。现在你应该清楚为什么这么做了吧。同样在Header和Entity body中有一个CRLF分割。

    现在我们来看看java中的Socket类,socket其实是对编程语言的一种抽象,它提供了在网络上端对端访问的可能,但是它并不依靠于编程语言,你完全可以使用java和c语言通过socket来进行通信,在java中是通过java.net.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通信的代码片断,实现了向127.0.0.1:8080发送Http请求的功能


上一篇:Java学习资源推荐 人气:753
下一篇:Java实现Http服务器之二 人气:1307
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐