私のTomcat7デプロイメントで、本当に奇妙なことが起こっています。それか、私はあまりにも疲れています。これがスキニーです...
Eclipse(Juno)を介して開発している非常に単純なTomcat7Webアプリがあります。私のJSPファイルの1つにフォームが含まれています。フォームが送信されると、サーブレットはデータベースにクエリを実行し、session.setAttributeを介して2つのパラメータを同じjspに返します。
すべて正常に動作しますが、サーブレットをいじり始めると、JSPページで突然HTTP500エラーが発生します。私がそれを解決することができた唯一の方法は、JSPからすべてのJava関連のコンテンツを削除し、それをゆっくりと追加して更新するという奇妙な儀式を通過することです。これがTomcatの問題なのか、サーブレットの問題なのか、Firefoxの問題なのか、それとも上記の組み合わせなのかわかりません。
わかりやすくするために、以下にいくつかのコードスニペットを示します。
Jspコード:
<html>
...
<body>
<script type='text/javascript'>
var searchResults = '<%= ((String[][])session.getAttribute("searchResults")).length %>';
var additionalResults = '<%= session.getAttribute("additionalResults") %>';
...
</script>
...
</body>
</html>
Tomcatエラー:
org.apache.jasper.JasperException: An exception occurred processing JSP page /test.jsp at line 32
30: <body>
31: <script type='text/javascript'>
32: var searchResults = '<%= ((String[][])session.getAttribute("searchResults")).length %>';
33: var additionalResults = '<%= session.getAttribute("additionalResults") %>';
34:
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
root cause
java.lang.NullPointerException
org.apache.jsp.test_jsp._jspService(test_jsp.java:93)
私は、データベースが適切な値を返していることをFACTで知っているので、32行目で例外やNullPointerをスローするべきではありません。93行目は単純です。
<div id="wrapper">
32行目がコメントアウトされるとTomcatエラーが発生することもありますか?!?!
デバッグを試みるために、スクリプトタグの内容を次のように簡略化しました。
alert('<%= session.getAttribute("searchResults") %>');
そして、サーブレットを編集して次のようにしました。
public class MyServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String redirectedPage = "/test.jsp";
request.getSession().setAttribute("searchResults", "Bob");
RequestDispatcher reqDispatcher = getServletConfig().getServletContext().getRequestDispatcher(redirectedPage);
reqDispatcher.forward(request,response);
}
}
しかし、結果のポップアップには「null」が表示されます。また、MySQLとTomcatをさまざまな順序で何度も再起動してみました。
だから私は何が起こっているのか完全に途方に暮れています。任意の入力をいただければ幸いです。