Вы не должны использовать JSP для этого. Это технология представления, предоставляющая текстовый шаблон для размещения кода HTML/CSS/JS и средства для взаимодействия с бэкэнд-кодом Java с помощью taglibs (JSTL и т. д.) и EL (язык выражений, ${}
вещи).
Изображение 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" %>
<%
//...
%>
person
BalusC
schedule
13.05.2010