response

  • 服务器处理请求的流程:

服务器每次收到请求时,都会为这个请求开辟一个新的线程
服务器会把客户端的请求数据封装到request中,request就是请求数据的载体
服务器还会创建response对象,这个对象与客户端连接在一起,可以用来向客户端发出响应



线程:通俗点说,进程是一个具体的应用程序,线程是进程中的一个分支,为单独完成程序中的某一项或一组功能而存在。
应用程序可以有一个或多个进程,一个进程可以有一个或多个线程,其中一个是主线程。



response其类型为HttpServletResponse

ServletResponse是与协议无关的类型
HttpServletResponse是和http协议有关的类型

  • 状态码:200表示成功、302表示重定向、404表示客户端(访问的资源不存在)、500表示服务器端错误
    sendError(int sc): 发送错误的状态码
    sendError(int sc ,String msg):发送错误的状态码,还带一个错误的信息
    sendStatus(int sc):发送成功的状态码
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "AServlet",urlPatterns ="/AServlet")
public class AServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.sendError(404,"你访问的数据就是不给你看");
    }
}
  • 响应头:头就是一个键值对,可能有一个头一个值,也可能有一个头多个值
    setHeader(String name,String value):适用于单值得响应头
    response.setHeader("aaa","AAA");
    setaddHeader(String name,String value):适用于多值得响应头
    response.addHeader("aaa","AAA");
    response.addHeader("aaa","AA");
    response.addHeader("aaa","A");
    setIntHeader(String name,String value):适用于int类型的值得响应头
    response.setIntHeader("Content-length","888");
    addIntHeader(String name,String value):适用于多值得响应头
    setDateHeader(String name, long value):适用于单值得毫秒的响应头
    response.setDateHeader("expires",10006060*24);
    addDateHeader(String name, long value):适用于多值的响应头

*案例:
发送302,设置Location头,完成重定向

重定向

response.setHeader("Location", "/JavaWebDay10_1/CServlet");
response.setStatus(302);

定时刷新:设置Refresh头

//响应体
PrintWriter writer = response.getWriter();
writer.print(欢迎,5秒后跳转)
//设置名为Refresh的响应头
response.setHeader("Refresh","5;URL=/JavaWebDay10_1/EServlet");

禁用浏览器缓存:Cache-Control、pragma、expires

response.setHeader("Cache-Control","no-cache");
response.setHeader("pragma","no-cache");
response.setDateHeader("expires",-1);

<meta>标签可以充当响应头:<meta http-equiv="Content-Type" content="text/html";charset="UTF-8">
response的两个流:
ServletOutputStream,用来向客服端发送字节数据;
ServletOutputStream = response.getOutputStream();
PrintWriter,用来向客服端发送字符数据,需要设置编码,两个流不能同时存在
PrintWriter writer = response.getWriter();

//把一张图片读取到字节数组中
String path = "路径";
Fileinputstream in = new FileInputStream(path);
byte[] bytes = IOUtils.toByteArray(in);//读取输入流内容的字节到字节数组中
快捷的重定向:sendRedirect("路径");
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容