Сервлет Faces бросил исключение java.lang.StackOverflowError - PullRequest
6 голосов
/ 17 сентября 2008

Хорошо, я столкнулся с моим первым StackOverflowError с тех пор, как присоединился к этому сайту, я решил, что это обязательная запись :-). Моя среда - Seam 2.0.1.GA, JBoss 4.2.2.GA, и я использую JSF. Я нахожусь в процессе преобразования из представления Facelets в JSP, чтобы использовать некоторые существующие теги JSP, используемые на нашем существующем сайте. Я изменил файлы конфигурацииface-config.xml и web.xml и начал получать следующую ошибку при попытке отобразить страницу jsp. У кого-нибудь есть мысли?

2008-09-17 09: 45: 17,537 ОТЛАДКА [Org.jboss.seam.contexts.FacesLifecycle] Начать JSF-запрос для /form_home.jsp 2008-09-17 09: 45: 17,587 ОШИБКА [org.apache.catalina.core.ContainerBase. [jboss.web]. [LocalHost]. [/]. [Лица Servlet]] Servlet.service () для Сервлет Лица Сервлет бросил исключение java.lang.StackOverflowError в org.apache.catalina.core.ApplicationHttpRequest.getAttribute (ApplicationHttpRequest.java:210) в org.apache.catalina.core.ApplicationHttpRequest.getAttribute (ApplicationHttpRequest.java:222) в org.apache.catalina.core.ApplicationHttpRequest.getAttribute (ApplicationHttpRequest.java:222) в org.apache.catalina.core.ApplicationHttpRequest.getAttribute (ApplicationHttpRequest.java:222) ...

Мой файл face-config.xml теперь пуст, без FaceletsViewHandler:

<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xi="http://www.w3.org/2001/XInclude"
 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">

</faces-config>

И мой файл Web.xml:

<?xml version="1.0"?>
<web-app version="2.5" 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-app_2_5.xsd">
 <!-- Ajax4jsf -->
 <context-param>
  <param-name>org.richfaces.SKIN</param-name>
  <param-value>blueSky</param-value>
 </context-param>
  <!-- Seam -->
 <listener>
  <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
 </listener>


 <filter>
  <filter-name>Seam Filter</filter-name>
  <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
 </filter>

 <filter-mapping>
  <filter-name>Seam Filter</filter-name>
  <url-pattern>*.jsp</url-pattern>
 </filter-mapping>

 <servlet>
    <servlet-name>Seam Resource Servlet</servlet-name>
     <servlet-class>org.jboss.seam.servlet.SeamResourceServlet
     </servlet-class>
 </servlet>
 <servlet-mapping>
   <servlet-name>Seam Resource Servlet</servlet-name>
   <url-pattern>/seam/resource/*</url-pattern>
 </servlet-mapping>
 <!-- Seam end --> 

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

 <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsp</url-pattern> 
 </servlet-mapping>

Ответы [ 3 ]

9 голосов
/ 23 сентября 2008

Мне удалось выяснить эту проблему. По-видимому, вы не можете настроить web.xml для того же значения параметра .jsp для Javax.faces.DEFAULT_SUFFIX, что и URL-шаблон сервлета Faces (* .jsp). Если вы измените свой шаблон url на .jspx или на / whatdirnameyouwant / , приложение запустится без ошибок переполнения стека. (примечание: ключ в том, что шаблон URL-адреса DEFAULT_SUFFIX и сервлета Faces не может быть одинаковым независимо от того, кем они являются.) Надеюсь, это поможет любому другому, кто столкнулся с этой конкретной проблемой.

2 голосов
/ 18 сентября 2008

Переполнения стека в Java почти всегда вызваны бесконечными вызовами рекурсии / методов. В вашем случае, учитывая трассировку стека, кажется, что getAttribute () вызывается неоднократно до сбоя. Хотя я не очень хорошо знаком с конкретными средами, которые вы используете, я бы посоветовал проверить ваш код .jsp на предмет любого из этих типов поведения (например, двух методов, вызывающих друг друга)

0 голосов
/ 23 октября 2017

Итак, у меня была похожая ошибка. Для меня это было то, что у меня был проект JSF, и я возился с расширениями файлов. Для начала у меня были все мои веб-файлы с расширением .jsp. Это работало, но потом я хотел, чтобы они были все .jsf, а затем я пошел ва-банк, используя .xhtml. В процессе, мой файл web.xml изменился, чтобы вместить xhtml и jsf. Смена файла web.xml прошла нормально. Что меня поразило StackOverflowError, так это то, что у меня был index.xhtml с тегом ui.include, указывающим на header.jsf. Итак, у меня был файл xhtml, указывающий на файл jsf. Я думал, что web.xml сможет справиться с этим, но это не так, я получил StackOverflowError. Итак, чтобы это исправить, теперь все мои JSF-файлы имеют расширение .xhtml, а вложенные теги пользовательского интерфейса: include указывают на файлы .xhtml.

С другой стороны, URL-адрес браузера может нормально обрабатывать index.jsp, index.jsf, index.xhtml. Таким образом, файл web.xml (с отображениями сервлетов для jsp, jsf и xhtml) прекрасно обрабатывает URL-адрес браузера, но не для того, что выделено моей проблемой выше.

...