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");
来源:CSDN
作者:一个有素质的屌人
链接:https://blog.csdn.net/weixin_42370899/article/details/103244771