为了充数,新开一页~~
这次记下的东西包括对 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 | 有了这个 浏览器就会 弹出个对话框,包括下载文件的名称,以让用户保存文件
|
Transfer-Encoding | Response body 的格式 chunked, compress, deflate, gzip, identity (在Wicket中,如果你将通过 Response 返回的 Stream 的长度设置为-1,那 wicket 就会将返回的 HTTP Response 中添加上 transfer-encoding: chunked) |