Надеюсь, вы поможете мне решить эту проблему:
Я создал простое веб-приложение с использованием NetBeans.На данный момент он очень простой.
- Сервлет получает запросы по шаблону
/verificon/*
url. - Он извлекает любую строку, установленную после
/verificon/
, т. Е. ЕслиURL был http://domain/context/verificon/blahblah
, он извлекает blahblah
. - Он проверяет, является ли такая строка известной строкой, и просто отображает JSP с результатом (true / false).
Однако, несмотря на всю простоту, я получаю следующую ошибку при запуске приложения с тестовой строкой:
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-страница с правильными тегами doctype def, html, head и body, и это: <%boolean valido = (boolean)request.getAttribute("valido");%>
...
<% if(valido) {%>
<p>Válido</p>
<% } else {%>
<p>Inválido</p>
<% }%>