Вы не должны использовать JSP для этого. Это технология представления, предоставляющая текстовый шаблон для размещения HTML / CSS / JS-кода и средства для взаимодействия с внутренним Java-кодом с помощью taglibs (JSTL и т. Д.) И EL (Expression Language, вещи ${}
).
Изображение в формате TIFF не является символьными (текстовыми) данными. Это двоичные данные. Вам действительно нужно использовать сервлет для этого. Вы не должны использовать Writer
методы для возврата двоичных данных. Вы должны использовать OutputStream
методы для этого. В противном случае двоичные данные будут повреждены (это также происходит в JSP, так как он используется под капотом Writer
).
Вот пример того, как должен выглядеть ваш сервлет:
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
, например, /pdf2tiff
, чтобы его можно было вызвать с помощью http://example.com/contextname/pdf2tiff?filename=file.pdf
в ссылках или адресной строке браузера или даже в атрибуте src
элемента <img>
.
doYourThingToConvertPdfFileToTiff
- это ваш API "черного ящика", который, кажется, уже записывает TIFF в указанный OutputStream
. Просто используйте его и передайте ответ HTTP.
Обновление : Если вам действительно нужно использовать JSP для этого, вы можете просто написать тот же код в JSP, что и в классе сервлетов. Вы можете практически скопировать его. Только убедитесь, что вы не записываете любой текст шаблона в поток, включая разрывы строк и пробелы за пределами скриптлетов. В противном случае он также будет записан в двоичный файл и испортит его.
Если у вас есть несколько блоков скриптлета, то вам нужно расположить их так, чтобы между окончанием %>
скриплета и началом <%
следующего скриплета не было разрыва строки. Так, например,
<%@page import="java.io.File" %><%
//...
%>
вместо
<%@page import="java.io.File" %>
<%
//...
%>