文章目录
HttpServletResponse概述
我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代表响应response。
service方法中的response的类型是ServletResponse,而doGet/doPost方法的response的类型是HttpServletResponse,HttpServletResponse是ServletResponse的子接口,功能和方法更加强大的HttpServletResponse。
request对象和response对象的原理
1. request和response对象是由服务器创建的。我们来使用它们
2. request对象是来获取请求消息,response对象是来设置响应消息
request对象和response对象的运行流程

response设置功能
功能:设置响应消息
1. 设置响应行
- 格式:HTTP/1.1 200 ok
- 设置状态码:setStatus(int sc)
2. 设置响应头
setHeader(String name, String value)
3. 设置响应
使用步骤:
1. 获取输出流
字符输出流:PrintWriter getWriter()
字节输出流:ServletOutputStream getOutputStream()
2. 使用输出流,将数据输出到客户端浏览器
response完成重定向和向客户端输出字符串
1.response完成重定向
重定向图解

forward 和 redirect 区别
重定向的特点:redirect
1. 地址栏发生变化
2. 重定向可以访问其他站点(服务器)的资源
3. 重定向是两次请求。不能使用request对象来共享数据
转发的特点:forward
1. 转发地址栏路径不变
2. 转发只能访问当前服务器下的资源
3. 转发是一次请求,可以使用request对象来共享数据
重定向代码演示
@WebServlet("/response2")
public class ResponseServlet2 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//复杂重定向
//1.设置响应状态
//resp.setStatus(302);
//2.设置响应头
//resp.setHeader("location", "/ginger/response");
//动态获取项目的虚拟目录路径
String contextPath = req.getContextPath();// /ginger
//简单的重定向到/ginger/response
//resp.sendRedirect("/ginger/response");
resp.sendRedirect(contextPath+"/response");
//重定向到百度
//resp.sendRedirect("http://www.baidu.com");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp );
}
}
重定向到下面的/response
@WebServlet("/response")
public class ResponseServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
resp.getWriter().write("重定向到了/ginger/response,获取到资源了");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp );
}
}
2. 服务器输出字符数据到浏览器
步骤:
1. 获取字符输出流
2. 输出数据
注意:
乱码问题:
1. PrintWriter pw = response.getWriter();获取的流的默认编码是ISO-8859-1
2. 设置该流的默认编码
3. 告诉浏览器响应体使用的编码
resp.setContentType("text/html;charset=utf-8");
代码演示
@WebServlet("/response4")
public class ResponseServlet4 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//防止中文乱码
//设置HttpServletResponse编码,但是这种方法固定了,如果默认浏览器不是utf-8编码,还会乱码的。
//resp.setCharacterEncoding("utf-8");
//设置响应头
//通知浏览器我使用的是utf-8编码,如果浏览器不是utf-8编码,会自动调整为utf-8解析。
//resp.setHeader("content-type","text/html;charset=utf-8");
//简化设置响应头
resp.setContentType("text/html;charset=utf-8");
//使用字符流向客户端写数据
resp.

本文详细介绍了JavaEE6中HttpServletResponse接口的使用,包括设置响应行、响应头、重定向、向客户端输出数据以及ServletContext对象的使用,如共享数据、获取文件路径等,并通过代码示例进行演示。
最低0.47元/天 解锁文章
1249

被折叠的 条评论
为什么被折叠?



