response里的setHeader用法
response.setHeader()的用法
1. HTTP消息头
(1)通用信息头
即能用于请求消息中,也能用于响应信息中,但与被传输的实体内容没有关系的信息头,如Data,Pragma
主要: Cache-Control , Connection , Data , Pragma , Trailer , Transfer-Encoding , Upgrade
(2)请求头
用于在请求消息中向服务器传递附加信息,主要包括客户机可以接受的数据类型,压缩方法,语言,以及客户计算机上保留的信息和发出该请求的超链接源地址等.
主要: Accept , Accept-Encoding , Accept-Language , Host ,
(3)响应头
用于在响应消息中向客户端传递附加信息,包括服务程序的名称,要求客户端进行认证的方式,请求的资源已移动到新地址等.
主要: Location , Server , WWW-Authenticate(认证头)
(4)实体头
用做实体内容的元信息,描述了实体内容的属性,包括实体信息的类型,长度,压缩方法,最后一次修改的时间和数据的有效期等.
主要: Content-Encoding , Content-Language , Content-Length , Content-Location , Content-Type
(5)扩展头
主要:Refresh, Content-Disposition
2. 几个主要头的作用
(1)Content-Type的作用
该实体头的作用是 让服务器告诉 浏览器 它发送的数据属于什么文件类型。
例如:当Content-Type 的值设置为text/html 和text/plain 时,前者会让浏览器把接收到的实体内容以HTML格式解析,后者会让浏览器以普通文本解析.
(2)Content-Disposition 的作用
当Content-Type 的类型为要下载的类型时 , 这个信息头会告诉浏览器这个文件的名字和类型。
Content-Disposition扩展头的例子:
1
2
3
4
5
6
7
|
<%@ page pageEncoding= "GBK" contentType= "text/html;charset=utf-8" import = "java.util.*,java.text.*" %>
<%=DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, Locale.CHINA).format( new Date())
%>
<%
response.setHeader( "Content-Type" , "video/x-msvideo" );
response.setHeader( "Content-Disposition" , "attachment;
filename=aaa.doc" );
%>
|
Content-Disposition中指定的类型是文件的扩展名,并且弹出的下载对话框中的文件类型图片是按照文件的扩展名显示的,点保存后,文件以filename的值命名,保存类型以Content中设置的为准。(attachment:附件)
注意:在设置Content-Disposition头字段之前,一定要设置Content-Type头字段。
3.如何实现文件下载
要实现文件下载,我们只需要设置两个特殊的相应头,它们是什么头?如果文件名带中文,该如何解决?
两个特殊的相应头:
----Content-Type: application/octet-stream
----Content-Disposition: attachment;filename=aaa.zip
例如:
1
2
|
response.setContentType( "image/jpeg" );
response.setHeader( "Content- Disposition" , "attachment;filename=Bluehills.jpg" );
|
如果文件中filename参数中有中文,则就会出现乱码。
解决办法:
1
2
|
( 1 )MimeUtility.encodeWord( "中文.txt" ); //现在版本的IE还不行
( 2 ) new String( "中文" .getBytes( "GB2312" ), "ISO8859- 1" ); //实际上这个是错误的
|
4. 测试并分析文件名乱码问题
response.setHeader()下载中文文件名乱码问题
1
|
response.setHeader( "Content-Disposition" , "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8" ));
|
response.setHeader(...)文件名中有空格的时候
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
String fileName = StringUtils.trim(file.getName());
String formatFileName = encodingFileName(name); //在后面定义方法encodingFileName(String fileName);
response.setHeader( "Content-Disposition" , "attachment; filename=" + formatFileName );
//处理文件名中出现的空格
//其中%20是空格在UTF-8下的编码
public static String encodingFileName(String fileName) {
String returnFileName = "" ;
try {
returnFileName = URLEncoder.encode(fileName, "UTF-8" );
returnFileName = StringUtils.replace(returnFileName, "+" , "%20" );
if (returnFileName.length() > 150 ) {
returnFileName = new String(fileName.getBytes( "GB2312" ), "ISO8859-1" );
returnFileName = StringUtils.replace(returnFileName, " " , "%20" );
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
if (log.isWarnEnabled()) {
log.info( "Don't support this encoding ..." );
}
}
return returnFileName;
}
|
一秒刷新页面一次
1
|
response.setHeader( "refresh" , "1" );
|
二秒跳到其他页面
1
|
response.setHeader( "refresh" , "2;URL=otherPagename" );
|
没有缓存:
1
2
|
response.setHeader( "Pragma" , "No-cache" );
response.setHeader( "Cache-Control" , "no-cache" );
|
设置过期的时间期限
1
|
response.setDateHeader( "Expires" , System.currentTimeMillis()+自己设置的时间期限);
|
访问别的页面:
1
2
|
response.setStatus( 302 );
response.setHeader( "location" , "url" );
|
通知浏览器数据采用的压缩格式:
1
|
response.setHeader( "Content-Encoding" , "压缩后的数据" );
|
高速浏览器压缩数据的长度:
1
|
response.setHeader( "Content-Length" ,压缩后的数据.length+ "" );
|
高速浏览器图片或视频:
1
2
3
4
5
6
7
8
|
response.setHeader( "Content-type" , "这个参数在tomcat里conf下的web.xml里面找" );
inputstream in= this .getServletContext.getResourceAsStream( "/2.jpg" );
int len= 0 ;
byte buffer[]= new byte [ 1024 ]
outputStream out = response.getOutputStream();
while (len=in.read(buffer)> 0 ){
out.write(buffer, 0 ,len)
}
|
高速浏览器已下载的形式:
1
2
3
4
5
6
7
8
|
response.setHeader( "Content-disposition" , "attachment;filename=2.jpg" );
inputstream in= this .getServletContext.getResourceAsStream( "/2.jpg" );
int len= 0 ;
byte buffer[]= new byte [ 1024 ]
outputStream out = response.getOutputStream();
while (len=in.read(buffer)> 0 ){
out.write(buffer, 0 ,len)
|
response里的setHeader用法相关推荐
- 浅谈response.setHeader()用法
1. HTTP消息头 (1)通用信息头 即能用于请求消息中,也能用于响应信息中,但与被传输的实体内容没有关系的信息头,如Data,Pragma 主要: Cache-Control , Connecti ...
- Servlet中的Response(HTTP响应对象)用法及笔记
Servlet中的Response用法及笔记 1.生命周期(创建到销毁的过程,init>service>destroy) 2.生命周期的描述 3.ServletConfig对象的使用 4. ...
- [转载] python里字典的用法_python中字典(Dictionary)用法实例详解
参考链接: Python字典dictionary copy方法 本文实例讲述了python中字典(Dictionary)用法.分享给大家供大家参考.具体分析如下: 字典(Dictionary)是一种映 ...
- response.sendRedirect和setHeader()
www.jnshu.com/login/1/14708688 没有程序渣的理想天国. 1,setHeader()方法 用setHeader()方法设置响应头,为刷新"refresh& ...
- 关于Python里的super用法研究
转自:http://blog.csdn.net/johnsonguo/article/details/585193 虽然我现在没看懂,不过先转一个,以后有时间了再看. 一.问题的发现与提出 在Pyth ...
- Angular路由里的canActivate用法
看个具体的例子. const CUSTOM_ROUTES: Routes = [{ path: "custom/:id", component: RouteDemoComponen ...
- SAP Spartacus里的localStorage用法
window-ref.ts: get nativeWindow(): Window {return typeof window !== 'undefined' ? window : undefined ...
- scss 里的 Mixins 用法介绍
https://www.creativebloq.com/web-design/what-is-sass-111517618 @mixin border-radius($radius) {-webki ...
- SAP Odata服务里filter的用法
看个实际的例子,假设SAP C4C系统里有一个individual customer,昵称nickname为diablo: 我在postman里使用Odata请求根据Nickname字段拿到这个ind ...
最新文章
- 最新动态,电信屏蔽Godaddy部分DNS服务
- python的moviepy库 打包 报错: ‘moviepy.audio.fx.all‘ has no attribute ‘audio_fade 的解决办法
- FPGA同步复位设计代码
- 换一种态度看程序员(转)
- jQuery打印插件JQPRINT
- 关闭蜂鸣最简单的方法
- 16款app源码下载收集
- 论文笔记:3DMM(ACM1999)
- AB压力测试(简易版操作)
- 原生PHP调用科大讯飞语音合成(流式版)WebAPI
- 360+城市空气质量指数-日度数据、良好天数统计(2001-2022年)
- 图形《R数据可视化手册》中文PDF源代码+《R数据科学》中文PDF源代码
- npm run serve stage1@0.1.0 serve vue-cli-service serve node:internal/modules/cjs/loader:936
- mysql入门最全参考笔记
- linux安装zookeeper集群保姆教程,包括集群启停脚本
- 测试人员如何摆脱被钳制的局面?如何利用现有条件资源冲破禁锢?
- 纯css实现太极阴阳鱼动画
- 2022年电商系统开发平台测评体验
- 一个比较高效的素数判断算法
- 阅读报告Implementing arbitrary coined two-dimensional quantum walks via bulk optical interferometry
热门文章
- ICASSP2021:端到端的图像编码方法
- 【phpcms-v9】category.php文件分析-添加栏目
- matlab精细模型的特点,认知模板说、模型说、特征说的优缺点
- Nginx一次奇怪的502 报错
- SQL Server 2008 数据库迁移方法
- ARM+LINUX移植攻略(十九)Linux驱动移植之看门狗
- 在售票场景,人脸识别自助终端的使用
- 德州仪器启用深圳全新自动化产品分拨中心;SGS宣布与微软、中兴通讯等公司合作;阿维塔科技完成首轮战略融资 | 全球TMT...
- 关于修改表名以及字段的基本操作
- ryzen7能否安装linux,amd ryzen可以装win7吗