Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 下载文件时获取附加有文件内容的jsp源代码_Java_Jsp_Jboss_Struts2_Weblogic - Fatal编程技术网

Java 下载文件时获取附加有文件内容的jsp源代码

Java 下载文件时获取附加有文件内容的jsp源代码,java,jsp,jboss,struts2,weblogic,Java,Jsp,Jboss,Struts2,Weblogic,我正在使用Struts2框架在Java中开发一个文件上传/下载功能,我们可以通过远程服务器路径上传和下载文件。当我在本地机器上检查功能时,所有这些似乎都正常工作,本地路径是我下载文件和上传任何格式文件的目标路径。开发环境有JBoss服务器。 但是,当我在prod env上运行相同的程序时,应用程序部署在Weblogic server中,文件.txt、.csv、.html(基本上是文本格式文件)将我的jsp源代码附加到文件内容中。 以下是我用于下载的代码: BufferedOutputStream

我正在使用Struts2框架在Java中开发一个文件上传/下载功能,我们可以通过远程服务器路径上传和下载文件。当我在本地机器上检查功能时,所有这些似乎都正常工作,本地路径是我下载文件和上传任何格式文件的目标路径。开发环境有JBoss服务器。 但是,当我在prod env上运行相同的程序时,应用程序部署在Weblogic server中,文件.txt、.csv、.html(基本上是文本格式文件)将我的jsp源代码附加到文件内容中。 以下是我用于下载的代码:

BufferedOutputStream bout=null;
FileInputStream inStream = null;
byte[] buffer = null;

try {   
    inStream = new FileInputStream(path+File.separator+filename);       
    buffer = new byte[8192];
    String extension = "";
    int pos = filename.lastIndexOf(".");
    if (pos > 0) 
        extension = filename.substring(pos+1);

    int bytesRead = 0, bytesBuffered = 0;   

    response.setContentType("application/octet-stream");
    response.setHeader("content-disposition", "attachment; filename="+ filename);               
    bout = new BufferedOutputStream(response.getOutputStream());

    while((bytesRead = fistrm.read(buffer)) > -1){                  
        bout.write(buffer, 0, bytesRead);
        bytesBuffered += bytesRead;
        if(bytesBuffered > 1048576){
            bytesBuffered = 0;
            bout.flush();
        }

    }           
} catch (IOException e) {
    log.error(Logger.getStackTrace(e));         
} finally {             
    if(bout!=null){
        bout.flush();
        bout.close();
    }
    if(inStream!=null)
        inStream.close();               

}   
我尝试过对扩展使用不同的响应内容类型,但没有任何帮助。 似乎outputstream甚至在从inputstream写入之前就已经包含了jsp源代码


有人能提出一个解决方案并解释为什么会发生这种情况吗?

之所以会发生这种情况,是因为您直接在outputstream中编写,然后返回一个struts结果,即您的JSP。您正在使用一个动作,就好像它将是一个servlet,而不是

在Struts2中,要实现您的目标,您需要使用类型,如以下答案所述:

否则,如果您想绕过框架机制,自己手动写入outputStream(在极少数情况下它是有用的,),那么必须返回

从Action类方法返回
ActionSupport.NONE
(或null)将导致跳过结果处理。如果操作完全处理结果处理,例如直接写入HttpServletResponse OutputStream,这将非常有用


但我强烈建议您使用流结果,即标准方式。

谢谢您的回复@Andrea Ligios。返回null而不是jsp页面似乎是可行的。更让我困惑的是,为什么它在我的本地环境中工作而不在prod环境中工作。是不是因为JBoss有某种处理方法。我将尝试使用您提到的流结果方式。