目录
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("abc");
//resp.getOutputStream();
}
}
4.解决响应中文乱码问题
方案一:
第一步:设置服务器字符集为UTF-8;
第二步:通过响应头,设置浏览器UTF-8;
public class ResponseIOServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println(resp.getCharacterEncoding());
//设置服务器字符集为UTF-8
resp.setCharacterEncoding("UTF-8");
//通过响应头,设置浏览器也是用UTF-8
resp.setHeader("Content-Type","text/html;charset=UTF-8");
PrintWriter writer = resp.getWriter();
writer.write("雨下整夜");
//resp.getOutputStream();
}
}
方案二:
直接使用setContentType(" text/html ; charset=UTF-8")。
它会同时设置服务器和客户端都是用utf-8字符集,还设置了响应头;
此方法一定要在获取流对象之前调用才有效;
public class ResponseIOServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println(resp.getCharacterEncoding());
//它会同时设置服务器和客户端都是用utf-8字符集,还设置了响应头;
//此方法一定要在获取流对象之前调用才有效;
resp.setContentType("text/html;charset=UTF-8");
System.out.println(resp.getCharacterEncoding());
PrintWriter writer = resp.getWriter();
writer.write("雨下整夜");
//resp.getOutputStream();
}
}
5. 请求重定向
请求重定向,是指客户端给服务器发请求,然后服务器告诉客户端说。我给你一些地址。你去新地址访问。叫请求重定向(因为之前的地址可能已经被废弃)。
请求重定向的特点:
1.浏览器地址栏会发生变化;
2.两次请求;
3.不共享Request域中的数据;
4.不能访问WEB-INF下的资源;
5.可以访问工程以外的资源,比如百度;
请求重定向的第一种方案:
设置响应状态码(302);resp.setStatus(302);
设置响应头,说明新的访问地址:resp.setHeader("Location","http://localhost:8080");
package com.atguigu.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class Response1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Response1");
//设置响应状态码,表示重定向
resp.setStatus(302);
//设置响应头,说明新的地址在哪里
resp.setHeader("Location","http://localhost:8080/07_servlet/response2");
}
}
package com.atguigu.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class Response1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Response1");
//设置响应状态码,表示重定向
resp.setStatus(302);
//设置响应头,说明新的地址在哪里
resp.setHeader("Location","http://localhost:8080/07_servlet/response2");
}
}
请求重定向的第二种方案:
resp.sendRedirect(" 新地址 ");
public class Response1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.sendRedirect("http://www.baidu.com");
}
}