最近用javaSE的知识模拟了一个服务器,下面是文档和源代码地址,有兴趣的萌新可以拿去参考参考,码云地址:https://gitee.com/zou0jin/java_server_project
Java服务器实验项目
码云:java服务器项目源码
项目功能与要求
- 多线程服务器(端口9999),接受服务器的url
- 通过url获取本地文件(图片,html,txt)输出到浏览器
- 引入配置文件(本地文件目录,端口号,文件名),通过配置文件来配置服务器基本信息
- 用get和post表单创建学生对象,记录之后进行登录验证
- 要求封装HttpRequest,HttpResponse ,ProTool
大致思路
第一: 接收url,注意http协议接受信息的格式,提取里面有用的信息
请求行 |
GET /a.txt HTTP/1.1 |
请求头 |
row 1 col 2 |
空格 |
row 2 col 2 |
请求体 |
row 2 col 2 |
如:输入127.0.0.1:9999/a.txt server.accept()接受的信息
GET /a.txt HTTP/1.1
Host: 127.0.0.1:9999
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.90 Safari/537.36 2345Explorer/9.7.0.18838
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.8
对于Get请求我们提取第一行
GET /a.txt HTTP/1.1
但是对于post请求,具体内容在响应体,也就是body中
如输入127.0.0.1:9999/Student?name=leo&password=123的时候接受的数据为,需要的数据不在请求行了,在请求体中
POST /Student HTTP/1.1
Host: 127.0.0.1:9999
Connection: keep-alive
Content-Length: 21
Cache-Control: max-age=0
Origin: null
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.90 Safari/537.36 2345Explorer/9.7.0.18838
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.8
name=leo&password=123
第二:响应到浏览器的HTTP格式
响应行 |
HTTP/1.1 200 ok |
响应头 |
charset=UTF-8 |
空格 |
\r\n |
空格 |
\r\n |
响应体 |
目标文件字节流数据 |
按照上面的格式发送即可
具体实现(用到哪些东西)
- 用Bufferedread读取请求数据
- PrintStream将文件写出到浏览器
- 用Properties类写配置文件
- 通过请求数据用反射来创建对象
|