项目二:HTTP服务器

来源:互联网 发布:软件安装权限 编辑:程序博客网 时间:2024/06/06 05:12
项目二:HTTP服务器

(在学习servlet技术和使用Tomcat之前,熟悉其底层基本原理。)

HTTP服务器采用请求-响应模式,即一个请求对应一个响应。
本篇博客将介绍该项目的基本思路,具体实现代码,可访问博主的github: https://github.com/EdsonUnique。

工欲善其事,必先利其器。需掌握:

1 掌握HTTP协议
2 掌握IO流
3 网络编程
4 多线程
5 反射
6 xml文档及解析(用到的是dom4j解析)


基本思路:

① 核心包:

Server类:服务器端,启动和关闭服务器;处理多线程逻辑编码,定义的方法:start(),stop()。Request类:获取请求信息,分析并存储请求参数或请求正文。Response类:封装响应信息,并输出。Dispatcher类:多线程处理并发操作。WebApps类:存放uri和Servlet类的映射关系;解析xml文档ServletContext类:根据不同的uri调用不同的Servlet响应

② Servlet包:

Servlet类:抽象父类,封装响应正文。LoginServlet类,RegisterServlet类:继承Servlet类。可添加其它子类,并在xml文档中配置。

③ 工具包:

CloseUtils类:关闭操作(流,客户端,服务器端)

④ 解决中文乱码问题: URLDecoder类


HTTP知识总结:

1 HTTP请求

三部分组成:1)请求行:请求方式 uri(get方式有参数) 协议版本          2)请求头:Accept, Host,Connection,Accept-Encoding等等          3)请求正文:post方式才有。注意请求头与请求正文之间有空行。

2 HTTP响应

三部分组成:1)状态行:协议版本 状态码 状态描述          2)响应头:Content-Type,Content-Length,Location等等          3)响应正文:html语言等;注意响应头与响应正文之间有空行。

3 常见的响应状态码:

200:响应成功302:重定向资源,与Location响应头使用303、304:获取缓存资源404:文件不存在405:服务器不支持客户的请求方式500:服务器内部错误

4 几点注意

1)封装Request和Response时,注意get/post方式的格式不同,注意空行问题。2)响应头中的Content-Length指的是响应正文的字节长度而非字符长度。