• 程序错误

学习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部分的配置不对

    
     
p_w_upload;filename="BeginLinuxProgramming.pdf"    
downFile    

特别注意: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 blocke.printStackTrace();}return fileIStream;