Servlet学习-response

耗尽温柔 提交于 2019-11-30 05:23:38

Servlet学习-response

服务器处理请求的流程:

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

http协议中响应的内容

-状态码
200表示成功,302表示重定向,404表示客户端错误,500表示服务器错误
sendError(int sc) 发送错误状态码
sendError(int sc,String msg) 发送错误状态码,带一个错误信息
setStatus(int sc) 发送成功的状态码,可以用来发送302

-响应头(就是一个键值对)
可能存在一个名称一个值,也可能存在一个名称多个值
Content-Type,Refresh,Location
setHeader(String name,String value); 适用于单值的响应头
addHeader(String name,String value); 适用于多值的响应头
setIntHeader(String name,int value); 适用于单值的int类型的响应头
addIntHeader(String name,int value); 适用于多值的int类型的响应头
setDateHeader(String name,long value); 适用于单值的毫秒类型的响应头
addDateHeader(String name,long value); 适用于多值的毫秒类型的响应头

实例

实例一:重定向

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 = "HServlet")
public class HServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("HServlet");
        /**
         * 重定向:
         * 1.设置Location
         * 2.发送302状态码
         */
        response.setHeader("Location","/IServlet");
        response.setStatus(302);
    }
}
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 = "IServlet")
public class IServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("IServlet");
    }
}

实例二:演示Refresh

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;
import java.io.PrintWriter;

@WebServlet(name = "JServlet")
public class JServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /**
         * 演示Refresh
         */
        PrintWriter writer = response.getWriter();
        writer.print("登录成功,5秒后自动跳转");
        response.setHeader("Refresh","5;URL=/index.jsp");

    }
}

实例三:禁用浏览器缓存

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 = "KServlet")
public class KServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /**
         * 禁用浏览器缓存
         */
        response.setHeader("Cache-Control","no-cache");
        response.setHeader("prama","no-cache");
        response.setDateHeader("expires",-1);
        response.getWriter().print("hello");
    }
}

-响应体(通常是html或者是图片)
response的两个流:
ServletOutputStream,用来向客户端发送字节数据。
–ServletOutputStream out = response.getOutputStream();
PrintWriter,用来向客户端发送字符数据,需要数值编码。
–PrintWriter writer = response.getWriter();

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 = "TestServlet")
public class TestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String str = "hello world!";
        byte[] bytes = str.getBytes();
        response.getOutputStream().write(bytes);
    }
}
import org.apache.commons.io.IOUtils;
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.FileInputStream;
import java.io.IOException;

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

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /**
         * 演示响应字节数据
         */
        String path = "D:/logo1.png";
        FileInputStream in = new FileInputStream(path);
        byte[] b = IOUtils.toByteArray(in);
        response.getOutputStream().write(b);
    }
}

重定向:设置302,设置Location,其中变化的只有Location,所以java提供了一个快捷方法,完成充定向。
sendRedirect(String location)方法。

 response.sendRedirect("https://www.baidu.com");
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!