java web怎么添加response.setheader

java web怎么添加response.setheader,第1张

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扩展头的例子:

<%@ page pageEncoding="GBK" contentType="text/htmlcharset=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", "attachmentfilename=aaa.doc")

%>

Content-Disposition中指定的类型是文件的扩展名,并且d出的下载对话框中的文件类型图片是按照文件的扩展名显示的,点保存后,文件以filename的值命名,保存类型以Content中设置的为准。

注意:在设置Content-Disposition头字段之前,一定要设置Content-Type头字段。

3.如何实现文件下载

要实现文件下载,我们只需要设置两个特殊的相应头,它们是什么头?如果文件名带中文,该如何解决?

两个特殊的相应头:

----Content-Type:       application/octet-stream

----Content-Disposition: attachmentfilename=aaa.zip

例如:

response.setContentType("image/jpeg")

response.setHeader("Content- Disposition","attachmentfilename=Bluehills.jpg")

如果文件中filename参数中有中文,则就会出现乱码。

解决办法:

(1)MimeUtility.encodeWord("中文.txt")//现在版本的IE还不行

(2)new String("中文".getBytes("GB2312"),"ISO8859- 1")//实际上这个是错误的

4. 测试并分析文件名乱码问题

response.setHeader()下载中文文件名乱码问题

response.setHeader("Content-Disposition", "attachment filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"))

response.setHeader(...)文件名中有空格的时候

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

    }

一秒刷新页面一次

response.setHeader("refresh","1")

二秒跳到其他页面

response.setHeader("refresh","2URL=otherPagename")

没有缓存

response.setHeader("Pragma", "No-cache")

response.setHeader("Cache-Control", "no-cache")

设置过期的时间期限  

  response.setDateHeader("Expires", System.currentTimeMillis()+自己设置的时间期限)

访问别的页面:

response.setStatus(302) 

response.setHeader("location","url")

通知浏览器数据采用的压缩格式:

response.setHeader("Content-Encoding","压缩后的数据")

高速浏览器压缩数据的长度:

response.setHeader("Content-Length",压缩后的数据.length+"")

高速浏览器图片或视频:

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)

}

高速浏览器已下载的形式:

response.setHeader("Content-disposition","attachmentfilename=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)

}

HttpResponse类

描述:

封装来自 ASP.NET *** 作的 HTTP 响应信息。

公共构造函数:

HttpResponse

初始化 HttpResponse 类的新实例。

公共属性:

Buffer

获取或设置一个值,该值指示是否缓冲输出,并在完成处理整个响应之后将其发送。

BufferOutput

获取或设置一个值,该值指示是否缓冲输出,并在完成处理整个页之后将其发送。

Cache

获取网页的缓存策略(过期时间、保密性、变化子句)。

CacheControl

将 Cache-Control HTTP 头设置为 Public 或 Private。

Charset

获取或设置输出流的 HTTP 字符集。

ContentEncoding

获取或设置输出流的 HTTP 字符集。

ContentType

获取或设置输出流的 HTTP MIME 类型。

Cookies

获取响应 Cookie 集合。

Expires

获取或设置在浏览器上缓存的页过期之前的分钟数。如果用户在页面过期之前返回该页,则显示缓存版本。提供 Expires 是为了与以前版本的 ASP 兼容。

ExpiresAbsolute

获取或设置从缓存中移除缓存信息的绝对日期和时间。提供 ExpiresAbsolute 是为了与以前版本的 ASP 兼容。

Filter

获取或设置一个包装筛选器对象,该对象用于在传输之前修改 HTTP 实体主体。

HeaderEncoding

获取或设置一个 Encoding 对象,该对象表示当前标头输出流的编码。

IsClientConnected

获取一个值,通过该值指示客户端是否仍连接在服务器上。

IsRequestBeingRedirected

获取一个布尔值,该值指示客户端是否正在被传输到新的位置。

Output

启用到输出 HTTP 响应流的文本输出。

OutputStream

启用到输出 Http 内容主体的二进制输出。

RedirectLocation

获取或设置 Http“位置”标头的值。

Status

设置返回到客户端的 Status 栏。

StatusCode

获取或设置返回给客户端的输出的 HTTP 状态代码。

StatusDescription

获取或设置返回给客户端的输出的 HTTP 状态字符串。

SuppressContent

获取或设置一个值,该值指示是否将 HTTP 内容发送到客户端。

公共方法:

AddCacheDependency

将一组缓存依赖项与响应关联,这样,如果响应存储在输出缓存中并且指定的依赖项发生变化,就可以使该响应失效。

AddCacheItemDependencies

已重载。 使缓存响应的有效性依赖于缓存中的其他项。

AddCacheItemDependency

使缓存响应的有效性依赖于缓存中的其他项。

AddFileDependencies

已重载。 使缓存响应的有效性依赖于缓存中的其他项。

AddFileDependency

将单个文件名添加到文件名集合中,当前响应依赖于该集合。

AddHeader

将一个 HTTP 头添加到输出流。提供 AddHeader 是为了与以前版本的 ASP 兼容。

AppendCookie

将一个 HTTP Cookie 添加到内部 Cookie 集合。

AppendHeader

将 HTTP 头添加到输出流。

AppendToLog

将自定义日志信息添加到 Internet 信息服务 (IIS) 日志文件。

ApplyAppPathModifier

如果会话使用 Cookieless 会话状态,则将该会话 ID 添加到虚拟路径中,并返回组合路径。如果不使用 Cookieless 会话状态,则 ApplyAppPathModifier 返回原始的虚拟路径。

BinaryWrite

将一个二进制字符串写入 HTTP 输出流。

Clear

清除缓冲区流中的所有内容输出。

ClearContent

清除缓冲区流中的所有内容输出。

ClearHeaders

清除缓冲区流中的所有头。

Close

关闭到客户端的套接字连接。

End

将当前所有缓冲的输出发送到客户端,停止该页的执行,并引发 EndRequest 事件。

Equals

已重载。 确定两个 Object 实例是否相等。 (从 Object 继承。)

Flush

向客户端发送当前所有缓冲的输出。

GetHashCode

用作特定类型的哈希函数。GetHashCode 适合在哈希算法和数据结构(如哈希表)中使用。 (从 Object 继承。)

GetType

获取当前实例的 Type。 (从 Object 继承。)

Pics

将一个 PICS-Label HTTP 标头追加到输出流。

Redirect

已重载。 将客户端重定向到新的 URL。

ReferenceEquals

确定指定的 Object 实例是否是相同的实例。 (从 Object 继承。)

RemoveOutputCacheItem

静态方法从缓存中移除所有与指定路径关联的缓存项。

SetCookie

更新 Cookie 集合中的一个现有 Cookie。

ToString

返回表示当前 Object 的 String。 (从 Object 继承。)

TransmitFile

将指定的文件直接写入 HTTP 响应输出流,而不在内存中缓冲该文件。

Write

已重载。 将信息写入 HTTP 响应输出流。

WriteFile

已重载。 将指定的文件直接写入 HTTP 响应输出流。

WriteSubstitution

允许将响应替换块插入响应,从而允许为缓存的输出响应动态生成指定的响应区域。

受保护的方法:

Finalize

允许 Object 在“垃圾回收”回收 Object 之前尝试释放资源并执行其他清理 *** 作。 (从 Object 继承。)

MemberwiseClone

创建当前 Object 的浅表副本。 (从 Object 继承。)

1、我先解释你不懂的代码吧

Response.AddHeader("Content-Disposition", "attachment filename=" +

//这一句是添加报文头,在客户端出现,打开,另存为,取消的对话框

HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8))

//防止文件名含有中文,而进行编码,这样中文就不会显示乱码了

Response.BinaryWrite(bytes)

//向客户端写数据

Response.Flush()

//表示向客户端一点一点的写数据,流动的方式,而不会使得数据堆在内存中,造成客户端假死的现象

//Response.End()

结束

2、至于你说的其中response一直说上下文中没有

你试下把fs.Close()放到Response.Flush()后面或者Response.BinaryWrite(bytes)后面


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11612672.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存