一、Response 原理和继承结构

  原理和继承结构参考 request。

二、HttpServletResponse 类的作用

    HttpServletResponse 类和 HttpServletRequest 类一样。 每次请求进来, Tomcat 服务器都会创建一个 Response 对象传递给 Servlet 程序去使用。

    HttpServletRequest 表示请求过来的信息, HttpServletResponse 表示所有响应的信息,我们如果需要设置返回给客户端的信息, 都可以通过 HttpServletResponse 对象来进行设置。

二、设置响应信息

  1、设置响应行

      响应头格式:

HTTP/1.1 200 ok

     设置状态码:

setStatus(int sc);  // sc为状态码

  2、设置响应头

    设置响应头信息:

setHeader(String name, String value);//通过name来给指定的响应头设置信息 

  3、设置响应体

     使用步骤:

      (1)获取输出流

字符输出流:PrintWriter getWriter()
字节输出流:ServletOutputStream getOutputStream()

      (2)使用输出流,将数据输出到客户端浏览器。

三、获取输出流及回传数据

  1、两个输出流

    通过 HttpServletResponse 对象可以获取两个输出流:

字节流 ServletOutputStream getOutputStream();     常用于下载(传递二进制数据)
字符流 PrintWriter getWriter(); 常用于回传字符串(常用)

     注意:两个流同时只能使用一个。使用了字节流,就不能再使用字符流,反之亦然,否则就会报错。

    

  2、服务器输出字符数据到浏览器    

    步骤

     (1)获取字符输出流

     (2)输出数据

    Demo:

1 //1.获取字符输出流
2 PrintWriter pw = response.getWriter(); 获取的流的默认编码是ISO-8859-1
3 //2.输出数据
4 //pw.write("<h1>hello response</h1>");
5 pw.write("你好啊啊啊 response");

    上面的这种方式,向页面输出英文没有问题,而且HTML标签也会被正常解析,但是如果输出中文,就会产生乱码。    

    乱码问题:

    

    解决乱码:

 1 //获取流对象之前,设置流的默认编码:ISO-8859-1 设置为:utf-8
2 // response.setCharacterEncoding("utf-8");
3 //告诉浏览器,服务器发送的消息体数据的编码。建议浏览器使用该编码解码
4 //response.setHeader("content-type","text/html;charset=utf-8");
5
6 //简单的形式,设置编码
7 response.setContentType("text/html;charset=utf-8");
8
9 //1.获取字符输出流
10 PrintWriter pw = response.getWriter();
11 //2.输出数据
12 //pw.write("<h1>hello response</h1>");
13 pw.write("你好啊啊啊 response"); 

    注意:一定要在获取流之前设置编码。

  3、服务器输出字节数据到浏览器(一般用于非文字的传输)

    步骤

     (1)获取字节输出流

     (2)输出数据

    Demo:

1  // 设置消息体数据及编码
2 response.setContentType("text/html;charset=utf-8");
3
4 //1.获取字节输出流
5 ServletOutputStream sos = response.getOutputStream();
6 //2.输出数据
7 sos.write("你好".getBytes("utf-8"));

四、请求重定向

    请求重定向:是指客户端给服务器发请求, 然后服务器告诉客户端说一些新地址,让客户端去新地址访问。 叫请求重定向(因为之前的地址可能已经被废弃)
    请求重定向:是一种客户端资源跳转的方式。

    原理图:

    

    请求重定向的第一种方案:

// 设置响应状态码 302 , 表示重定向
response.setStatus(302);
// 设置响应头, 说明 新的地址在哪里
response.setHeader("Location", "http://localhost:8080");

    请求重定向的第二种方法(推荐使用):

response.sendRedirect("http://localhost:8080");

  

    重定向与转发特点

      重定向(redirect)的特点:[重要]

        ① 地址栏会发生变化;

        ② 重定向可以访问其他站点(服务器)的资源;

        ③ 重定向是两次请求,不能使用 request 对象来共享数据;

        ④ 不能访问 WEB-INF 下的资源,但是可以访问工程外的资源;

        请求转发(forward)的特点:[重要]

        ① 转发地址栏路径不变

        ② 转发只能访问当前工程内容下的资源

        ③ 转发是一次请求,可以使用 request 对象来共享数据

    路径问题

       相对路径:通过性对路径不可以确定唯一资源

               如:./index.html;

               特点:不以 / 开头,以 . (点)开头

               规则:找到当前资源和目标资源之间的相对位置关系

                  ./ :表示当前目录

                 ../ :表示后退返回上一级目录

        绝对路径:通过绝对路径可以确定唯一资源

               如:http://localhost/web/demo1

               特点:以 / 开头

               规则:判断定义的路径是给谁用的,判断请求将来从哪里发出

                 ① 给客户端浏览器使用:需要加虚拟目录(项目的访问路径)

                  如:页面中的超链接,form表单,重定向等。

                  注意:不建议把虚拟目录写死,一般都是动态获取。获取方法:

request.getContextPath()

                 ② 给服务器使用:不需要加虚拟目录

                  如:转发路径;

  

Java 之 Response 对象的更多相关文章

  1. java web(三):ServletContext、session、ServletConfig、request、response对象

    上一篇讲了Servlet: 1)什么是Servlet[servlet本身就是一种Java类,这种Java类提供了web形式的方法,只要实现了servlet接口的类,都是一种servlet资源.] 2) ...

  2. java中获取request与response对象的方法

    Java 获取Request,Response对象方法   第一种.参数 @RequestMapping("/test") @ResponseBody public void sa ...

  3. request 对象和 response 对象

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象 HttpServletResponse HttpServletR ...

  4. javaweb学习总结二十五(response对象的用法一)

    一:Reponse对象的概念 当客户端发送http请求时,服务器端会对每一次请求,创建request对象和response对象. response对象包括三个部分:响应头.响应状态码以及响应体 二:r ...

  5. JSP具体条款——response对象

    response对象 response为响应对象client要求.输出信息到客户.他封装JSP反应生成.发送client在回应client要求. 1.重定向网页 使用response对象的sendRe ...

  6. JSP内置对象--response对象 (addCookie(),setHeader(),sendRedirect())

    服务器接收客户端请求:request 服务器对客户端的回应:response javax.servlet.http的接口HttpServletResponse extends ServletRespo ...

  7. Jsp——response对象

    <%@ page language="java" contentType="text/html; charset=UTF-8" import=" ...

  8. response对象的使用

    使用response对象提供的sendRedirect()方法可以将网页重定向到另一个页面.重定向操作支持将地址重定向到不同的主机上,这一点与转发是不同的.在客户端浏览器上将会得到跳转地址,并重新发送 ...

  9. JSP具体篇——response对象

    response对象 response对象用于响应client请求,向客户输出信息. 他封装了JSP产生的响应,并发送到client以响应client请求. 1.重定向网页 使用response对象的 ...

随机推荐

  1. IntelliJ IDEA 运行你的第一个Java应用程序 idea运行main方法

    IntelliJ IDEA 运行你的第一个Java应用程序创建项目让我们创建一个简单的Java Hello World项目. 单击创建新的项目. 打开新建项目向导.你应该注意的主要是项目的SDK.SD ...

  2. DVT JetBrains License Server(JetBrains授权服务器)2018 v1.1 最新版 含32位/64位

    DVT JetBrains License Server是JetBrains系列软件授权服务器,支持2017版本得jetbrains pycharm,JetBrainswebstorm,JetBrai ...

  3. python-selenium登陆今日头条

    https://blog.csdn.net/a942242856/article/details/88379727 原文地址:http://www.bianbingdang.com/article_d ...

  4. SpringMVC异步处理 可使用的返回值类型

    CallableMethodReturnValueHandler Callable.class.isAssignableFrom(returnType.getParameterType()); Def ...

  5. RedHat 7关闭防火墙方法

    1.在之前的版本中关闭防火墙等服务的命令是 service iptables stop /etc/init.d/iptables stop 2.RHEL7开始,使用systemctl工具来管理服务程序 ...

  6. 工作流之activiti6新手上路

    工作流的定义(解决什么问题?) 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档.信息或任务的过程自动 ...

  7. [转]sql server 分页

    转自 https://www.cnblogs.com/fengxiaojiu/p/7994124.html 第一种:ROW_NUMBER() OVER()方式 select * from ( sele ...

  8. springboot docker 部署

    1.新建一个最简单的springboot项目 https://code.aliyun.com/859143303/hello-world.git 2.src/main/docker下新建Dockerf ...

  9. BeetlConfiguration扩展配置

    beetl拓展配置类,绑定一些工具类,方便在模板中直接调用 BeetlConfiguration.java public class BeetlConfiguration extends BeetlG ...

  10. JAVA中生成指定位数随机数的方法总结

    JAVA中生成指定位数随机数的方法很多,下面列举几种比较常用的方法. 方法一.通过Math类 public static String getRandom1(int len) { int rs = ( ...