`

struts2文件下载出现Can not find a java.io.InputStream with the name的错误

 
阅读更多

 今天在用struts2实现文件下载时出现如下错误:

Servlet.service() for servlet default threw exception   
java.lang.IllegalArgumentException: Can not find a java.io.InputStream with the name [imageStream] in the invocation stack. Check the <param name="inputName"> tag specified for this action.   
at org.apache.struts2.dispatcher.StreamResult.doExecute(StreamResult.java:189)   
at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:178)   
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:348)   
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253)   
at com.best.top.validate.TopInterceptor.intercept(TopInterceptor.java:47)   
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)   
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)   
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)   
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)   
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50)   
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:504)   
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)  

 说实话这个提示真有误导人的嫌疑,刚开始还以为是名称不对。然后查看StreamResult的源代码才发现是因为InputStream为null的缘故。看下源码:

if (inputStream == null) {   
     // Find the inputstream from the invocation variable stack  
     inputStream = (InputStream) invocation.getStack().findValue(conditionalParse(inputName, invocation));   
     }   
  
if (inputStream == null) {   
     String msg = ("Can not find a java.io.InputStream with the name [" + inputName + "] in the invocation stack. " +   
         "Check the <param name=\"inputName\"> tag specified for this action.");   
     LOG.error(msg);   
     throw new IllegalArgumentException(msg);   
            }  

 大家如果也碰到此类问题,直接打印
InputStream in=ServletActionContext.getServletContext().getResourceAsStream(realPath);
System.out.println(in);
如果打印为NULL的话,问题得以解决,问题的原因是这个流的realPath路径错误。

 

分享到:
评论

相关推荐

    java.io.Reader 和 java.io.InputStream 的区别

    ### Java.io.Reader与Java.io.InputStream的关键差异解析 在深入探讨`java.io.Reader`与`java.io.InputStream`的具体差异之前,我们首先需要理解这两者在Java I/O操作中的基础角色。`java.io.Reader`和`java.io....

    Java.nio 与Java.io比较

    在探讨Java.nio与Java.io之间的比较时,我们首先需要理解这两个包在Java编程语言中的核心作用和它们各自的优势。Java.io和Java.nio是Java中处理输入/输出操作的两个主要框架,它们各自拥有独特的特性和应用场景。 #...

    java.io的基础应用

    在Java中,IO操作主要分为字节流和字符流两大类,分别由`java.io.InputStream`和`java.io.OutputStream`以及`java.io.Reader`和`java.io.Writer`作为基类。字节流处理的是8位的字节,而字符流处理的是16位的Unicode...

    rxtx-2.1.7.jar串口通信gnu.io包不存在问题

    在Java编程环境中,进行串口通信时,常常会遇到一个问题:缺少`gnu.io`包,导致无法正常编译或运行程序。这个问题主要出现在使用RXTX库进行串口操作的项目中。RXTX是一个开源的Java库,它提供了与硬件进行串行通信的...

    android 串口驱动

    import java.io.InputStream; import java.io.OutputStream; import android.util.Log; public class SerialPort { private static final String TAG = "SerialPort"; /* * Do not remove or rename the ...

    java.io包详细解说

    【Java IO包详解】 Java IO包是Java标准库中的核心组件之一,主要用于处理输入和输出操作。这个包包含了大量类和接口,它们提供了各种输入输出流、字符编码、数据转换以及文件操作等功能。Java IO的设计采用了...

    xml2jsonjar包

    import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; ...

    Struts2上传文件出错

    import java.io.InputStream; import java.io.OutputStream; import java.util.List; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class ...

    org.apache.commons.io.FileUtils

    Apache Commons IO库中的`org.apache.commons.io.FileUtils`类是一个非常实用的工具类,它提供了大量方便、高效的方法,用于处理文件系统操作。这个类在Java开发中被广泛使用,尤其是在处理大量的文件读写和管理任务...

    java.io的吐血实用例子

    在Java编程语言中,`java.io`包是用于输入/输出(I/O)操作的基础部分,包含了许多类和接口,使得开发者能够处理数据流、字符流、对象序列化、磁盘文件以及网络连接等任务。本篇文章将深入探讨`java.io`包中的关键概念...

    JBuider第八章:Java.io包.rar

    Java.io包是Java编程语言中的核心包之一,它包含了用于输入/输出操作的类和接口。这个包在Java中扮演着至关重要的角色,因为它提供了处理数据流、字符流、对象序列化、文件读写以及与操作系统交互的各种工具。在本...

    Struts2文件上传与下载

    Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括处理用户表单提交、进行文件上传和下载。在Web应用中,文件上传和下载是常见的需求,例如用户上传头像、下载文档等。Struts2通过其Action类和...

    java.io详解

    ### Java IO流详解 #### 一、Java IO流概述 Java IO流是Java标准库中的一个重要组成部分,主要用于处理数据的输入输出操作。根据处理的数据类型不同,Java IO流被分为两大类:字节流(byte streams)和字符流...

    java结合struts的上传下载文件

    本篇将重点讲解如何利用Java和Struts框架实现文件的上传与下载功能。 一、文件上传 1. **配置Struts2核心配置文件**: 在`struts.xml`中添加上传配置,声明一个`action`用于处理文件上传请求。例如: ```xml ...

    java常用的工具类整理28个

    19. **java.io.InputStream**和**java.io.OutputStream**:所有字节流的基类,提供了基本的读写操作。 20. **java.io.Reader**和**java.io.Writer**:所有字符流的基类,用于处理字符数据。 21. **java.io....

    Java IO commons-io-2.5.jar

    Java IO 是Java编程语言中处理输入/输出流的重要部分,它是连接程序与外部世界的桥梁,允许数据在程序和外部资源之间流动。`commons-io-2.5.jar` 是Apache Commons项目的一部分,它提供了一系列增强和扩展了Java标准...

    Java多个文件根据URL下载后打包zip导出.zip

    在Java编程中,有时我们需要从网络上下载多个文件并将其打包为一个压缩文件,例如ZIP格式,以便于存储或分发。这个过程涉及到文件I/O操作、网络请求以及压缩算法的使用。以下是对这个场景的详细说明: 1. **网络...

    使用Java API进行tar.gz文件及文件夹压缩解压缩.docx

    import java.io.InputStream;import java.nio.file.Path;import java.nio.file.Paths;import java.util.Enumeration;public class TarGzExtractTest { @Test void testExtractTarGzip() throws IOException { // ...

    java项目超市

    import java.io.InputStream; import java.io.InputStreamReader; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; ...

Global site tag (gtag.js) - Google Analytics