Skip to content

Commit d0f7687

Browse files
committed
Structure optimized
1 parent 2f187ad commit d0f7687

File tree

10 files changed

+153
-483
lines changed

10 files changed

+153
-483
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,4 @@ css
4646
/Data/Server/*
4747
/Data/Client/*
4848
/Data/Test/*
49+
/out/

README.md

Lines changed: 85 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ Term project for Internet Computing (2022, Spring), aiming to implement HTTP cli
2525

2626
3.1 HTTP客户端可以发送请求报文、呈现响应报文(命令行和GUI都可以)
2727

28-
- [ ] TBD
28+
- [ ] 未完全完成
2929

3030
3.2 HTTP客户端对301、302、304的状态码做相应的处理
3131

32-
- [ ] 未完全完成,未测试
32+
- [x] 通过测试
3333

3434
3.3 HTTP服务器端支持GET和POST请求
3535

@@ -95,10 +95,10 @@ Term project for Internet Computing (2022, Spring), aiming to implement HTTP cli
9595
- [x] POST request
9696
- [ ] Display
9797
- [ ] CLI
98-
- [ ] Status Handler
98+
- [x] Status Handler
9999
- [x] 301 Moved Permanently
100100
- [x] 302 Found
101-
- [ ] 304 Not Modified
101+
- [x] 304 Not Modified
102102

103103
### 1.2.3 Login System (Server only)
104104

@@ -113,84 +113,103 @@ Term project for Internet Computing (2022, Spring), aiming to implement HTTP cli
113113
- [x] Long Connection Test
114114
- [x] Manual Target Handler Test
115115
- [x] Manual MIME Test
116-
- [ ] Client Tests
116+
- [x] Client Tests
117117
- [x] Main Loop
118-
- [ ] Status Handler Test
118+
- [x] Status Handler Test
119119
- [x] Request Test
120120
- [x] Parser and Packer Test
121121
- [x] Content-Length Test
122122
- [x] Chunked Test
123123
- [x] File Tests
124-
- [ ] Login System Tests
124+
- [x] Login System Tests
125125
- [x] Register
126-
- [ ] Login
127-
- [ ] Status
126+
- [x] Manual tests
128127

129128
### 1.2.x Suggestions
130129

131130

132131
## 1.3 代码结构图
133132

134-
Updated on Apr 16, 2022
133+
Updated on May 22, 2022
135134

136135
```
137136
.
138-
├── main
139-
│   ├── java
140-
│   │   ├── client
141-
│   │   │   ├── HttpClient.java
142-
│   │   │   ├── HttpRequestMessage.java
143-
│   │   │   └── StatusHandler.java
144-
│   │   ├── exception
145-
│   │   │   └── InvalidMessageException.java
146-
│   │   ├── server
147-
│   │   │   ├── HttpResponseMessage.java
148-
│   │   │   ├── HttpServer.java
149-
│   │   │   ├── Mapping.java
150-
│   │   │   ├── ResponseMessageFactory.java
151-
│   │   │   ├── TargetHandler.java
152-
│   │   │   └── target
153-
│   │   │   ├── Common.java
154-
│   │   │   ├── Html.java
155-
│   │   │   ├── LoginSystem.java
156-
│   │   │   └── TargetSet.java
157-
│   │   └── util
158-
│   │   ├── Config.java
159-
│   │   ├── HttpMessage.java
160-
│   │   ├── Log.java
161-
│   │   ├── MessageHelper.java
162-
│   │   ├── consts
163-
│   │   │   ├── TransferEncoding.java
164-
│   │   │   └── WebMethods.java
165-
│   │   └── parser
166-
│   │   ├── CustomizedReader.java
167-
│   │   ├── MessageParser.java
168-
│   │   └── transdecode
169-
│   │   ├── ChunkedStrategy.java
170-
│   │   ├── ContentLengthStrategy.java
171-
│   │   ├── DeflateStrategy.java
172-
│   │   ├── GzipStrategy.java
173-
│   │   └── TransDecodeStrategy.java
174-
│   └── resources
175-
│   ├── default_status_text.json
176-
│   ├── global_headers.json
177-
│   ├── mime.json
178-
│   └── static_html
179-
└── test
180-
└── java
181-
├── CustomTests.java
182-
├── PackerAndParserTest.java
183-
├── clienttests
184-
│   ├── RequestTest.java
185-
│   └── StatusHandlerTest.java
186-
├── loginsystemtests
187-
│   └── LoginSystemTests.java
188-
└── servertests
189-
├── LongConnectionTest.java
190-
├── MIMETest.java
191-
├── ServerTests.java
192-
└── TargetHandlerTest.java
193-
137+
├── Data
138+
│   ├── Client
139+
│   ├── Server
140+
│   └── Test
141+
├── README.md
142+
├── docs
143+
├── pom.xml
144+
└── src
145+
   ├── main
146+
   │   ├── java
147+
   │   │   ├── client
148+
   │   │   │   ├── ClientDriver.java
149+
   │   │   │   ├── HttpClient.java
150+
   │   │   │   ├── HttpRequestMessage.java
151+
   │   │   │   └── StatusHandler.java
152+
   │   │   ├── exception
153+
   │   │   │   └── InvalidMessageException.java
154+
   │   │   ├── server
155+
   │   │   │   ├── HttpResponseMessage.java
156+
   │   │   │   ├── HttpServer.java
157+
   │   │   │   ├── Mapping.java
158+
   │   │   │   ├── ResponseMessageFactory.java
159+
   │   │   │   ├── TargetHandler.java
160+
   │   │   │   └── target
161+
   │   │   │   ├── Common.java
162+
   │   │   │   ├── Html.java
163+
   │   │   │   ├── LoginSystem.java
164+
   │   │   │   └── TargetSet.java
165+
   │   │   └── util
166+
   │   │   ├── Config.java
167+
   │   │   ├── HttpMessage.java
168+
   │   │   ├── Log.java
169+
   │   │   ├── MessageHelper.java
170+
   │   │   ├── consts
171+
   │   │   │   ├── Headers.java
172+
   │   │   │   └── WebMethods.java
173+
   │   │   ├── packer
174+
   │   │   │   ├── MessagePacker.java
175+
   │   │   │   └── encode
176+
   │   │   │   ├── ContentGzipStrategy.java
177+
   │   │   │   ├── EncodeStrategy.java
178+
   │   │   │   ├── SourceStrategy.java
179+
   │   │   │   ├── TransChunkedStrategy.java
180+
   │   │   │   └── TransContentLengthStrategy.java
181+
   │   │   └── parser
182+
   │   │   ├── CustomizedReader.java
183+
   │   │   ├── MessageParser.java
184+
   │   │   ├── contentdecode
185+
   │   │   │   ├── ContentDecodeStrategy.java
186+
   │   │   │   └── GzipStrategy.java
187+
   │   │   └── transdecode
188+
   │   │   ├── ChunkedStrategy.java
189+
   │   │   ├── ContentLengthStrategy.java
190+
   │   │   └── TransDecodeStrategy.java
191+
   │   └── resources
192+
   │   ├── default_status_text.json
193+
   │   ├── global_headers.json
194+
   │   ├── mime.json
195+
   │   └── target_path.json
196+
   └── test
197+
   └── java
198+
   ├── CustomTests.java
199+
   ├── PackerAndParserTest.java
200+
   ├── clienttests
201+
   │   ├── RequestTest.java
202+
   │   ├── StatusHandlerTest.java
203+
   │   └── WANTest.java
204+
   ├── loginsystemtests
205+
   │   └── LoginSystemTests.java
206+
   ├── servertests
207+
   │   ├── LongConnectionTest.java
208+
   │   ├── MIMETest.java
209+
   │   ├── ServerTests.java
210+
   │   └── TargetHandlerTest.java
211+
   └── util
212+
   └── Util.java
194213
```
195214

196215

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package client;
2+
3+
import util.consts.WebMethods;
4+
5+
import java.io.IOException;
6+
7+
public class ClientDriver {
8+
public static void main(String[] args) {
9+
String hostName = "www.baidu.com";
10+
int hostPort = 80;
11+
boolean longConnection = false;
12+
13+
String method = WebMethods.GET;
14+
String target = "/";
15+
String param = null;
16+
String body = null;
17+
18+
try {
19+
HttpClient client = new HttpClient(hostName, hostPort, longConnection);
20+
var hrm = client.request(method, target, param, body);
21+
22+
System.out.println(
23+
HttpClient.present(hrm)
24+
);
25+
} catch (IOException e) {
26+
e.printStackTrace();
27+
}
28+
29+
}
30+
}

src/main/java/client/HttpClient.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,4 +195,17 @@ private void checkCache(HttpRequestMessage hrm) {
195195
hrm.addHeader(Headers.IF_MODIFIED_SINCE, time);
196196
}
197197
}
198+
199+
public static String present(HttpResponseMessage hrm) {
200+
StringBuilder sb = new StringBuilder();
201+
sb.append("// ==================== Start Line and Headers ==================== //\n");
202+
sb.append(hrm.getStartLineAndHeaders());
203+
var ct = hrm.getHeaderVal(Headers.CONTENT_TYPE).trim();
204+
if (ct.startsWith("text") || ct.endsWith("UTF-8")) {
205+
sb.append("// ==================== Body ==================== //\n");
206+
sb.append(hrm.getBodyAsString());
207+
sb.append("\n");
208+
}
209+
return sb.toString();
210+
}
198211
}

src/main/java/server/target/Common.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,6 @@ public static HttpResponseMessage test(HttpRequestMessage msg) {
2222
return hrm;
2323
}
2424

25-
@Mapping(value = "/long_test", method = WebMethods.GET)
26-
public static HttpResponseMessage long_test(HttpRequestMessage msg) {
27-
HttpResponseMessage hrm = factory.produce(200);
28-
hrm.setBodyAsPlainText(Config.getResourceAsString("test_files/long_text.txt"));
29-
return hrm;
30-
}
31-
3225
@Mapping(value = "/moved", method = WebMethods.GET)
3326
public static HttpResponseMessage moved(HttpRequestMessage msg) {
3427
return factory.produce(301, "/test");

src/main/java/util/Config.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ public class Config {
3535
public final static String SERVER_CACHE = SERVER_PATH + "/Cache";
3636
public final static String TEST_CACHE = TEST_PATH + "/Cache";
3737

38+
public static final String DOWNLOAD_PATH = DATA_DIR + "/Download";
39+
3840
public final static int GZIP_THRESHOLD = (1 << 20); // 1MB
3941

4042
public final static String[] TRANSFER_ENCODINGS = { CHUNKED };

src/main/java/util/HttpMessage.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -286,17 +286,6 @@ public static Path getCache(String cacheDir, String file) {
286286
return null;
287287
}
288288

289-
// public static String getCacheLastModified(String cacheDir, String file, String type) {
290-
// Path fPath = getCachePath(cacheDir, file, type);
291-
//
292-
// try {
293-
// FileTime ft = Files.getLastModifiedTime(fPath);
294-
// } catch (IOException e) {
295-
// e.printStackTrace();
296-
// return "";
297-
// }
298-
// }
299-
300289
public void storeBodyInCache(String cacheDir, String file, String type) {
301290
Path fPath = getCachePath(cacheDir, file, type);
302291

@@ -324,6 +313,10 @@ public void loadBodyFromCache(String cacheDir, String file) {
324313
setBodyAsFileWithAbsPath(fPath);
325314
}
326315

316+
public void dumpMessage() {
317+
318+
}
319+
327320
// ====================== Protected ========================= //
328321

329322
protected abstract String getStartLine();
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Manifest-Version: 1.0
2+
Main-Class: client.ClientDriver
3+

0 commit comments

Comments
 (0)