4.1 两个输出流
流 | 名 | 使用场景 |
字节流 | getOutputStream() | 常用于下载(传递二进制数据) |
字符流 | getWriter() | 常用于回传字符串 |
两个流只能同时使用一个
4.2 如何回传客户端数据
往客户端回传字符串数据
案例代码如下:
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; /** * @author 兴趣使然黄小黄 * @version 1.0 */ public class ResponseIO extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter writer = resp.getWriter(); writer.write("response's content!!!"); } }
同样,该案例中也存在响应的中文乱码问题
与post请求的中文乱码问题不同的是,不能仅仅设置服务端的编码格式,还需要将浏览器默认解析的编码格式统一!
代码如下:
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; /** * @author 兴趣使然黄小黄 * @version 1.0 */ public class ResponseIO extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //设置服务器的字符集 resp.setCharacterEncoding("UTF-8"); //通过响应头,设置浏览器的字符集 resp.setHeader("Content-Type", "text/html;charset=UTF-8"); PrintWriter writer = resp.getWriter(); writer.write("这是一段中文!"); } }
也可以在获取流对象前,通过一个方法同时设置服务端和客户端的编码集:
resp.setContentType("text/html;charset=UTF-8"); 1
5 请求重定向
5.1 什么是请求重定向
请求重定向是指客户端给服务端发请求,然后服务器给客户端提供了一个新的地址去访问。可以简单理解为:呼叫转移~
需要注意请求重定向与请求转发的区别!
请求重定向的特点如下:
不共享Request域的数据
两次请求
浏览器地址栏会发生变化
不能访问到WEB-INF目录下的资源
可以访问到工程外的资源
5.2 请求重定向演示
Response1.java
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * @author 兴趣使然黄小黄 * @version 1.0 * 演示请求重定向 */ 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/Servlet_Test/response2"); } }
Response2.java
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * @author 兴趣使然黄小黄 * @version 1.0 * 演示请求重定向 */ public class Response2 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("----------Response2---------"); resp.getWriter().write("response2"); } }
补充
请求重定向也有一种简便的实现方式:
resp.sendRedirect("http://xxxx/xxx/xxx...");