JavaEE6_Response

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

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. 设置响应行

  1. 格式:HTTP/1.1 200 ok
  2. 设置状态码: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.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值