문제

좋아요, 저는 이 사이트에 가입한 후 처음으로 StackOverflowError를 겪었고 이것이 필수 게시물이라고 생각했습니다 :-).내 환경은 Seam 2.0.1.GA, JBoss 4.2.2.GA이고 JSF를 사용하고 있습니다.기존 사이트에서 사용되는 일부 기존 JSP 태그를 활용하기 위해 Facelets 보기에서 JSP로 변환하는 중입니다.faces-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]. [/]. [/]. ApplicationHttpRequest.java:210) at org.apache.catalina.core.applicationhttprequest.getAttribute (org.apache.catalina.core.applicationhttprequest.getAttribute (httprequest.appreatich.appeatich.appeat. .core.applicationhttprequest.getAttribute (applacthttprequest.java:222) ...

내 faces-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>
도움이 되었습니까?

해결책

나는 이 문제를 알아낼 수 있었다.분명히 Javax.faces.DEFAULT_SUFFIX에 대해 Faces Servlet url-pattern(*.jsp)과 동일한 매개변수 값 .jsp를 갖도록 web.xml을 구성할 수 없습니다.URL 패턴을 다음으로 변경하면 .jspx 또는 /whateverdirnameyouwant/ 스택 오버플로 오류 없이 애플리케이션이 시작됩니다.(메모:핵심은 DEFAULT_SUFFIX와 Faces Servlet url-pattern이 무엇이든 관계없이 동일할 수 없다는 것입니다.) 이것이 이 특정 문제를 경험하는 다른 사람에게 도움이 되기를 바랍니다.

다른 팁

Java의 스택 오버플로는 거의 항상 무한 재귀/메서드 호출로 인해 발생합니다.귀하의 경우 스택 추적을 보면 충돌이 발생할 때까지 'getAttribute()'가 반복적으로 호출되는 것으로 보입니다.나는 귀하가 사용하고 있는 특정 환경에 대해 잘 알지 못하지만 이러한 유형의 동작(예: 서로 호출하는 두 가지 메서드)이 있는지 .jsp 코드를 확인하는 것이 좋습니다.

그래서 비슷한 오류가 발생했습니다.나에게는 JSF 프로젝트가 있었고 파일 확장자를 조작하고 있었습니다.우선 확장자가 .jsp인 모든 웹 파일이 있었습니다.이것은 효과가 있었지만 모두 .jsf이기를 원했고 그 후에는 .xhtml을 사용했습니다.그 과정에서 내 web.xml 파일은 xhtml과 jsf를 수용하도록 변경되었습니다.web.xml 파일을 변경하면 문제가 없습니다.StackOverflowError가 발생한 이유는 header.jsf를 가리키는 ui.include 태그가 있는 index.xhtml이 있었기 때문입니다.그래서 jsf 파일을 가리키는 xhtml 파일이 있었습니다.나는 web.xml이 이것을 처리할 수 있을 것이라고 생각했지만 그렇지 않았습니다. StackOverflowError가 발생했습니다.따라서 이 문제를 해결하기 위해 이제 모든 JSF 파일의 확장자는 .xhtml이고 중첩된 ui:include 태그는 .xhtml 파일을 가리킵니다.

하지만 반대로, 브라우저 URL은 index.jsp, index.jsf, index.xhtml을 잘 처리할 수 있습니다.따라서 web.xml(jsp, jsf 및 xhtml에 대한 서블릿 매핑 포함)은 브라우저 URL을 잘 처리하지만 위에서 강조한 문제에 대해서는 처리하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top