HttpServletReponse类和HttpServletRequest类一样,每次请求进来,Tomcat服务器都会创建一个Response对象,传递给Servlet程序去使用,HttpServletRequest表示请求过来的信息,HttpServletReponse表示所有响应的信息。
如果需要设置返回给客户端的信息,都可以通过HttpServletReponse对象进行设置。
字节流 getOutputStream(); 常用于下载(传递二进制数据)
字符流 getWriter(); 常用于回传字符串(常用)
两个流同时只能使用一个,否则会报错
往客户端回传字符串数据
- public class ResponseIOServlet extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- PrintWriter writer = resp.getWriter();
- writer.println("response's content!!");
- }
- }
默认为ISO-8859-1
方法1:
- resp.setCharacterEncoding("UTF-8");
- //通过响应头,设置浏览器也使用UTF-8
- resp.setHeader("Content-Type", "text/html; charset=UTF-8");
方法2:
- resp.setContentType("text/html; charset=UTF-8");
- //一行代码会同时设置服务器和客户端都使用UTF-8字符集,还设置了响应头
- //此方法一定要在获取流对象之前设置才有效
- System.out.println(resp.getCharacterEncoding());
请求重定向是指,客户端给服务器发送请求,然后服务器告诉客户端说。我给你一些地址,你去新地址访问,叫做重定向(因为之前的地址可能已经被废弃)。
第一种方案:
- 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:8088/web04_servlet/response2");
- }
- }
- public class Response2 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- resp.setContentType("text/html; charset=UTF-8");
- resp.getWriter().write("成功重定向到Response2!");
- }
- }
第二种方案:(推荐使用)
- public class Response1 extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- resp.sendRedirect("http://localhost:8088/web04_servlet/response2");
- }
- }
请求重定向的特点:
(1)浏览器地址栏会变化为重定向后的地址
(2)客户端进行了两次请求
(3)不共享Request域中的数据,因为Tomcat每次请求都会封装一个HttpServletReponse对象,两次请求封装了两个不同的对象。
(4)不能靠重定向访问到WEB-INF目录下的内容,因为还是由浏览器发送的请求,不是服务器内部。
(5)可以访问工程以外的资源
【请求转发对内,重定向对外】
重定向的相对路径地址到端口号 , 请求转发的到工程名
工程名: req.getContextPath()