获取请求协议
public class Server01 {
private ServerSocket serverSocket;
public static void main(String[] args) {
// TODO Auto-generated method stub
Server01 server = new Server01();
server.start();
}
public void start() {
try {
serverSocket = new ServerSocket(8888);
receive();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("客户端错误");
}
}
public void receive() {
try {
Socket socket = serverSocket.accept();
System.out.println("一个客户端建立了连接。。。。");
InputStream is = socket.getInputStream();
byte[] b = new byte[1024 * 1024];
int len = is.read(b);
String requestInfo = new String(b, 0, len);
System.out.println(len);
System.out.println(requestInfo);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("服务连接失败");
}
}
public void stop() {
}
}
返回响应协议
public void receive() {
try {
Socket socket = serverSocket.accept();
System.out.println("一个客户端连接成功了。。。。。。。。");
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
char[] b = new char[1024 * 1024];
int len = is.read(b);
String requestInfo = new String(b, 0, len);
System.out.println(len);
System.out.println(requestInfo);
StringBuilder responseInfo = new StringBuilder();
responseInfo.append("<html>");
responseInfo.append("<head>");
responseInfo.append("<title>");
responseInfo.append("测试");
responseInfo.append("</title>");
responseInfo.append("</head>");
responseInfo.append("<body>");
responseInfo.append("i am iron man");
responseInfo.append("</body>");
responseInfo.append("</html>");
int size = responseInfo.toString().getBytes().length;
StringBuilder response = new StringBuilder();
String blank = " ";
String CLRF = "\r\n";
response.append("HTTP/1.1").append(blank).append("200").append(blank).append("OK").append(CLRF);
response.append("Date:").append(new Date()).append(CLRF);
response.append("Server:leon Server/0.0.1;charset=GBK").append(CLRF);
response.append("Content-type:text/html").append(CLRF);
response.append("Content-length:").append(size).append(CLRF);
response.append(CLRF);
response.append(responseInfo);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8"));
bw.write(response.toString());
bw.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("客户端错误");
}
}
测试结果:
问题:用https出现乱码且无response
封装response
使用封装的Response:
public void receive() {
try {
Socket socket = serverSocket.accept();
System.out.println("一个客户端连接成功了。。。。。。。。");
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
char[] b = new char[1024 * 1024];
int len = is.read(b);
String requestInfo = new String(b, 0, len);
System.out.println(len);
System.out.println(requestInfo);
Response response = new Response(socket);
response.print("<html>");
response.print("<head>");
response.print("<title>");
response.print("测试");
response.print("</title>");
response.print("</head>");
response.print("<body>");
response.print("i am iron man");
response.print("</body>");
response.print("</html>");
response.pushToBrower(200);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("客户端错误");
}
}
封装Request
优化封装
1.Request类中添加属性
注意value为List(前端的多选框),如下图的fav:
2.在构造方法中实例化容器
3.将参数存储到map中
注意参数值为空的情况,如
4.通过key获取value
多个value:
1个value:
5.处理参数为中文的情况
修改代码: