JavaWeb 之 response对象详解(四)

目录

Response对象

一.操作响应行

二.操作响应头

三.请求重定向

1.请求重定向原理

2.请求重定向的开发写法

3.请求转发和请求重定向 区别

4.延迟重定向(扩展)

四.​​​​​​​操作响应体


 

Response对象

响应信息的封装对象,封装了HTTP响应(行、头、体)

 

 

 

一.操作响应行

响应状态码。

  • setStatus(int status);  设置发送给客户端的状态码

若未设置状态码,且服务器运行正常,Web服务器会默认产生一个状态码为200的状态行。

 

 

  • sendError(int sc,String errorMsg); 设置错误状态码及提示信息

建议该方法仅发送4xx和5xx状态码。

 

代码:

/**
     * 操作响应行
     * @return
     */
    public String run2() throws IOException {
        //1、设置状态码
        HttpServletResponse r = getResponse();
//        r.setStatus(500);
        //2、设置错误状态码及提示信息
        r.sendError(404,"你找错了,呵呵");
        return null;
    }

 

 

二.​​​​​​​操作响应头

Key:value

       方法声明

功能描述

void addHeader(String name, String value)

这两个方法都是用来设置HTTP协议的响应头字段,其中,参数name用于指定响应头字段的名称,参数value用于指定响应头字段的值。不同的是,addHeader()方法可以增加同名的响应头字段,而setHeader()方法则会覆盖同名的头字段

void setHeader(String name, String value)

void setCharacterEncoding(String charset)

该方法用于设置输出内容使用的字符编码,对HTTP 协议来说,就是设置Content-Type头字段中的字符集编码部分。

设置响应体码表:”utf-8”

(后面响应体中详解)

void setContentType(String type)

该方法用于设置Servlet输出内容的MIME类型,对于HTTP协议来说,就是设置Content-Type响应头字段的值。例如,如果发送到客户端的内容是jpeg格式的图像数据,就需要将响应头字段的类型设置为“image/jpeg”。需要注意的是,如果响应的内容为文本,setContentType()方法的还可以设置字符编码,如:text/html;charset=UTF-8

(后面响应体中详解)

void addIntHeader(String name,

int value)

这两个方法专门用于设置包含整数值的响应头。避免了使用addHeader()与setHeader()方法时,需要将int类型的设置值转换为String类型的麻烦

void setIntHeader(String name,

int value)

void setContentLength(int len)

该方法用于设置响应消息的实体内容的大小,单位为字节。对于HTTP协议来说,这个方法就是设置Content-Length响应头字段的值

无需手动设置由服务器自行设置

 

 

代码:

/**
 * 操作响应头
 * @return
 */
public String run3() {
    //1、设置响应头
    HttpServletResponse r = getResponse();
    r.setHeader("k1","v1");
    r.setHeader("k1","v2");
    //2、追加响应头
    r.addHeader("k2","v1");
    r.addHeader("k2","v2");
    return null;
}

 

 

三.请求重定向

1.请求重定向原理

 

response对象.setStatus(302);

response对象.setHeader(“location”,”http://www.baidu.com”);

 

 

2.请求重定向的开发写法

格式:

  • 外网:return “redirect:http://网址
  • 内部:return “redirect:/资源路径?参数”;
/**
     * 请求重定向:
     * run4重定向到run5
     */
    public String run5(){
        System.out.println("run5");
        return null;
    }

    public String run4(){
        System.out.println("run4");
//        return "redirect:http://www.czxy.com";
        return "redirect:/d1?method=run5";
    }

 

 

 

3.请求转发和请求重定向 区别

1. 请求转发使用request对象重定向使用response对象

2. 请求转发使用服务器端路径重定向使用客户端路径

3. 请求转发不能跳转外网重定向可以

4. 请求转发是服务器内部的跳转不依赖网速跳转速度极快

重定向是依赖浏览器的跳转严重依赖网速跳转速度略慢

5. 请求转发:请求转发N次,请求和响应仅一次 占用资源少

重定向重定向N响应n+1次占用大量资源

6. 请求转发可以访问受保护目录资源,重定向不能

7.请求转发不会改变地址栏路径重定向会改变路径

安全:请求转发。会隐藏后面转发程序的访问路径。

程序BUG:由于请求转发不会更改地址,会导致用户重复访问某个Servlet程序。改为重定向

8、 请求转发可以使用request作用域,重定向不能

 

 

 

 

重定向:

  1. 跳转外网
  2. 改变地址栏路径

请求转发:

其他所有情况 (尤其是需要使用request作用域进行数据传递

 

 

4.延迟重定向(扩展)

X秒后重定向到?路径

response对象.setHeader(“refresh”,”x;http://网址”);

response对象.setHeader(“refresh”,”x;/项目名/路径”);

getResponse().setHeader("refresh","5;/javaweb_day05_1/index.jsp");

 

 

四.​​​​​​​操作响应体

浏览器看到的任何信息 (响应体)

 

  1. 字符流:适用于向响应体中写出 纯文本,前端代码 (JSP)
  2. 字节流:适用于 文件下载

/**
     * 操作响应体
     * @return
     */
    public String run7() throws IOException {
        //1、字符流
//        PrintWriter w = getResponse().getWriter();
//        w.write("你好");
//        w.write("<h1>还好</h1>");
//        w.write("<script>alert('还不错');</script>");
        //2、字节流
//        ServletOutputStream sos = getResponse().getOutputStream();
//        sos.write("你好".getBytes("utf-8"));
        return null;
    }

 

 

 

注意事项:

1、流无需手动close().tomcat会帮忙管理

2、操作响应体时,不建议进行请求转发或重定向

3、某一个servlet只能执行一个流(字节流/字符流)【一山难容二虎】

 

 

 

看完恭喜你,又知道了一点点!!!

你知道的越多,不知道的越多! 

~感谢志同道合的你阅读,  你的支持是我学习的最大动力 ! 加油 ,陌生人一起努力,共勉!!

注: 如果本篇有需要改进的地方或错误,欢迎大神们指定一二~~

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值