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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值