目录
前言
我们之前搭建了Servlet架子也实现了MyHttpRequest的部分方法。接下来我们去实现MyHttpResponse的部分方法。
代码实现
我们本次实现的方法有
- setContentType(String type):设置返回内容类型
- setStatus(int status):设置响应状态码
- write(String mess):返回浏览器内容
- setHeader(String s, String s1):设置响应头参数
- sendRedirect(String s):重定向
在MyResponse接口中添加如下方法。
public interface MyResponse {
void setContentType(String type);
void setStatus(int status);
void write(String mess);
void setHeader(String s, String s1);
void sendRedirect(String s);
}
在MyHttpResponse实现类中实现如下方法
public class MyHttpResponse implements MyResponse {
private String responseRow = "HTTP/1.1 ";
private String contentType = "Content-Type: text/html;charset=utf-8\r\n\r\n";
private String responseHead = "";
private OutputStream outputStream;
private int status =200;
public MyHttpResponse(OutputStream outputStream) {
this.outputStream = outputStream;
}
@Override
public void setContentType(String type) {
this.contentType = "Content-Type: " + type + "\r\n";
}
@Override
public void setStatus(int status) {
this.status = status;
}
@Override
public void write(String mess) {
mess = responseRow + status + "\r\n" + responseHead + contentType + mess;
try {
outputStream.write(mess.getBytes());
} catch (IOException e) {
System.out.println("响应浏览器失败");
}
}
@Override
public void setHeader(String s, String s1) {
String head = s + ": " + s1 + "\r\n";
responseHead = responseHead + head;
}
@Override
public void sendRedirect(String s) {
//重定向状态码
setStatus(302);
setHeader("location",s);
//如果不执行write方法,不会向客户端发送任何数据
write("");
}
}
测试
修改线程池的代码如下
public void execute(Socket socket) {
executor.execute(()->{
System.out.println(Thread.currentThread().getName()+"开始处理请求");
InputStream inputStream = null;
try {
inputStream = socket.getInputStream();
MyHttpRequest myHttpRequest = new MyHttpRequest(inputStream);
System.out.println("请求方式为:"+myHttpRequest.getMethod());
System.out.println("请求Uri为:"+myHttpRequest.getUri());
//读取完毕后,进行一个简单响应
OutputStream outputStream = socket.getOutputStream();
String responseBody = "这是一个简单的展示页面";
MyHttpResponse myHttpResponse = new MyHttpResponse(outputStream);
myHttpResponse.write(responseBody);
// myHttpResponse.sendRedirect("https://www.baidu.com");
outputStream.close();
inputStream.close();
socket.close();
System.out.println("断开连接...");
} catch (IOException e) {
e.printStackTrace();
}
});
}
运行后访问localhost:8080地址

接下来测试重定向方法
将线程池代码中的write方法注释掉,将下行代码注释取消。访问localhost:8080地址

至此。MyHttpResponse代码实现完毕
本文介绍了如何在Servlet框架中实现MyHttpResponse接口,包括设置内容类型、状态码、写入内容、设置响应头和重定向功能。通过测试展示了重定向方法的应用。
1377

被折叠的 条评论
为什么被折叠?



