这是 action
public class DownloadAction extends ActionSupport{
private String nameXXXX;
private String XXXX;
get/set
public String getDownloadType(){
String type=nameXXXX.substring(nameXXXX.indexOf(".")+1);
if(type.equals("avi")){
return "video/x-msvideo";//从tomcat中得到的
}
else{
return null;
}
}
public String getDownloadDisposition(){
XMLClass x=new XMLClass();
List list=x.ShowInMonitor(XXXX,nameXXXX);
String Yaddress=(String)list.get(1);//这3行为得到文件名


String name="filename=\""+Yaddress+"\"";
System.out.println(name);
return name;

}

public InputStream getDownloadFile(){
XMLClass x=new XMLClass();
List list=x.ShowInMonitor(XXXX,nameXXXX);
String Yaddress=(String)list.get(1);//得到文件名
return ServletActionContext.getServletContext().getResourceAsStream("/upload/"+Yaddress);
} @Override
public String execute() throws Exception {
System.out.println("AAAAAAAAAAAAAAAAAAASSSSSSSSSSSSSSSSSSSSSSSSDDDDDDDDDDDDDD");
return "success";
}
}这是struts.xml
<action name="Download" class="action.DownloadAction">
<result name="success" type="stream">
<param name="contentType">downloadType</param>
<param name="contentDisposition">downloadDisposition</param>
<param name="inputName">downloadFile</param>
</result>
</action>这是jsp
<s:a href="Download.action?XXXX=Schoolteachingview&nameXXXX=<%=name%>">下载</s:a>
问号后传的值是为了求出文件名称的运行后出现错误
HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException: java.lang.IllegalArgumentException: Can not find a java.io.InputStream with the name [downloadFile] in the invocation stack. Check the <param name="inputName"> tag specified for this action.
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)
root cause java.lang.IllegalArgumentException: Can not find a java.io.InputStream with the name [downloadFile] in the invocation stack. Check the <param name="inputName"> tag specified for this action.
org.apache.struts2.dispatcher.StreamResult.doExecute(StreamResult.java:189)
org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:178)
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:348)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253)

解决方案 »

  1.   

    <s:a href="Download.action?XXXX=Schoolteachingview&nameXXXX= <%=name%>">
    引用Struts的标签是否不需要.action后缀?试下改成:<s:a href="Download?XXXX=Schoolteachingview&nameXXXX= <%=name%>">
      

  2.   

    删除了 就出现这个错误
    HTTP Status 404 - /ClassL/pages/Download
      

  3.   

    ServletActionContext.getServletContext().getResourceAsStream("/upload/"+Yaddress); 
    是这一行的错误在你相应的目录下,有你要下载的文件么?或者文件名错了,比如说扩展名没对,你在系统内将扩展名隐藏了,
    使得你得到错误的文件名
      

  4.   

    现在发现个问题
    这行
     <s:a href="Download.action?XXXX=Schoolteachingview&nameXXXX= <%=name%>"> 
    的nameXXXX没在action里取到值
    这是为什么
    action里已经有get/set方法了 而且XXXX的值能取到!