使用Struts+ognl进行文件下载

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:设定缓冲区大小


到此已经完成了所有工作,运行后的结果为:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 标签 如果要配置的标签,那么必须要先配置标签,代表的包的概念。 包含的属性 name包的名称,要求是唯一的,管理a...
    偷偷得路过阅读 1,423评论 0 0
  • 概述 什么是Struts2的框架Struts2是Struts1的下一代产品,是在 struts1和WebWork的...
    inke阅读 2,283评论 0 50
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,804评论 18 399
  • 看了标题也许不太清楚,所以先上两张 滴滴 的截图,对比一下: 应该可以明显的看到,第一张图中红色框中的“分钟”两个...
    齐小政阅读 14,530评论 11 38
  • 疲累的双眼打着架 亢奋的大脑抽着风 夜不能寐,往事翻腾 点点滴滴的倒放 让心一丝丝揪紧 充满了悔恨与落寞 我也快忘...
    大橘子_7983阅读 367评论 0 2