一、HttpServletResponse类
作用:每次请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序使用。HttpServletRequest表示请求过来的信息,HttpServletResponse表示所有响应的信息。
我们如果需要设置返回给客户端的信息,都可以通过HttpServletResponse对象来进行设置。
通过流传给客户端——
字节流 getOutputStream() 常用于下载(二进制数据)
字符流 getWriter() 常用于回传字符串
两个流同时只能使用一个
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setCharacterEncoding("UTF-8"); //乱码请务必加上这行
resp.getWriter();
//resp.getOutputStream();只能用一个
}
如何往客户端回传数据 以及处理乱码问题
public class ResponseIOServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//默认编码为
System.out.println(resp.getCharacterEncoding());
resp.setCharacterEncoding("UTF-8"); //乱码请务必加上这行 服务器的字符集 如果还是乱码,是和浏览器字符集不符合...
//通过响应头,设置浏览器也使用UTF-8
resp.setHeader("Content-Type","text/html;charset=UTF-8");
//代替前面两行,同时设置服务器和客户端;此方法一定要在获取流对象之前调用才有效
resp.setContentType("text/html;charset=UTF-8");
//向客户端回传字符串数据
PrintWriter writer = resp.getWriter();
writer.write("response's content 这是响应的内容");
}
}
请求重定向
请求重定向,是指客户端给服务器发请求,然后服务器告诉客户端:我给你一些新地址,你去新地址访问。(因为之前的地址可能已经被废弃)
服务器(Tomcat)的Response1程序:随着时间的推移和项目的不断更新升级,Response1这个接口慢慢被废弃了,由新的接口Response所取代。
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");
}
}
public class Response2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("response2's result");
}
}
请求重定向的特点:
- 浏览器地址栏会变化
- 两次请求
- 不共享Request域中的数据
- 不能访问WEB-INF下的资源
- 可以访问工程外的资源(比如重定向到baidu)
方法二:
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("http://localhost:8080");
}
}