0

次のメソッドで RequestDispatcher.include() を使用して、JSP ページのレンダリングを出力しようとしています。

public static String readTemplate(HttpServletRequest request, HttpServletResponse response, String template) {
    HttpServletResponseWrapper responseWrapper = new HttpServletResponseWrapper(response) {
        private final StringWriter sw = new StringWriter();

        @Override
        public PrintWriter getWriter() throws IOException {
            return new PrintWriter(sw);
        }

        @Override
        public String toString() {
            return sw.toString();
        }
    };

    String templateFile = "/templates/" + template + ".jsp";
    logger.log(Level.INFO, "Reading template {0} ...", templateFile);

    try {
        request.getRequestDispatcher(templateFile).include(request, responseWrapper);

    } catch (ServletException | IOException | IllegalStateException e) {
        logger.log(Level.SEVERE, e.getMessage());
    }

    logger.log(Level.INFO, "Completed reading template {0}", templateFile);

    // retrieve HTML from response
    return responseWrapper.toString();
}

このメソッドは、Tomcat8 で実行しているサーブレットの一部です。これは最初は完全に機能しますが、2 回目の実行でインクルード呼び出しでハングします (つまり、ブラウザーで更新をクリックした場合)。

ディスパッチャーが null でないことは既に確認済みです。

これは、catalina.log から確認できる内容です (レビュー用にクリーンアップされています)。

ファーストラン:

26-Feb-2015 17:41:17.921 INFO [http-nio-8081-exec-2] ism.Reports.readTemplate Reading template /templates/INCIDENT_REPORT.jsp ...
26-Feb-2015 17:41:18.046 INFO [http-nio-8081-exec-2] ism.Reports.readTemplate Completed reading template /templates/INCIDENT_REPORT.jsp

2 回目の実行 (応答が返されない、つまり、ブラウザーは常にページを読み込んでいます):

26-Feb-2015 17:41:26.327 INFO [http-nio-8081-exec-8] ism.Reports.readTemplate Reading template /templates/INCIDENT_REPORT.jsp ...

これは、Tomcat を再起動するまで変わりません。

誰かが私が間違っていること、または少なくともこれをデバッグする方法を説明できますか? ありがとう!

編集1:メソッドが静的であると言うのを忘れましたが、静的ではないものにしてみましたが、違いはありませんでした

4

1 に答える 1

0

上記のコードは機能しており、問題がどこにあるのかわかりました。含まれている JSP ページは多くの MySQL 接続を開いていましたが、閉じられたのは 1 つだけでした。したがって、2 番目の要求は、タスクを実行する前に MYSQL リソースが解放されるのを待っていました。今まで気が付かなかったこと、そしてそもそも MySQL 接続について言及していなかったことを非常に残念に思います。ここで返信を受け取らなかったため、JSP ファイル自体で解決策を見つけたようです。

于 2015-02-27T13:44:24.367 に答える