response响应
在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响应相关推荐
- response响应讲解
response参数也是servlet的service方法中的一个,该参数用来传达响应,关于response的执行原理在上一篇已经讲过了,所以这篇文章就不再赘述 api讲解 api的讲解结合htt ...
- response响应,常用方法,分发器重定向,错误提示
response响应 响应的构成部分 1.状态行 protocol: http协议版本 status code: 状态码 1xx: 信息响应类,表示接收到请求并且继续处理 2xx: 处理成功响应类,表 ...
- 【Flask】response响应
1.重定向 from flask import Flask,redirect,jsonify,make_response,render_template#static_url_path:相当于路由 a ...
- Response响应字符数据(解决乱码问题),字符数据(文件输出)
Response响应字符数据(解决乱码问题),字符数据(文件输出) Request:使用request对象来获取请求数据 Response:使用response对象来设置响应数据 Reponse的继承 ...
- Response响应字符流和字节流数据
文章目录 一.Response响应字符数据(这个流不需要关闭) 1.1 通过对象获取字符输出流 1.2 通过字符输出流输出数据 1.3 问题:输出中文乱码 1.3.1 setHeader 1.3.2 ...
- WEB阶段3:Response响应组成常见状态码ServletContexturl编码文件下载案例
Response响应组成&常见状态码&ServletContext&url编码&文件下载案例 回顾 请求有哪三个的组成部分 请求行:提交方式 URI HTTP/1.1 ...
- 文件下载 response响应ContentType与a标签download属性
参考资料 MediaType介绍 了解HTML/HTML5中的download属性 header中Content-Disposition的作用 目录 一. ContentType 二. a标签down ...
- Response响应的中文乱码问题
乱码呈现 乱码解释 乱码解决 初步解决 改进版 精华版 在这里介绍了Request请求参数中文乱码问题,以及Response响应,下面我们介绍Response响应的中文乱码问题 乱码呈现 先来一个资源 ...
- JavaWeb核心技术——Response响应
目录 1,Response对象 1.1 Response设置响应数据功能介绍 1.2 Respones请求重定向 1.2.1 Response重定向(redirect):一种资源跳转方式. 1.2.2 ...
最新文章
- java查询结果自定义显示_JPA自定义对象接收查询结果集操作
- 在Windows 7下面IIS7的安装和 配置ASP的正确方法
- 数据结构——算法的基本概念
- 两个栈实现一个队列,两个队列实现一个栈
- wxWidgets:wxRadioBox类用法
- POJ2112 Optimal Milking
- 听一听蚂蚁金服机器学习算法中台周俊谈共享智能技术实践:如何降低数据共享的难度?
- jenkins之qq企业邮箱配置
- c++ 返回 char*
- 的run窗口不显示_「玩转deepin」如何安装VirtualBox增强功能使得deepin全屏显示?...
- STM32之SDIO原理
- HSPF(Hydrological Simulation Program Fortran)模型应用
- 解决Linux系统下U盘只读文件系统问题
- ncverilog脚本_nc-sim (irun)和verdi ncverilog,
- Qt5.9生成一个Adroid的apk应用实例
- 又一家初创公司获得数千万融资进军边缘计算赛道!
- jsp实现文件的上传
- 我的梦想就是不工作,有什么错?
- Mysql删除分区,增加分区,分区数据清理
- 【图像检测】手指指尖的图像采集与检测附matlab代码
热门文章
- 【矩阵分析】线性空间、λ矩阵、内积空间、Hermite矩阵、矩阵分解、矩阵范数、矩阵函数
- 海思开发:海思上对 relu6、hswish、h-sigmoid 移植的探索
- 如何使用FFmpeg的编码器
- apply、call、bind三者的区别—附:防抖、节流函数
- fast角点检测 java,[Computer Vision]Harris角点检测的详细推导
- NOIP2011题解
- axure rp9单选按钮实现单选效果
- Hive(二)DDL DML DQL
- Watching for file changes with StatReloader Performing system checks... Exception in thread django-
- 愿你的人生,是一趟愉快的旅行!