入门与该文件内容附加在jsp源代码当我下载文件(Getting the jsp source cod

2019-10-23 02:28发布

我使用的Struts2框架,在那里我们上传到并从远程服务器下载路径工作的文件上传/下载功能,在Java。 一切似乎很好地工作,当我在我的本地机器与本地路径从我在哪里下载命中注定的路检查功能,并到我上传任何格式的文件。 开发环境有JBoss服务器。 但是,当我在督促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源代码。

任何人都可以请提出一个解决方案,并解释为什么会出现这种情况?

Answer 1:

它正在发生,因为你是在OutputStream的直接写入,然后返回一个支柱造成的,这是你的JSP。 您正在使用的动作,就好像它是一个servlet,这是没有的。

在Struts2,实现你的目标, 你需要使用流结果类型,如下面的答案中描述:

  • https://stackoverflow.com/a/16300376/1654265

  • https://stackoverflow.com/a/16900840/1654265

否则 ,如果你想绕过框架机制和手动写入由自己的OutputStream(有非常罕见的情况下,它是有用的, 如下载动态创建ZIP ),那么你就必须返回NONE结果

返回ActionSupport.NONE从Action类方法(或空)使得要被跳过的结果的处理。 这是有用的,如果动作完全处理结果处理,如直接写入HttpServletResponse的OutputStream中。

但我强烈建议你用流的结果,该标准的路要走。



文章来源: Getting the jsp source code appended with the file content when I download files