|
42 | 42 |
|
43 | 43 | ## 1 请求报文、响应报文的实现 |
44 | 44 |
|
45 | | -**见Message包里的Request类和Response类** |
| 45 | + |
| 46 | + |
| 47 | +**报文类对报文数据进行封装,对成员变量提供get(),set()方法,并提供静态方法去创建或解析报文** |
| 48 | +```java |
| 49 | +public static Request parseRequest(InputStream reqStream) throws IOException; |
| 50 | +public static Response buildResponse(Request request); |
| 51 | +``` |
| 52 | +**实现send()方法,接受一个OutputStream的参数,用于将报文序列化并发送 |
| 53 | +```java |
| 54 | +public void send(OutputStream out) throws IOException; |
| 55 | +``` |
46 | 56 |
|
47 | 57 | ## 2 服务器 |
48 | 58 |
|
49 | | -**HttpServer类通过静态方法start()实例化一个ServerSocket监听指定端口(default:8080) |
50 | | -,每当收到一个连接请求,将该次请求封装成一个HttpTask对象,实现Runnable接口多线程,以支持同时有多个http请求** |
| 59 | +**HttpServer类通过静态方法start()实例化一个ServerSocket监听指定端口(default:8080)** |
| 60 | +**,每当收到一个连接请求,将该次请求封装成一个HttpRequestHandler对象,实现Runnable接口多线程,以支持同时有多个http请求** |
| 61 | + |
| 62 | + |
51 | 63 |
|
52 | 64 | ## 3 客户端 |
53 | 65 |
|
54 | 66 | ### 1 GET方法用于获取服务器目录下的资源,url为相对路径 |
55 | 67 |
|
| 68 | +```java |
| 69 | +public void get(String url); |
| 70 | +``` |
| 71 | + |
56 | 72 | ### 2 POST方法用于向服务器提交数据,在本项目中仅实现提交账号密码,与注册登陆有关 |
57 | 73 |
|
| 74 | +```java |
| 75 | +public void post(String url, String user_name, String password); |
| 76 | +``` |
| 77 | + |
58 | 78 | ## 4 状态码 |
59 | 79 |
|
60 | 80 |  |
61 | 81 |
|
| 82 | +**详见JsonReader类** |
| 83 | + |
62 | 84 | ## 5 资源管理 |
63 | 85 |
|
64 | | -**sever的资源在HttpSever/webRoot目录下,各资源状态用json文件保存** |
65 | | -**client的缓存在HttpClient/cache下,也用json文件保存状态** |
| 86 | +**server的资源在resources/webRoot目录下,各资源状态用json文件保存,用javaBean类与json文件互转来管理资源** |
| 87 | + |
| 88 | +>运用了alibaba的fastjson,hutool等第三方工具包,maven依赖关系如下 |
| 89 | +
|
| 90 | +```java |
| 91 | +<dependency> |
| 92 | + <groupId>com.alibaba</groupId> |
| 93 | + <artifactId>fastjson</artifactId> |
| 94 | + <version>2.0.20</version> |
| 95 | +</dependency> |
| 96 | +<dependency> |
| 97 | + <groupId>cn.hutool</groupId> |
| 98 | + <artifactId>hutool-all</artifactId> |
| 99 | + <version>5.8.10</version> |
| 100 | +</dependency> |
| 101 | +``` |
66 | 102 |
|
67 | 103 | ## 6 长连接 |
68 | 104 |
|
| 105 | +### 1 HttpTask类里设置一个最大时间跨度,超过时间未请求,则服务器关闭socket |
| 106 | + |
| 107 | +```java |
| 108 | + private static final int MAX_GAP=30000;//不发消息的最大时间跨度 |
| 109 | +``` |
| 110 | + |
| 111 | +### 2 实例化HttpClient对象时在构造函数中建立socket连接,每次get()或post()时进行异常检测,若server端的socket已关闭,则重新建立socket连接 |
| 112 | + |
| 113 | +```java |
| 114 | +public void get(String url) { |
| 115 | + try { |
| 116 | + //进行get()操作 |
| 117 | + } catch (IOException ex) { |
| 118 | + try { |
| 119 | + client = new Socket(hostname, port); |
| 120 | + System.out.println("超时,重新建立连接!"); |
| 121 | + System.out.println("连接到主机:" + hostname + " ,端口号:" + port); |
| 122 | + System.out.println("远程主机地址:" + client.getRemoteSocketAddress()); |
| 123 | + get(url); |
| 124 | + } catch (Exception e) { |
| 125 | + e.printStackTrace(); |
| 126 | + } |
| 127 | + } |
| 128 | + } |
| 129 | +``` |
69 | 130 | ## 7 MIME类型 |
70 | 131 |
|
| 132 | +**MIME中存储一张表,通过 getMimeType() 提供文件扩展名到报文头部 "Content-Type" 的映射** |
| 133 | + |
| 134 | +```java |
| 135 | +public String getMimeType(String Uri); |
| 136 | +``` |
| 137 | + |
71 | 138 | ## 8 登陆的实现 |
72 | 139 |
|
73 | 140 | --- |
|
76 | 143 |
|
77 | 144 | **https://www.cnblogs.com/chris-cp/p/5082514.html** |
78 | 145 | **https://blog.csdn.net/YaoLang1995/article/details/89316912** |
79 | | - |
80 | | -* |
81 | | - |
82 | | -*https://blog.csdn.net/linhao_obj/article/details/120767149?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-2-120767149-blog-89316912.pc_relevant_3mothn_strategy_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-2-120767149-blog-89316912.pc_relevant_3mothn_strategy_recovery&utm_relevant_index=3 |
83 | | -** |
| 146 | +**https://blog.csdn.net/linhao_obj/article/details/120767149?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-2-120767149-blog-89316912.pc_relevant_3mothn_strategy_recovery&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-2-120767149-blog-89316912.pc_relevant_3mothn_strategy_recovery&utm_relevant_index=3** |
84 | 147 | **https://blog.csdn.net/weixin_42316952/article/details/114081588** |
85 | 148 | **https://developer.mozilla.org/zh-CN/docs/Web/HTTP** |
86 | 149 | **https://zhuanlan.zhihu.com/p/388270712** |
|
0 commit comments