有些应用我们要下载文件,而不是直接在浏览器中打开,我们在STURTS2中的配置方式是:
- public class FileDownloadAction implements Action {
- private String inputPath;
- public void setInputPath(String value) {
- inputPath = value;
- }
- //在这里的这个getInputStream中的inputStream是和配置文件中的inputName名字对应,这样STRUTS2就能根据配置文件中的文件去找到该文件流,注意,如果是提供文件下载,该文件必须是放在你的系统项目的某个文件夹中。
- public InputStream getInputStream() throws Exception {
- return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
- }
- public String execute() throws Exception {
- return SUCCESS;
- }
- }
配置文件:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <package name="filedownload" extends="struts-default" namespace="/filedownload">
- <default-action-ref name="download"/>
- <action name="download" class="org.apache.struts2.showcase.filedownload.FileDownloadAction">
- <!--个人认为param是从ValueStack里取值,但不知道能否在配置文件里往ValueStack设值 --!>
- <param name="inputPath">/images/struts.gif</param>
- <result name="success" type="stream">
- <param name="contentType">image/gif</param>
- <param name="inputName">inputStream</param>
- <param name="contentDisposition">filename="struts.gif"</param>
- <param name="bufferSize">4096</param>
- </result>
- </action>
- <action name="download2" class="org.apache.struts2.showcase.filedownload.FileDownloadAction">
- <param name="inputPath">/images/struts-gif.zip</param>
- <result name="success" type="stream">
- <param name="contentType">application/zip</param>
- <param name="inputName">inputStream</param>
- <param name="contentDisposition">filename="struts-gif.zip"</param>
- //在这里还可以配置一个attachment;比如attachment; filename="struts-gif.zip这样浏览器就不会直接打开该文件,而是提供下载的方式。
- <param name="bufferSize">4096</param>
- </result>
- </action>
- </package>
- </struts>