java的服务器项目
最近用javaSE的知识模拟了一个服务器,下面是文档和源代码地址,有兴趣的萌新可以拿去参考参考,码云地址:https://gitee.com/zou0jin/java_server_project## Java服务器实验项目
码云:(https://gitee.com/zou0jin/java_server_project.git)
### 项目功能与要求
* 多线程服务器(端口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将文件写出到浏览器
* 用try()自动关流
* 用Properties类写配置文件
* 通过请求数据用反射来创建对象
页:
[1]