程序错误:
学习struts框架时,关于文件下载部分,利用struts中的stream结果类型来实现,配置完成之后,运行程序,报错如下:
HTTP Status 500 - Can not find a java.io.InputStream with the name [downFile] in the invocation stack. Check the <param name="inputName"> tag specified for this action.
错误分析:
1、struts.xml配置文件中关于action部分的配置不对
<action name="downloadfile" class="com.shengsiyuan.struts2.DownloadAction"> <result name="success" type="stream"> <param name="contentDisposition">attachment;filename="BeginLinuxProgramming.pdf"</param> <param name="inputName">downFile</param> </result> <action>
特别注意:inputName中指定的参数对应于Action中的相应的返回InputStream的get方法
public InputStream getDownloadFile(){}
底层的原理是基于struts的valuestack+反射原理自动实现get/set方法。
2、指定文件路径下,不存在指定的文件
3、get方法中返回InputStream的方法不对,方法本身可能返回为null
InputStream is=ServletActionContext.getServletContext().getResourceAsStream("D:\\BeginLinuxProgramming.pdf");
如果使用getServletContext方法,网上的说法是文件必须保存在ServletContext中,千辛万苦实在不知道如何保存到servletContext中,直接改为:
File file = new File("D:\\BeginLinuxProgramming.pdf"); InputStream fileIStream = null; try { fileIStream= new FileInputStream(file); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return fileIStream;