一、HttpServletResponse类作用
1.HttpServletResponse类说明
HttpServletResponse类和HttpServletRequest类一样。每次请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用。
HttpServletRequest表示请求过来的信息, HttpServletResponse表示所有响应的信息
我们如果需要设置返回给客户端的信息,都可以通过 HttpServletResponse对象来进行设置
2.两个输出流的说明
字节流 getOutputStream(); 常用于下载(传递二进制数据)
字符流 getWriter(); 常用于回传字符串(常用)
两个流同时只能使用一个
使用了字节流,就不能再使用字符流,否则会报错
3.如何往客户端回传数据
往客户端回传字符串
public class ResponseIOServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 要求:往客户端回传 字符串 数据
PrintWriter writer = resp.getWriter();
writer.write("response's content!!!!");
}
}
结果图
4.解决中文乱码问题
Servlet---解决post请求中中文乱码问题_我爱布朗熊的博客-CSDN博客
public class ResponseIOServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 设置字符集
resp.setCharacterEncoding("UTF-8");
// 设置完成字符集之后,还会出现乱码问题,其中可能的就是浏览器的字符编码集合我们现在的服务器字符编码集不同
// 下面我们也要修改一下浏览器中的字符编码集
// 通过响应头,设置浏览器也是用UTF-8字符集
resp.setHeader("Content-Type","text/html;charset-UTF-8");
// 要求:往客户端回传 字符串 数据
PrintWriter writer = resp.getWriter();
writer.write("response's content!!!!");
writer.write("张张张张");
}
}
二、请求重定向
是指客户端给服务器发请求,然后服务器告诉客户端说,我给你一些地址,你去新地址访问,叫请求重定向(因为之前的地址可能已经废弃)
特点:
1.浏览器地址栏会发生变化
2.两次请求
3.不共享Request域中的数据
4.不能访问WEB-INF下的资源
5.可以访问工程外的资源
第一种方式
public class Response1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("曾到此一游 Response1");
// 设置响应状态码302 表示重定向(已经搬迁)
resp.setStatus(302);
// 设置响应头,说明新的地址在哪里
resp.setHeader("location","http://localhost:8080//web_Tomcat_war_exploded/Response2");
}
}
public class Response2 extends HttpServlet {
// 在这里真正处理用户请求
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("response2 result!!!!!!");
}
}
请求路径为http://localhost:8080//web_Tomcat_war_exploded/Response1
但是回车之后的路径变成
http://localhost:8080//web_Tomcat_war_exploded/Response2
第二种方式(推荐使用)
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("曾到此一游 Response1");
// 直接告诉请求定向的路径
resp.sendRedirect("http://localhost:8080//web_Tomcat_war_exploded/Response2");
}