【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代码:

网页代码及配置文件:

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

 

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

个人作品,请勿转载

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值