- 不允许基于netty等框架,完全基于Java Socket API进行编写
- 不分区使用的IO模型,BIO、NIO和AIO都可以
- 实现基础的HTTP请求、响应功能,具体要求如下: 3.1 HTTP客户端可以发送请求报文、呈现响应报文(命令行和GUI都可以) 3.2 HTTP服务器端支持GET和POST请求 3.3 HTTP服务器端支持200、301、302、304、404、405、500的状态码 3.4 HTTP服务器端实现长连接 3.5 MIME至少支持三种类型,包含一种非文本类型 4.基于以上的要求,实现注册,登录功能(数据无需持久化,存在内存中即可,只需要实现注册和登录的接口,可以使用postman等方法模拟请求发送,无需客户端)。
- https://docs.oracle.com/javase/tutorial/networking/sockets/index.html
- http://www.runoob.com/java/java-networking.html
- https://tools.ietf.org/html/rfc2616
重要:请助教和老师在使用本项目之前清空浏览器缓存,因为使用了cookie,未清空浏览器缓存可能会导致一些异常情况的出现
本项目所用门户、登录、注册界面的源码均来自网络开源项目
本项目基于java Socket API
进行开发,运行HttpServer
中的主类或者直接运行根目录下的jar包。会自动启动系统默认浏览器并打开门户网站,等待用户进行选择,所有页面罗列如下:
使用过程中有网站自动跳转逻辑,但是使用自动跳转的都是状态码为200的页面,有以下页面存在跳转逻辑
-
"User not found, try register first"页面会在3秒之后跳转到登陆界面
-
"Login Success"页面会在4秒之后跳转到门户网站
-
"Wrong Password"页面会在4秒之后跳转到登陆界面
-
"User already exist"页面会在3秒之后跳转到注册页面
-
"Register Success"页面会在4秒之后跳转到登陆页面
测试各项功能可通过直接访问门户网站点击相应的按钮进行操作,不必一项项访问上述表格中的网址
门户网站用于测试本http服务器的所有对应需求功能,主体为一操作列表
操作列表包含注册和登录操作、几种特殊的状态码以及传输MIME类型
注册操作包含成功注册(Register Success) 和用户已存在(User already exist)两种状态,其中用已存在的用户名重新注册会触发用户已存在状态,呈现相应的效果
登录操作包括成功登录(Login Success)、用户不存在,请先注册(User not found, try register first)、密码错误(Wrong Password)三种状态,其中用未注册过的用户名和密码登录触发用户不存在状态,用已注册的用户名和错误密码登录触发密码错误状态,呈现相应效果
各操作码对应的效果详情参见下方介绍
MIME详情参见下方介绍
GET用于请求和显示各网页内容,POST用于登录和注册表单内容的提交,故GET请求和POST请求未直接在操作列表中列出
除门户网站上相应的特殊状态码之外,所有网页状态码均为200,即成功处理请求,并显示与各网址对应的网页内容
自动跳转百度
自动跳转百度
第一次进入304测试页面返回状态码200,页面显示"Hello World!";刷新页面,页面仍显示"Hello World!",网页没有进行改动,此时返回状态码304,之后刷新此页面会一直返回状态码304。
会返回一张404的图片,同时告知浏览器404的状态码,在Network中可以进行查看。
无论请求什么端口,只能使用get和post ,不支持其它方法
注意:由于html5只支持get和post请求,这一状态码烦请助教使用postman进行测试,测试方法为使用除get和post以外的其它方法访问上述表格中的网址,会有相应的response结果
注册账号的时候用户名不得超过八位,用户名不得为空,密码不能为空,否则会引发服务器内部错误。返回的状态码为500
本服务器支持三种MIME类型:text/html,text/plain和image/jpeg(非文本)
响应GET请求在response的body部分传输和显示各网址对应的网页内容对应text/html类型,故该类型未直接在操作列表中体现
剩余两种类型在操作列表中,点击按钮可获取相应的内容,可自行更改assets中的mime_txt.txt和mime_jpeg.jpg的内容进行测试(请勿擅自更换文件名称)
使用前确保已经清除浏览器的Cookie,或者抓包检查主页的请求标头中是否存在Cookie(测试状态下要求一开始不存在Cookie),检查无误后,注册账号,初次登录需要输入用户名和密码,20秒内再次登录不需要输入用户名和密码,而是直接显示登录成功,20秒后Cookie失效,登录需要输入用户名和密码。(如果测试时发生未注册也能直接登录的情况,基本上是没有按照前面的说明清除Cookie)
"User not found, try register first" 李镔达
"Login Success" 戴俊浩,李镔达
"Wrong Password" 韩茁,戴俊浩
"User already exist" 杜铭哲
"Register Success" 刘瑞麒,戴俊浩
门户网站优化杜铭哲,李镔达
set_cookie杜铭哲
文档戴俊浩