如何在JSP中从web inf文件夹打开word或pdf

时间:2016-10-19 16:32:49

标签: jsp servlets jboss web-inf

我要求搜索页面中有用户指南链接。当用户点击链接时,需要从JBOSS中部署的WAR中的WEB-INF \ doc文件夹下载Word或PDF文档。

在搜索页面中,有如下链接 下载PDF文件 点击链接后,用户指南文档应从WEB-INF \ doc文件夹下载并打开

搜索谷歌后,我发现我们需要像这样使用

InputStream resourceContent = context.getResourceAsStream("/WEB-INF/doc/foo.doc");

我的应用程序使用JSP和Servlet作为控制器,在这种情况下我需要在doGet方法中编写以下代码

//获取文件的MIME类型         String mimeType = context.getMimeType(filePath);         if(mimeType == null){
            //如果找不到MIME映射,则设置为二进制类型             mimeType =“application / octet-stream”;         }         System.out.println(“MIME type:”+ mimeType);

    // modifies response
    response.setContentType(mimeType);
    response.setContentLength((int) downloadFile.length());

    // forces download
    String headerKey = "Content-Disposition";
    String headerValue = String.format("attachment; filename=\"%s\"", downloadFile.getName());
    response.setHeader(headerKey, headerValue);

    // obtains response's output stream
    OutputStream outStream = response.getOutputStream();

    byte[] buffer = new byte[4096];
    int bytesRead = -1;

    while ((bytesRead = inStream.read(buffer)) != -1) {
        outStream.write(buffer, 0, bytesRead);
    }

    inStream.close();
    outStream.close();    

另外我需要在WEB.XML中配置。

我的理解是点击链接调用Servelt doGet方法下载。

请您帮忙解决这个步骤。

提前致谢

1 个答案:

答案 0 :(得分:0)

是的,实施HttpServlet.doGet()方法

中的逻辑

当我处理类似的要求时(早在2008年),我使用此方法为下载(attachment=true)或直接显示(attachment=false)文档设置正确的HTTP标头:

public static void setDownloadHeaders(HttpServletResponse aRes,
    String aContentType, String aName, boolean anAttachment) {
  if (aRes == null) {
    throw new IllegalArgumentException(
      "HttpServletResponse can't be null.");
  }
  aRes.setContentType(aContentType);
  StringBuffer tmpCd = new StringBuffer(anAttachment ? "attachment;" : 
    "inline;");
  if (aName != null) {
    tmpCd.append(" filename=\"").append(aName).append("\";");
  }
  aRes.setHeader("Content-Disposition", tmpCd.toString());
  aRes.setHeader("Pragma", "public");
  aRes.setHeader("Cache-Control", "max-age=0");
}

您必须正确选择内容类型。在我直接显示PDF的情况下,它是:

setDownloadHeaders(response, "application/pdf", getPdfFileName(), false);

您不需要在web.xml中配置任何特殊内容。一切都应该适合你。