を要求を転送するとき、私はあなたが私が直面しています。この問題で私を助けることを願って:無限ループJavaサーブレットで
私は、NetBeansを使用して簡単なWebアプリケーションを作成しました。 今のところ、非常に基本的です。
- サーブレットは、
/verificon/*
URLパターンでリクエストを受信します。 /verificon/
の後に設定された文字列を抽出します。つまり、URLがhttp://domain/context/verificon/blahblah
の場合、blahblah
が抽出されます。- このような文字列が既知の文字列かどうかを確認し、結果がtrueまたはfalseのjspを表示するだけです。
テスト文字列を使用してアプリケーションを実行している場合しかし、それはあるような単純なように、私は次のエラーを取得する:
javax.servlet.ServletException:
The server side component of the HTTP Monitor has detected a java.lang.StackOverflowError.
This happens when there is an infinite loop in the web module.
Correct the cause of the infinite loop before running the web module again.
org.netbeans.modules.web.monitor.server.MonitorFilter.rethrow(MonitorFilter.java:1648)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:473)
mx.tegu.kdor.web.iu.ServletVerificon.processRequest(ServletVerificon.java:51)
mx.tegu.kdor.web.iu.ServletVerificon.doGet(ServletVerificon.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
mx.tegu.kdor.web.iu.ServletVerificon.processRequest(ServletVerificon.java:51)
mx.tegu.kdor.web.iu.ServletVerificon.doGet(ServletVerificon.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
mx.tegu.kdor.web.iu.ServletVerificon.processRequest(ServletVerificon.java:51)
mx.tegu.kdor.web.iu.ServletVerificon.doGet(ServletVerificon.java:70)
...
は、その後、それだけで自分自身を繰り返し続けます。
サーブレットのprocessRequestメソッドは次のとおりです。 TestData
は、文字列がわかっている場合はMapeo
オブジェクトを返し、そうでない場合はnull
を返します。
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String h = request.getRequestURI().replaceFirst(request.getContextPath() + "/verificon/", "");
TestData td = TestData.getInstance();
Mapeo m = td.getMapeo(h);
boolean valido = false;
if(m != null) {
valido = true;
}
request.setAttribute("valido", valido);
/*
PrintWriter out = response.getWriter();
out.write("Válido?: " + valido);
out.close();
*/
String respuesta = "WEB-INF/jsp/resultado.jsp";
// Como regla general, forward se utiliza para los GET y sendRedirect para los POST
RequestDispatcher rd = request.getRequestDispatcher(respuesta);
rd.forward(request, response);
}
すべてのヘルプは本当に感謝しています。
追加情報が必要な場合は、教えてください。
ありがとうございました!
注1:サーブレットの51行目はprocessRequestメソッドの最後にrd.forward()を呼び出し、70行目は単にdoGetメソッドからprocessRequest()を呼び出すだけです。注2:前方セクションにコメントし、PrintWriterセクションのコメントを外すと、すべてが正常に機能します。 注3:resultado.jspは適切なデフDOCTYPE、htmlの、頭と体のタグとプレーンなHTMLページであり、この: <%boolean valido = (boolean)request.getAttribute("valido");%> ... <% if(valido) {%> <p>Válido</p> <% } else {%> <p>Inválido</p> <% }%>
PFFは、私はそれを逃した信じることができません!これで私を助けてくれてありがとう!また、ELの提案に感謝します。 – ahpoblete
ようこそ。 – BalusC