javax.servlet.ServletException: PWC1232: превышена максимальная глубина отправки вложенных запросов: 20

Я создал простой проект Java Dynamic Web в Eclipse. Я размещаю свой проект на Glassfish 2.1.1. Когда я пытаюсь открыть p1.jsf страницу в браузере, я получаю следующую ошибку: javax.servlet.ServletException: PWC1232: Exceeded maximum depth for nested request dispatches: 20.

Я понятия не имею, как исправить эту ошибку...

Вот майское p1.jsf определение:

 <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
 <%@ taglib prefix="f"  uri="http://java.sun.com/jsf/core"%>
 <%@ taglib prefix="h"  uri="http://java.sun.com/jsf/html"%>
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
 <title>Insert title here</title>
 </head>
 <body>
 <f:view>
  <h:outputLabel value="outputLabel"></h:outputLabel>
 </f:view>
 </body>
 </html>

Мой web.xml:

 <?xml version="1.0" encoding="UTF-8"?>
 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
   <display-name>web4</display-name>
   <welcome-file-list>
     <welcome-file>index.html</welcome-file>
     <welcome-file>index.htm</welcome-file>
     <welcome-file>index.jsp</welcome-file>
     <welcome-file>default.html</welcome-file>
     <welcome-file>default.htm</welcome-file>
     <welcome-file>default.jsp</welcome-file>
   </welcome-file-list>
   <servlet>
     <servlet-name>FacesServlet</servlet-name>
     <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
     <load-on-startup>1</load-on-startup>
   </servlet>
   <servlet-mapping>
     <servlet-name>FacesServlet</servlet-name>
     <url-pattern>*.jsf</url-pattern>
   </servlet-mapping>
 </web-app>

Мои лица-config.xml:

<?xml version="1.0" encoding="UTF-8"?>

<faces-config
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
    version="1.2">

</faces-config>

Сведения об ошибке из журнала Glassfish:

PWC1406: Servlet.service() for servlet FacesServlet threw exception javax.servlet.ServletException: PWC1232: Exceeded maximum depth for nested request dispatches: 20
 org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:860)
 org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:723)
 org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:558)
 org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:490)
 org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:382)
 com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:410)
 com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:468)
 com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:140)
 com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
 com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
 com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
 javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
 org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:427)
 org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:873)
 org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:723)
 org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:558)
 org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:490)
 org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:382)
 com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:410)
 com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:468)
 com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:140)
 com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
 com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
 com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
 javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
 org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:427)
 org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:873)
 org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:723)
 org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:558)
 org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:490)
 org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:382)
 com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:410)
 com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:468)
 com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:140)
 com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
 com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
 com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
 javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
 org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:427)
 org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:873)
 org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:723)
 org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:558)
 org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:490)
 org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:382)
 com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:410)
 com.sun.faces.application.ViewHandlerImpl.executePageToBuildView(ViewHandlerImpl.java:468)
 com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:140)
 com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
 com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
 com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
 javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)

person Rafal    schedule 02.01.2010    source источник


Ответы (2)


  1. FacesServlet должен быть сопоставлен с url-pattern из *.jsf (или с чем-то еще, кроме *.jsp).
  2. javax.faces.DEFAULT_SUFFIX не требуется в web.xml, если вы уже используете JSP. Сама страница JSP на самом деле должна называться pagename.jsp (и, следовательно, не pagename.jsf, это основная причина рекурсивных прямых вызовов).
  3. Откройте страницу в веб-браузере, используя суффикс *.jsf: http://example.com/context/pagename.jsf (и, следовательно, не с помощью pagename.jsp, иначе вы получите RuntimeException: FacesContext not found).
person BalusC    schedule 02.01.2010

Это означает, что происходят рекурсивные внутренние перенаправления. Несколько вещей, на которые стоит обратить внимание:

  • убедитесь, что вы заходите на страницу через правильный суффикс. то есть http://localhost:8080/app/p1.jsp, а не p1.page - вы сопоставили суффикс jsf как .jsp
  • проверьте свои правила навигации в файлеfaces-config.xml
  • убедитесь, что у вас определен следующий параметр контекста:

    <context-param>
        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
        <param-value>.jsp</param-value>
    </context-param>
    

Подводя итог - javax.faces.DEFAULT_SUFFIX определяет расширение файла, под которым ищется страница, а <url-pattern> Faces-сервлета определяет способ доступа к страницам jsf клиентами (браузерами)

person Bozho    schedule 02.01.2010
comment
Я захожу на страницу по адресу localhost:18080/web1/p1.jsp. Если я изменю имя файла страницы на p1.jsf и шаблон URL-адреса на ‹url-pattern›*.jsf‹/url-pattern›, у меня все равно возникнет та же проблема. Я добавил Faces-config.xml к вышеуказанному вопросу. - person Rafal; 02.01.2010
comment
но ваш файл называется p1.page ? Если это так, переименуйте его в .jsp - person Bozho; 02.01.2010
comment
Нет, файл был назван p1.jsp. В посте допустил ошибку, извините. - person Rafal; 03.01.2010
comment
затем определите параметр контекста, как указано в моем обновленном ответе - person Bozho; 03.01.2010
comment
Подводя итог, я (1) изменил имя файла веб-страницы на p1.jsf, (2) изменил шаблон URL-адреса в файле web.xml ‹url-pattern›.jsf‹/url-pattern› * и (3) добавлено в файл web.xml ‹context-param›‹param-name›javax.faces.DEFAULT_SUFFIX‹/param-name›‹param-value›.jsf‹/param-value›‹/ контекст-параметр›. У меня нет правил навигации, определенных в Faces-config.xml. К сожалению, я по-прежнему получаю ту же ошибку... Превышена максимальная глубина отправки вложенных запросов. - person Rafal; 03.01.2010
comment
В предыдущем комментарии пункт 2 должен выглядеть так (проблема с форматированием): изменен шаблон URL-адреса в файле web.xml на ‹url-pattern›*.jsf‹/url-pattern› - person Rafal; 03.01.2010