Struts2框架不仅提供了一系列的拦截器帮我们完成验证,参数注入的任务,还可以使用不同的type 完成不同的功能,接下来解析一下使用配置文件Action中结果类型为stream时完成文件下载的功能。
需要理解的是,Action在值栈中,而ognl的根就是值栈。这就是为什么在配置文件中可以使用ognl表达式来获取Action的属性(Action中要实现对应属性的get方法)。
步骤一:配置struts.xml配置文件
配置结果类型为stream
步骤二:配置参数
1)配置ContentType:配置需要下载文件的web类型,在web.xml中寻找zip对应的mine-type
2)配置inputName:配置流的名称,需要在Action提供对应的Set(),Get()方法。这个流就是给浏览器用户下载的流。
在Action中完成相关代码:
(注意需要使用ServletContext来获得流)
3)配置contentDisposition:
该内容需要放在响应头中,而响应头只能使用拉丁码表,因此,如果我们的文件名称为中文,则需要使用URLEncoder编码对中文进行编码才能发送。
在此,我们是用ognl表达式来完成这一需求。
<param name="contentDisposition">
attachment;filename="${filename}"
</param>
注意:a.此处不是EL表达式,EL表达式只在jsp页面出现,不在配置文件中出现。
b.ognl表达式中根是值栈,值栈中放的是Action
c.配置文件中使用ognl表达式的格式是${},在括号中填写ognl。由于没有加#,所以是从根,即Action中取值
d.在Action中添加filename属性,并对其完成转码。
4)配置bufferSize:设定缓冲区大小
到此已经完成了所有工作,运行后的结果为: