Saya harap Anda dapat membantu saya dengan masalah yang saya hadapi ini:
Saya membuat aplikasi web sederhana menggunakan NetBeans. Untuk saat ini, ini adalah hal yang sangat mendasar.
- Sebuah servlet menerima permintaan pada pola url
/verificon/*
. - Ini mengekstrak string apa pun yang disetel setelah
/verificon/
, yaitu jika urlnyahttp://domain/context/verificon/blahblah
, ia mengekstrakblahblah
. - Ia memeriksa apakah string tersebut adalah string yang dikenal, dan hanya menampilkan jsp dengan hasilnya (benar/salah).
Namun, sesederhana itu, saya mendapatkan kesalahan berikut saat menjalankan aplikasi dengan string pengujian:
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)
...
Lalu hal itu terus terulang kembali.
Metode processRequest servlet saya adalah sebagai berikut. TestData
tidak lain adalah kelas pembantu yang mengembalikan objek Mapeo
jika stringnya diketahui atau null
jika tidak.
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);
}
Bantuan apa pun sangat dihargai.
Jika ada informasi tambahan yang perlu Anda ketahui, tolong beri tahu saya.
Terima kasih!
Catatan 1: Baris 51 dari servlet adalah panggilan ke rd.forward() di akhir metode processRequest, dan baris 70 hanyalah panggilan ke processRequest() dari metode doGet. Catatan 2: Semuanya berfungsi seperti yang diharapkan jika saya mengomentari bagian penerusan dan menghapus komentar pada bagian PrintWriter. Catatan 3: resultado.jsp adalah halaman HTML biasa dengan tag doctype def, html, head dan body yang tepat dan ini: <%boolean valido = (boolean)request.getAttribute("valido");%>
...
<% if(valido) {%>
<p>Válido</p>
<% } else {%>
<p>Inválido</p>
<% }%>