-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSimpleServer.java
More file actions
167 lines (147 loc) · 7.27 KB
/
Copy pathSimpleServer.java
File metadata and controls
167 lines (147 loc) · 7.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
import org.json.JSONObject;
import java.io.*;
import java.net.InetSocketAddress;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
public class SimpleServer {
public static void main(String[] args) throws Exception {
HttpServer server = HttpServer.create(new InetSocketAddress(9001), 0);
server.createContext("/user/register", new RegisterHandler());
server.createContext("/user/login", new LoginHandler());
server.setExecutor(null); // creates a default executor
server.start();
}
static class RegisterHandler implements HttpHandler {
@Override
public void handle(HttpExchange t) throws IOException {
try{
System.out.println("Request received");
Headers headers = t.getResponseHeaders();
headers.add("Access-Control-Allow-Origin", "*");
headers.add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
headers.add("Access-Control-Allow-Headers", "Content-Type");
if ("OPTIONS".equals(t.getRequestMethod())) {
t.sendResponseHeaders(200, -1);
return;
}
System.out.println("Request method: " + t.getRequestMethod());
if ("POST".equals(t.getRequestMethod())) {
System.out.println("Processing POST request");
InputStreamReader isr = new InputStreamReader(t.getRequestBody(), "utf-8");
BufferedReader br = new BufferedReader(isr);
String jsonString = br.lines().collect(Collectors.joining());
// 使用org.json库解析JSON字符串
JSONObject json = new JSONObject(jsonString);
String name = json.optString("name");
String email = json.optString("email");
String password = json.optString("password");
System.out.println("Received request data: Name - " + name + ", Email - " + email + ", Password - " + password);
boolean isAlreadyRegistered = false;
try (BufferedReader reader = Files.newBufferedReader(Paths.get("users.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
String[] parts = line.split(",");
if (parts.length < 3) {
System.out.println("Skipping invalid line: " + line);
continue;
}
if (parts[0].equals(email)) {
isAlreadyRegistered = true;
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
String response = null;
if (!isAlreadyRegistered) {
try (BufferedWriter writer = Files.newBufferedWriter(Paths.get("users.txt"), StandardOpenOption.APPEND)) {
writer.write(name + "," + email + "," + password);
writer.newLine();
} catch (IOException e) {
e.printStackTrace();
}
response = "User registered successfully!";
t.sendResponseHeaders(200, response.length());
}
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
System.out.println("Request processing finished");
}else {
System.out.println("Request is not a POST");
}
} catch (Exception e) {
e.printStackTrace(); // 打印异常到控制台
String response = "Internal Server Error";
t.sendResponseHeaders(500, response.length()); // 返回500状态码
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
}
static class LoginHandler implements HttpHandler {
@Override
public void handle(HttpExchange t) throws IOException {
System.out.println("Received login request.");
Headers headers = t.getResponseHeaders();
headers.add("Access-Control-Allow-Origin", "*");
headers.add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
headers.add("Access-Control-Allow-Headers", "Content-Type");
if ("OPTIONS".equals(t.getRequestMethod())) {
t.sendResponseHeaders(200, -1);
return;
}
if ("POST".equals(t.getRequestMethod())) {
InputStreamReader isr = new InputStreamReader(t.getRequestBody(), "utf-8");
BufferedReader br = new BufferedReader(isr);
String jsonString = br.lines().collect(Collectors.joining());
// 使用org.json库解析JSON字符串
JSONObject json = new JSONObject(jsonString);
String email = json.optString("email");
String password = json.optString("password");
boolean loggedIn = false;
try (BufferedReader reader = Files.newBufferedReader(Paths.get("users.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
String[] parts = line.split(",");
if (parts.length < 3) {
System.out.println("Skipping invalid line: " + line);
continue;
}
if (parts[1].equals(email) && parts[2].equals(password)) {
loggedIn = true;
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
String response = loggedIn ? "Logged in successfully!" : "Invalid email or password";
t.sendResponseHeaders(200, response.length());
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
}
private static Map<String, String> parseFormData(String formData) {
Map<String, String> map = new HashMap<>();
if (formData == null) return map;
String[] pairs = formData.split("&");
for (String pair : pairs) {
int idx = pair.indexOf("=");
map.put(pair.substring(0, idx), pair.substring(idx + 1));
}
return map;
}
}