您不应该为此使用JSP。它是一种视图技术,它提供了一个基于文本的模板,可以将HTML/CSS/JS代码放入并利用taglib(JSTL等)和EL(表达式语言,${}
事物)与后端Java代码交互。
TIFF图像不是字符(文本)数据。这是一个二进制数据。你真的需要为此使用一个servlet。您不应该使用Writer
方法返回二进制数据。你应该为此使用OutputStream
方法。否则,二进制数据将被破坏(这也是JSP中发生的情况,因为它在引擎盖下使用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());
}
地图这个servlet上的url-pattern
例如/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" %>
<%
//...
%>
尽管如此,这与我所处理的完全不同。一个JSP和一个Servlet是两个完全不同的东西。我无法在JSP上使用内联代码的响应对象。是否有另一种方法来设置响应类型? – YYY 2010-05-13 17:57:31
像有人说过的,使用servlet – Midhat 2010-05-13 18:30:46