欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaWeb 之 response对象详解(四)

程序员文章站 2022-06-03 10:00:13
...

目录

Response对象

一.操作响应行

二.操作响应头

三.请求重定向

1.请求重定向原理

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

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

4.延迟重定向(扩展)

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


 

Response对象

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

JavaWeb 之 response对象详解(四)

 

 

 

一.操作响应行

响应状态码。

  • 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.请求重定向原理

JavaWeb 之 response对象详解(四)

 

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作用域,重定向不能

 

JavaWeb 之 response对象详解(四)

 

JavaWeb 之 response对象详解(四)

 

 

重定向:

  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;
    }

 

JavaWeb 之 response对象详解(四)

 

 

注意事项:

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

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

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

 

 

 

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

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

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

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