ฉันหวังว่าคุณจะสามารถช่วยฉันในการแก้ไขปัญหานี้:
ฉันสร้างเว็บแอปพลิเคชันอย่างง่ายโดยใช้ NetBeans ณ ตอนนี้ มันเป็นพื้นฐานมาก
- เซิร์ฟเล็ตได้รับการร้องขอในรูปแบบ
/verificon/*
url - มันจะแยกสตริงใดก็ตามที่ตั้งไว้หลัง
/verificon/
เช่น หาก url เป็นhttp://domain/context/verificon/blahblah
มันจะแยกblahblah
- จะตรวจสอบว่าสตริงดังกล่าวเป็นสตริงที่รู้จักหรือไม่ และเพียงแสดง 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 ของเซิร์ฟเล็ตเป็นการเรียก rd.forward() ที่ส่วนท้ายของเมธอด processRequest และบรรทัด 70 เป็นเพียงการเรียกไปยัง processRequest() จากเมธอด doGet หมายเหตุ 2: ทุกอย่างทำงานได้ตามที่คาดไว้หากฉันแสดงความคิดเห็นในส่วนไปข้างหน้าและไม่แสดงข้อคิดเห็นในส่วน PrintWriter หมายเหตุ 3: resultado.jsp เป็นหน้า HTML ธรรมดาที่มีแท็กประเภท def, html, head และ body ที่เหมาะสม และสิ่งนี้: <%boolean valido = (boolean)request.getAttribute("valido");%>
...
<% if(valido) {%>
<p>Válido</p>
<% } else {%>
<p>Inválido</p>
<% }%>