在service()中可以使用request来获取请求数据,还可以使用response向客户端响应,response有响应流。request和response是一次性的,即每次请求都要创建新的。

response是类型是javax.servlet.http.HttpServlet.Response
response对象和功能:

  • 设置响应头信息;
  • 发送状态码;
  • 设置响应正文;
  • 重定向;

响应正文

response有两个响应流,一个是字符流,一个是字节流

  • PrintWriter out = response.getWriter();//获取字符流
  • ServletOutputStream out = response.getOutputStream();//获取字节流
    注意:在一个请求中不能同时使用response.getWriter()和response.getOutputStream()这两个流,不然会抛出非法的状态异常。

使用字符流有两个问题:
1、编码
在调用getWrite()方法之前使用setCharacterEncoding()来设置字符流编码,如果不设置默认是iso-8859-1。

//response.setCharacterEncoding("utf-8");//设置字符流的编码为utf-8,设置之后用字符流发送的字符串都是utf-8的。
response.setContentType("text/html;charset=utf-8");//设置字符流编码,而且还会添加content-Type响应头,这个头通知浏览器用utf-8解码。
response.getWriter("中国");

浏览器一般默认使用gbk来解码。
2、缓冲区:默认是8kb,就是说,在响应数据没输出8kb之前,数据都是存放在缓冲区中,而不会立刻发送到客户端,当servlet执行结束后,服务器才会去刷新流,使缓冲区的数据发送到客户端。
缓冲区刷新:

  • response.getWriter.flush();
  • response.flushBuffer();
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {for(int i=0; i < 1024; i++) {response.getWriter().print("A");}///System.out.println(response.isCommitted());//检测是否发送/*刷新缓冲区,这下面两句话的效果相同* *///response.getWriter().flush();////response.flushBuffer();try {Thread.sleep(5000);//休眠5秒钟} catch (InterruptedException e) {e.printStackTrace();}}

设置response响应头

  • 下面操作会出现两个头:
    response.addHeader("a","A");
    response.addHeader("a","AA");

    a:A
    a:AA
  • 下面操作只能出现一个头:
    response.addHeader("Content-type","text/html;charset=utf-8");
    response.addHeader("Content-type","text/html;charset=gbk");最后是gbk。
  • 下面操作形成一个头覆盖:
    response.setHeader("a","A");
    response.setHeader("a","AA");

response.setHeader("Refresh","5;URL=www.baidu.com");5秒后自动跳转到百度主页

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setHeader("Refresh","5;URL=/day05_1/index.jsp");response.setContentType("text/html;charset=utf-8");response.getWriter().print("一会儿会自动跳转到主页");}

设置状态码

response.setStatus(int code);
response.sendError(int code , String msg);

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {   //response.setStatus(200);设置状态码response.sendError(500,"您访问的资源找到了");//设置错误提示}

重定向

手动重定向

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {/** 重定向:* 1、状态码为302* 2、响应头Location*/response.setStatus(302);response.setHeader("Location", "/day05_2/index.jsp");}

自动重定向

response.sendRedirect(“重定向的URL”);

/*** 自动重定向* * @author green*所谓自动,其实就是response提供的简便方法,可以完成设置状态码和Location头。*/
@WebServlet("/BServlet")
public class BServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {/*下面sendRedirect()两个功能:* 1、设置状态码为302* 2、设置响应头Location*/response.sendRedirect("/day05_2/index.jsp");}
}

注意:

  • 重定向一定有两个请求。
  • 重定向第一个请求无论是GET或者POST,第二个请求一定是GET。
  • 重定向可以定向到其他应用中,不局限于当前应用。
  • 重定向就不要去响应,重定向就不要再使用response.getWriter()或response.getOutputStram()输出数据,不然会出现异常。
    response.getWriter().print("哈哈哈");
    response.sendRedirect("/day05_2/index.jsp");

    这会在重定向时抛出异常。

response响应相关推荐

  1. response响应讲解

      response参数也是servlet的service方法中的一个,该参数用来传达响应,关于response的执行原理在上一篇已经讲过了,所以这篇文章就不再赘述 api讲解 api的讲解结合htt ...

  2. response响应,常用方法,分发器重定向,错误提示

    response响应 响应的构成部分 1.状态行 protocol: http协议版本 status code: 状态码 1xx: 信息响应类,表示接收到请求并且继续处理 2xx: 处理成功响应类,表 ...

  3. 【Flask】response响应

    1.重定向 from flask import Flask,redirect,jsonify,make_response,render_template#static_url_path:相当于路由 a ...

  4. Response响应字符数据(解决乱码问题),字符数据(文件输出)

    Response响应字符数据(解决乱码问题),字符数据(文件输出) Request:使用request对象来获取请求数据 Response:使用response对象来设置响应数据 Reponse的继承 ...

  5. Response响应字符流和字节流数据

    文章目录 一.Response响应字符数据(这个流不需要关闭) 1.1 通过对象获取字符输出流 1.2 通过字符输出流输出数据 1.3 问题:输出中文乱码 1.3.1 setHeader 1.3.2 ...

  6. WEB阶段3:Response响应组成常见状态码ServletContexturl编码文件下载案例

    Response响应组成&常见状态码&ServletContext&url编码&文件下载案例 回顾 请求有哪三个的组成部分 请求行:提交方式 URI HTTP/1.1 ...

  7. 文件下载 response响应ContentType与a标签download属性

    参考资料 MediaType介绍 了解HTML/HTML5中的download属性 header中Content-Disposition的作用 目录 一. ContentType 二. a标签down ...

  8. Response响应的中文乱码问题

    乱码呈现 乱码解释 乱码解决 初步解决 改进版 精华版 在这里介绍了Request请求参数中文乱码问题,以及Response响应,下面我们介绍Response响应的中文乱码问题 乱码呈现 先来一个资源 ...

  9. JavaWeb核心技术——Response响应

    目录 1,Response对象 1.1 Response设置响应数据功能介绍 1.2 Respones请求重定向 1.2.1 Response重定向(redirect):一种资源跳转方式. 1.2.2 ...

最新文章

  1. java查询结果自定义显示_JPA自定义对象接收查询结果集操作
  2. 在Windows 7下面IIS7的安装和 配置ASP的正确方法
  3. 数据结构——算法的基本概念
  4. 两个栈实现一个队列,两个队列实现一个栈
  5. wxWidgets:wxRadioBox类用法
  6. POJ2112 Optimal Milking
  7. 听一听蚂蚁金服机器学习算法中台周俊谈共享智能技术实践:如何降低数据共享的难度?
  8. jenkins之qq企业邮箱配置
  9. c++ 返回 char*
  10. 的run窗口不显示_「玩转deepin」如何安装VirtualBox增强功能使得deepin全屏显示?...
  11. STM32之SDIO原理
  12. HSPF(Hydrological Simulation Program Fortran)模型应用
  13. 解决Linux系统下U盘只读文件系统问题
  14. ncverilog脚本_nc-sim (irun)和verdi ncverilog,
  15. Qt5.9生成一个Adroid的apk应用实例
  16. 又一家初创公司获得数千万融资进军边缘计算赛道!
  17. jsp实现文件的上传
  18. 我的梦想就是不工作,有什么错?
  19. Mysql删除分区,增加分区,分区数据清理
  20. 【图像检测】手指指尖的图像采集与检测附matlab代码

热门文章

  1. 【矩阵分析】线性空间、λ矩阵、内积空间、Hermite矩阵、矩阵分解、矩阵范数、矩阵函数
  2. 海思开发:海思上对 relu6、hswish、h-sigmoid 移植的探索
  3. 如何使用FFmpeg的编码器
  4. apply、call、bind三者的区别—附:防抖、节流函数
  5. fast角点检测 java,[Computer Vision]Harris角点检测的详细推导
  6. NOIP2011题解
  7. axure rp9单选按钮实现单选效果
  8. Hive(二)DDL DML DQL
  9. Watching for file changes with StatReloader Performing system checks... Exception in thread django-
  10. 愿你的人生,是一趟愉快的旅行!