超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web ConsorTIum)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。
javaJava是一门面向对象编程语言,不仅吸收了C++++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。
JAVA实现简易HTTP服务器搭建一个服务器,要能接收请求,并给浏览器返回正确响应。
项目的下载地址
项目目标:实现一个简易的多线程服务器,可以处理来自浏览器的请求(GET/POST),并做出正确的回应。
请求分以下四种类型:
1. 无参数,文本文件类型
2. 无参数,图片文件类型
3. 有参数,GET方式请求,并完成表单验证(登陆验证)
4. 有参数,POST方式请求,并完成表单验证(登陆验证)
首先,应该明确这个项目的基本实现原理,从浏览器读入用户请求的信息,服务器解析并记录返回的文件名和参数列表,如果文件存在,用流读取文件,并返回到浏览器上,如果不存在,返回相应的提示信息,参数列表和服务器存储的相同的话,返回登陆成功,否则返回失败。
第一步,既然要解析从浏览器传过来的信息,那就要明白传过来信息的所使用的协议HTTP\UDP\FTP 和 URL的组成元素,因为是简易服务器,我们就只解析HTTP协议先。
Request是指从客户端到服务器端的请求消息
Request 消息分为3部分,第一部分叫请求行, 第二部分叫http header, 第三部分是body. header和body之间有个空行,结构如下图
Method表示请求方法,比如”POST”,”GET”,
Path-to-resoure表示请求的资源,
Http/version-number 表示HTTP协议的版本号,
当使用的是”GET” 方法的时候, body是为空的,当使用”POST”,body不为空,但是没有换行,readline()方法不能读
Response是指服务器端到客户端的响应信息
和Request消息的结构基本一样。 同样也分为三部分,第一部分叫request line, 第二部分叫request header,第三部分是body. header和body之间也有个空行, 结构如下图
状态码用来告诉HTTP客户端,HTTP服务器是否产生了预期的Response. HTTP/1.1中定义了5类状态码,1XX 提示信息 - 表示请求已被成功接收,继续处理;2XX 成功 - 表示请求已被成功接收,理解,接受;3XX 重定向 - 要完成请求必须进行更进一步的处理;4XX 客户端错误 - 请求有语法错误或请求无法实现;5XX 服务器端错误 - 服务器未能实现合法的请求,当然不写也是可以得,状态码就是便于程序员去分析当前页面是正确响应还是错误的。
第二步,在了解URL和HTTP协议之后,就可以开始构建项目了。
目前这个项目的UML图
第三步,准备文本、图片、HTML文件,然后开始编编编
效果图:(端口号:23333)2333…
默认访问
aaron.txt
a.jpg
GET/POST请求
注意地址栏的变化
login.html(GET)
login.html(GET) (登陆失败情况)
login.html(GET) (登陆成功情况)
login.html(POST)
login.html(POST) (登陆失败情况)
login.html(POST) (登陆成功情况)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)