これには JSP を使用しないでください。これは、HTML/CSS/JS コードを配置するためのテキストベースのテンプレートと、taglibs (JSTL など) と EL (式言語など) を使用してバックエンド Java コードと対話するための機能を提供するビュー テクノロジ${}
です。
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
、指定された に TIFF を既に書き込んでいるように見える「ブラック ボックス」APIOutputStream
です。それを利用して、HTTP 応答の 1 つを渡すだけです。
更新: 本当に、本当にこれに JSP を使用する必要がある場合は、サーブレット クラスで行うのと同じコードを JSP で記述できます。ほぼコピペできます。テンプレート テキストをストリームに書き込んでいないことだけを確認してください。これには、スクリプトレットの外側の改行や空白が含まれます。そうしないと、バイナリ ファイルにも書き込まれ、破損します。
複数のスクリプトレット ブロックがある場合は、スクリプトレットの終了%>
と次のスクリプトレットの開始<%
の間に改行がないように配置する必要があります。したがって、例えば
<%@page import="java.io.File" %><%
//...
%>
それ以外の
<%@page import="java.io.File" %>
<%
//...
%>