日期:2014-05-16  浏览次数:20958 次

Apache Wicket 学习(下载文件)续

为了充数,新开一页~~

?

这次记下的东西包括对 WebResponse 重写时注意的东西,以及在 HTTP 传递文件的时候,Response 头信息的使用。

?

在类: org.apache.wicket.protocol.http.WebResponse 中

?

有成员变量 private final HttpServletResponse httpServletResponse,但这个变量是 final 并且为 private

?

那根据功能扩展 WebResponse 的时候就直接使用带有 httpServletResponse 的构造方法来 生成新的类,不然在继续使用wicket框架的时候,wicket本身的一些方法会对 httpServletResponse 操作(因为毕竟最终还是 Request 和Response 在起作用,只是上面封装了一些东西,方便开发),而wicket虽然回去判断 httpServletResponse是不是空,但它不抛异常,这个都已经是底层的东西,关系到HTTP信息处理是否正常,竟然不抛异常?也许新的wicket版本会把这个我认为的漏洞填补吧。但对于新手来说,不注意这一点的话,很难找到出错的原因。

?

HTTP Response 在传递文件的时候会涉及如下的 Header 信息,这里是完整的 HTTP 的 Header

?

?

?


Content-Type Response MIME 内容类型,这里有时还会包含charset
Content-Length Response body 的长度 (8位字节的个数)
Content-Disposition

有了这个 浏览器就会 弹出个对话框,包括下载文件的名称,以让用户保存文件

Content-Disposition: attachment; filename=fname.ext

Transfer-Encoding

Response body 的格式

chunked, compress, deflate, gzip, identity

(在Wicket中,如果你将通过 Response 返回的 Stream 的长度设置为-1,那 wicket 就会将返回的 HTTP Response 中添加上

transfer-encoding: chunked)