文档章节

Response

勤劳的开发者px
 勤劳的开发者px
发布于 2017/09/11 22:51
字数 1285
阅读 13
收藏 0
点赞 0
评论 0

HttpServletResponse

在Servlet API中,定义了一个HttpServletResponse接口,它继承自ServletResponse接口,专门用来封装HTTP响应消息。由于HTTP响应消息分为状态行、响应头、响应体三部分,因此,在HttpServletResponse接口中定义了向客户端发送响应状态码、响应头、响应体的方法。

响应行: 协议版本  状态码 状态描述

常用的状态码:

  • ​        200:成功
  • ​        302:重定向,需要和一个响应头
  • ​        304:访问缓存
  • ​        404:客户端错误
  • ​        500:服务器错误

响应头:  key:value;  这个value可以有多个

一个key对应一个value

一个key对应多个value

    常用的响应头

  • Refresh:定时跳转
  • Location:重定向(地址)
  • Content-Disposition:设置文件下载时候的头
  • Content-Type:设置响应内容的MIME类型

响应体

API简介之设置响应码

// response.setStatus(404);
// response.sendError();

// response.setStatus(302);
// // 指定重定向的地址
// response.setHeader("Location", "http://www.baidu.com");
// 一行代码实现上面两行代码的功能
response.sendRedirect("http://www.baidu.com");

API简介之设置响应头

// 生成的头信息 : refresh: 3;url=http://www.baidu.com
// 3:代表3秒后跳转到一个新的页面
// url : 中的值代表的就是要跳转的页面
response.setHeader("refresh", "3;url=http://www.baidu.com");
// 设置响应内容的类型.客户端就知道发送过来的内容是什么类型的数据,使用对应的方式去解析数据
response.setContentType("");

API简介之设置响应体

protected void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
	// 编码格式不一致导致的
	// ISO-8859-1 Tomcat默认的码表
	// 指定了输出的内容使用什么码表进行编码.但是客户端不知道用什么码表进行解析
	// 如果客户端使用的码表正好和指定的码表是一致的,那就可以解析
	// 如果客户端使用的码表和指定的码表不一致,就还是不能解析
	// response.setCharacterEncoding("utf-8");
	// 指定输出的内容是什么类型的text/html
	// 指定了写回客户端的数据使用的是什么码表进行编码的UTF-8
	// 指定了客户端使用什么码表解析数据UTF-8
	// 如果要指定编码格式,一定要先指定,后输出内容
	response.setContentType("text/html;charset=UTF-8");
	// 这两个对象是互斥的,只能调用一个
	response.getWriter().write("你好");
	// response.getOutputStream().write("你好".getBytes());
}

案例1:下载

文件下载:将服务器上已经存在的文件,输出到客户端浏览器.

文件下载的方式:

第一种:超链接方式(不推荐)
        链接的方式:直接将服务器上的文件的路径写到href属性中.如果浏览器不支持该格式文件,那么就会提示进行下载, 如果浏览器支持这个格式的文件,那么直接打开


第二种:手动编码方式(推荐)
        手动编写代码实现下载.无论浏览器是否识别该格式的文件,都会提示下载.

 

设置两个头和一个流

​    设置的两个头:
        1.Content-Dispostion:浏览器识别该格式文件,提示下载.
//告诉浏览器去下载
response.setHeader("Content-Disposition", "attachment;filename="+filename);
        2.Content-Type:文件类型.(MIME的类型)  
//response.setHeader("Content-Type", mimeType);
response.setContentType(mimeType);
​     设置一个流:
         获得要下载的文件的输出流(字节流).
//得到输出流
OutputStream os = response.getOutputStream(  );

protected void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
	// 0.获取ServletContext
	ServletContext servletContext = getServletContext();
	// 1.获取用户需要下载的文件名
	String fileName = request.getParameter("file");
	// 2.要指定文件的Mime类型
	String mimeType = servletContext.getMimeType(fileName);
	response.setContentType(mimeType);
	// 3.指定如何处置这个文件
	// attachment: 代表要下载这个文件
	// filename: 代表下载这个文件的时候使用的默认文件名
	response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
	// 4.以流的形式把文件写到客户端
	InputStream is = servletContext.getResourceAsStream("/" + fileName);
	ServletOutputStream os = response.getOutputStream();
	int len;
	byte[] buffer = new byte[1024];
	while ((len = is.read(buffer)) != -1) {
		os.write(buffer, 0, len);
	}
	is.close();
}

解决中文名

protected void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
	response.setContentType("text/html;charset=UTF-8");
	// 0.获取ServletContext
	ServletContext servletContext = getServletContext();
	// 1.获取用户需要下载的文件名
	String fileName = request.getParameter("file");
	// 2.要指定文件的Mime类型
	String mimeType = servletContext.getMimeType(fileName);
	response.setContentType(mimeType);
	// 3.指定如何处置这个文件
	// attachment: 代表要下载这个文件
	// filename: 代表下载这个文件的时候使用的默认文件名
	// 参数1:要进行编码的对象
	// 参数2:码表
	// String encode = URLEncoder.encode("附件", "utf-8");
	// 火狐浏览器编码方式是Base64,其他的浏览器编码方式使用的是utf-8
	// 获取客户端类型
	String agent = request.getHeader("User-Agent");
	String encode = DownLoadUtils.getName(agent, "附件");
	response.setHeader("Content-Disposition", "attachment; filename=" + encode + ".rar");
	// 4.以流的形式把文件写到客户端
	InputStream is = servletContext.getResourceAsStream("/" + fileName);
	ServletOutputStream os = response.getOutputStream();
	int len;
	byte[] buffer = new byte[1024];
	while ((len = is.read(buffer)) != -1) {
		os.write(buffer, 0, len);
	}
	is.close();
}

案例2:验证码

protected void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
	// 指定生成的验证码图片的宽度,单位像素
	int width = 120;
	// 指定生成的验证码图片的高度,单位像素
	int height = 40;
	// 指定生成的验证码图片中验证码的个数
	int codeCount = 4;
	// 指定生成的验证码图片中干扰线的个数
	int lineCount = 20;
	ValidateCode validateCode = new ValidateCode(width, height, codeCount, lineCount);
	validateCode.write(response.getOutputStream());
}

© 著作权归作者所有

共有 人打赏支持
勤劳的开发者px
粉丝 2
博文 51
码字总数 108225
作品 0
荆州
程序员
使用 HttpResponse.Write 方法进行字符串串联

该方法提供非常有效的缓冲和连接服务。但是,如果您正在执行广泛的连接,请使用多个 Response.Write 调用。下面示例中显示的技术比用对 Response.Write 方法的单个调用连接字符串更快。 [C#]...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

System.Threading.ThreadAbortException: 正在中止线程。

在 System.Threading.ThreadAbortException 中第一次偶然出现的“mscorlib.dll”类型的异常 “System.Threading.ThreadAbortException”类型的异常在 mscorlib.dll 中发生,但未在用户代码中...

随智阔 ⋅ 2015/08/18 ⋅ 0

天眼查接口token, _utm获取

同学让我帮忙看看天眼查,说token和_utm取不出来。其实挺简单的,通过观察请求,发现每次取数据时,都会打一个tongji的接口。发现里面有个v参数,取出来,逗号分隔,ascii转字符,再拼接。直...

疯狂的小企鹅 ⋅ 2016/12/16 ⋅ 8

pyramid学习笔记整理

from pyramid.config import Configuratorfrom pyramid.response import Responsefrom pyramid.view import view_config configaddresponseadanter(stringresponseadapter)的作用:调用函数名......

浅夏 ⋅ 2013/07/12 ⋅ 0

gsoap怎么发送多条数据?

class SOAPCMAC ns1responsesequence { public: char name; / required element of type xsd:string */ public: virtual int soaptype() const { return 12; } /* = unique id SOAPTYPEns1re......

Nick17 ⋅ 2013/10/14 ⋅ 1

FreemarkerServlet的具体执行顺序

init() createConfiguration() createObjectWrapper() process(request,response) preprocessRequest(request, response) requestUrlToTemplatePath(request) deduceLocale(path, request, r......

crazyinsomnia ⋅ 2010/03/01 ⋅ 2

thinkphp5 HttpResponseException类数据输出

namespace thinkexception; use thinkResponse; class HttpResponseException extends RuntimeException { /** * @var Response */ protected $response; public function construct(Respons......

wg547308195 ⋅ 2017/10/26 ⋅ 0

asp.net实现网站上传下载功能的几种方法

能实现网站下载的功能语言都是动态语言,除了asp.net,还有php,jsp等,这里以asp.net为例。 这种可以实现多种网站下载功能, 代码如下: //TransmitFile实现下载 protected void Button1_C...

bigfool007139 ⋅ 2014/10/13 ⋅ 0

Java文件下载

public HttpServletResponse download(String path, HttpServletResponse response) { try { // path是指欲下载的文件的路径。 File file = new File(path); // 取得文件名。 String filenam......

JianF ⋅ 2016/05/13 ⋅ 0

scrapy之下载器中间件

下载器中间件 参照scrapy运作流程,请求request在发送给下载器之前和下载器返回响应response的时候,要经过Downloader Middleware,以此可以在此时对request和response做处理 设置下载中间件:建...

LinQiH ⋅ 2017/10/19 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

对于程序员的招聘问题,作为软件人的一些吐槽和建议

作为软件人,找工作有时候似乎挺苦逼的。 说真的,让我去掉前面这句中“似乎”二字吧。就是苦逼!很多人都曾抱怨处在招聘的一方很糟糕——我们没有任何可靠的方式来甄别会写代码并且写得好的...

老道士 ⋅ 34分钟前 ⋅ 0

HDFS原理学习

一、概述 1、 Hadoop整合了众多的文件系统,首先提供了一个高层的文件系统抽象org.apache.hadoop.fs.FileSystem。然后有各个文件系统的实现类。 2、Hadoop是JAVA编写的,不同文件系统之间的交...

cjxcloud ⋅ 38分钟前 ⋅ 0

Linux下MySQL表名不区分大小写的设置方法(抄袭别人的)

Linux下MySQL表名不区分大小写的设置方法 MySQL表名不区分大小写的设置方法 在用centox安装mysql后,把项目的数据库移植了过去,发现一些表的数据查不到,排查了一下问题,最后发现是表名的大...

随风而浮沉 ⋅ 43分钟前 ⋅ 0

ubuntu下安装宋体simsun

sudo cp simsun.ttc /usr/share/fonts cd /usr/share/fonts sudo chmod 644 simsun.ttc 更新字体缓存: 代码: sudo mkfontscale 代码: sudo mkfontdir 代码: sudo fc-cache -fsv 安装chrome扩......

wangxuwei ⋅ 44分钟前 ⋅ 0

利用 ssh 传输文件

Linux 下一般可以用 scp 命令通过 ssh 传送文件: #把服务器上的 /home/user/a.txt 发送到本机的 /var/www/local_dir 目录下scp username@servername:/home/user/a.txt /var/www/local_dir...

大灰狼时间 ⋅ 54分钟前 ⋅ 0

web3j教程:android和java程序员如何使用web3j开发区块链以太坊

如何使用web3j为Java应用或Android App增加以太坊区块链支持,本教程内容即涉及以太坊中的核心概念,例如账户管理包括账户的创建、钱包创建、交易转账,交易与状态、智能合约开发与交互、过滤...

智能合约 ⋅ 今天 ⋅ 0

web3j开发java或android以太坊智能合约快速入门

web3j简介 web3j是一个轻量级、高度模块化、响应式、类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成。 可以通过它进行以太坊区块链...

笔阁 ⋅ 今天 ⋅ 0

一起读书《深入浅出nodejs》-异步I/O

异步I/O “异步”这个名词其实很早就诞生了,但它大规模流行却是在Web 2.0浪潮中,它伴随着AJAX的第一个A(Asynchronous)席卷了Web。 为什么要异步I/O 关于异步I/O为何在Node里如此重要,这与...

小草先森 ⋅ 今天 ⋅ 0

JVM各种问题

1、如果启动什么都不设,会怎样? 先来看一个命令 [root@localhost bin]# java -XX:+PrintCommandLineFlags -version -XX:InitialHeapSize=29899008 -XX:MaxHeapSize=478384128 -XX:+PrintCo......

算法之名 ⋅ 今天 ⋅ 0

SAS笔记-宏2

宏是一种文本,一般来说其编译是在程序执行之前。 宏变量的创建 %let语句 %let macro_variables = text; %let是常见的宏变量建立方式,其编译就在执行前。如下例中,想要宏变量test等于数据集...

tonorth123 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部