【Java】基于敏捷开发的简易Web服务器(附下载)

这是一款简易的Web服务器,使用JavaSE的基本工具,实现了主页、404页面、登录、注册、动态页面等最原始的功能。

github地址:https://github.com/541380000/Easy-Web-Server-Java

        通过敏捷开发的方式,14个小版本快速更迭,能够看到代码的快速变化与结构调整。

        项目实现的具体功能有:

1、对Http请求的解析、基本的Http响应的发送

2、多线程接收Http请求,进行响应

3、针对不同的业务请求,将具体的servlet业务处理类与服务器代码分开,将动态数据和静态页面模板分开,大大减小了耦合

4、支持中文编解码,能够使用thymeleaf生成动态网页

下面是项目后期版本的结构:

Java代码:

【Java】基于敏捷开发的简易Web服务器(附下载)_第1张图片

网页代码及配置文件:

【Java】基于敏捷开发的简易Web服务器(附下载)_第2张图片

下面是14个版本具体进行的工作:

 

版本号 包名 添加类 该版本实现的功能
1.0 com.webserver.core WebServer.java 程序入口,在主函数中,初始化整个服务器所需的类,并开始监听Http请求
ClientHandler.java 客户端响应类,该类将开启端口,监听TCP连接请求。连接成功时,将接收Http请求,根据Http请求所请求的资源,转向Servlet处理业务,或者转向其他资源
com.webserver.http HttpRequest.java Http请求类,客户端类接收到Http请求时,在这里进行处理。实现了接收Http请求行,Http消息头,消息体。
HttpRespond.java Http响应类,返回一个固定的文件"1.txt"
2.0 com.webserver.core ClientHandler.java 加入了当找不到资源时,返回固定的404页面
3.0 com.webserver.core ClientHandler.java 加入了对主页请求(main.html)的响应,由于加载一个页面需要多次请求,所以,将原来的只响应一次Http请求,改为在多个线程中响应多次Http请求
4.0&5.0 com.webserver.http HttpContext.java 新建该类。HTTP协议规定了某种特定类型文件对应的响应头的content-type,在发送特定类型响应时,应该修改该属性。这个类中包含一个映射,可以将文件后缀名映射到content-type属性的值
com.webserver.exception EmptyHttpRequestException.java 新建了空请求异常类,当接收到空请求时,抛出异常不响应,解决了空请求问题
6.0 com.webserver.http HttpContext.java 通过Tomcat服务器提供的web.xml文件,把所有类型文件对应的Content-Type导入
通过Dom4J的SAXReader解析XML,实现了大部分后缀名到content-type的映射
7.0 webapps/myweb文件夹 reg.html 注册页面,用到表单和表格
8.0 com.webserver.servlet RegServlet.java 服务器通过request得到用户提交的数据并保存,需要提前判断用户是否已经存在。响应客户端注册结果页面(包括注册成功,用户名已存在)
9.0 com.webserver.http HttpRequest.java 解决URL中,中文传递时的编码问题,HTTP协议的传输内容只能按照ISO8859-1字符集编码,不能包含中文,浏览器的做法一般是将字符按照UTF-8转换成3个字节,将每个字节以%XX的形式发送,因此在服务端请求解析类需要先将16进制转化成二进制,再进行UTF-8的解码
10.0 webapps/myweb文件夹 login.html 登录界面和登录结果返回页面
login_success.html
login_fail.html
com.webserver.servlet LoginServlet.java 获取登录信息,与数据库比对,成功则响应成功login_success.html,否则响应失败login_fail.html
11.0 com.webserver.servlet HttpServlet.java 重构代码,新建HttpServlet类,将所有公共代码放入其中。所有业务处理的Servlet都继承该类
com.webserver.http HttpRequest.java 加入对登录时,输入用户名和密码时post方式提交数据的支持
12.0 com.webserver.servlet ShowAllUserServlet.java 实现thymeleaf的动态网页支持,能够根据数据库内容,显示所有用户的信息。修改主页,将所有已完成的网页内容加入主页
13.0 com.webserver.core ServletContext.java 加入反射,能够动态的根据请求的业务,实例化Servlet。将业务与对应的Servlet放在xml文件中,大大减小了业务代码和web容器代码的耦合性。在ServletContent类中放置静态map,实现请求路径到servlet的映射。
14.0 com.webserver.core ClientHandler.java 将独立的多线程并发改为线程池并发

个人作品,请勿转载

你可能感兴趣的:(Java课程设计,java,java)