您不应该为此使用 JSP。它是一种视图技术,提供了一个基于文本的模板来放入 HTML/CSS/JS 代码,以及借助 taglibs(JSTL 等)和 EL(表达语言,${}
事物)与后端 Java 代码交互的设施。
TIFF 图像不是字符(文本)数据。这是一个二进制数据。您确实需要为此使用 servlet。您不应该使用Writer
方法返回二进制数据。您应该OutputStream
为此使用方法。否则二进制数据将被损坏(这也是 JSP 中发生的情况,因为它在后台使用 a Writer
)。
这是一个启动示例,您的 servlet 应如下所示:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String pdfFilename = request.getParameter("filename");
File pdfFile = new File("/path/to/all/pdf/files", pdfFilename);
response.setHeader("Content-Type", "image/tiff");
doYourThingToConvertPdfFileToTiff(pdfFile, response.getOutputStream());
}
url-pattern
例如,将此 servlet 映射到一个,以便您可以通过在链接或浏览器地址栏中甚至在元素的属性中/pdf2tiff
调用它。http://example.com/contextname/pdf2tiff?filename=file.pdf
src
<img>
这doYourThingToConvertPdfFileToTiff
是您的“黑匣子”API,它似乎已经将 TIFF 写入给定的OutputStream
. 只需使用它并传递 HTTP 响应之一。
更新:如果您真的非常需要为此使用 JSP,您可以在 JSP 中编写与在 Servlet 类中相同的代码。您实际上可以复制粘贴它。只需确保您没有将任何模板文本写入流,这包括小脚本之外的换行符和空格。否则它也会被写入二进制文件并损坏它。
如果您有多个 scriptlet 块,则需要对它们进行排列,以便在 scriptlet 的结尾%>
和下一个 scriptlet 的开始之间没有换行符<%
。因此,例如
<%@page import="java.io.File" %><%
//...
%>
代替
<%@page import="java.io.File" %>
<%
//...
%>