2008-09-17 36 views
6

Ok, tôi đã chạy qua StackOverflowError đầu tiên của tôi kể từ khi tham gia trang web này, tôi đã tìm ra đây là bài đăng phải :-). Môi trường của tôi là Seam 2.0.1.GA, JBoss 4.2.2.GA và tôi đang sử dụng JSF. Tôi đang trong quá trình chuyển đổi từ khung nhìn facelets sang JSP để tận dụng một số thẻ JSP hiện có được sử dụng trên trang web hiện có của chúng tôi. Tôi đã thay đổi các tệp cấu hình faces-config.xml và web.xml và bắt đầu nhận được lỗi sau khi cố gắng kết xuất một trang jsp. Bất cứ ai có bất cứ suy nghĩ?Khuôn mặt Servlet đã ném ngoại lệ java.lang.StackOverflowError

2008-09-17 09: 45: 17.537 DEBUG [org.jboss.seam.contexts.FacesLifecycle] Bắt đầu yêu cầu JSF cho /form_home.jsp 2008/09/17 09: 45: 17.587 LỖI [org.apache.catalina.core.ContainerBase. [Jboss.web]. [Localhost]. [/]. [Faces Servlet]] Servlet.service() cho servlet Faces Servlet đã ném ngoại lệ java.lang.StackOverflowError tại org.apache.catalina.core.ApplicationHttpRequest.getAttribute (ApplicationHttpRequest.java:210) tại org.apache.catalina.core.ApplicationHttpRequest.getAttribute (ApplicationHttpRequest.java:222) tại org.apache.catalina.core.ApplicationHttpRequest.getAttribute (ApplicationHttpRequest.java:222) tại org.apache.catalina.core.ApplicationHttpRequest.getAttribute (ApplicationHttpRequest.java:222) ...

My tập tin faces-config.xml hiện đang trống không có 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> 

Và file web.xml của tôi:

<?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> 
+0

Bạn có thể muốn làm cho tuyên bố mở rõ ràng hơn. Ấn tượng đầu tiên là nó là lỗi tràn ngăn xếp với chính trang web đó. ;) Không phải ai cũng biết java. –

+0

Tôi có một đồng nghiệp nhận được cùng một lỗi (với mã hoạt động cho tôi), nhưng ở đâu các mẫu phải đúng (.xhtml so với * .seam) - là ánh xạ bộ lọc Seam quan trọng trong tình huống này? – larsivi

+0

bạn có thể có câu trả lời trong liên kết này http://stackoverflow.com/questions/11114723/using-facelets-instead-of-jsp-results-in-java-lang-stackoverflowerror-at-javax-s –

Trả lời

9

Tôi đã có thể tìm ra vấn đề này. Rõ ràng bạn không thể cấu hình web.xml để có cùng giá trị param của .jsp cho Javax.faces.DEFAULT_SUFFIX làm khuôn mẫu url Khuôn mặt Servlet (* .jsp). Nếu bạn thay đổi mẫu url thành .jspx hoặc tới/whateverdirnameyouwant/, ứng dụng sẽ khởi động mà không có lỗi tràn ngăn xếp. (lưu ý: điều quan trọng là DEFAULT_SUFFIX và Khuôn mặt của mô hình url Servlet không thể giống nhau bất kể chúng là gì.) Hy vọng điều này sẽ giúp bất kỳ ai khác trải nghiệm vấn đề cụ thể này.

2

stack tràn trong java hầu như luôn luôn được gây ra bởi các cuộc gọi đệ quy/phương thức vô hạn. Trong trường hợp của bạn được cho dấu vết stack, nó xuất hiện 'getAttribute()' đang được gọi liên tục cho đến khi sụp đổ. Mặc dù tôi không quen thuộc với môi trường cụ thể mà bạn đang sử dụng, tôi khuyên bạn nên kiểm tra mã .jsp của bạn đối với bất kỳ loại hành vi nào (ví dụ: hai phương pháp gọi cho nhau)

+0

thực sự là lỗi cấu hình ứng dụng web. – MGorgon

0

Vì vậy, tôi đã gặp lỗi tương tự. Đối với tôi, đó là tôi đã có một dự án JSF và tôi đã rối tung xung quanh với các phần mở rộng tập tin. Để bắt đầu, tôi đã có tất cả các tập tin web của tôi với phần mở rộng .jsp. Điều này đã được làm việc, nhưng sau đó tôi muốn họ được tất cả .jsf, sau đó sau đó tôi đã đi tất cả trong ngày sử dụng .xhtml. Trong quá trình này, tệp web.xml của tôi đã thay đổi để chứa xhtml và jsf. Thay đổi tệp web.xml là tốt. Điều đã cho tôi StackOverflowError là tôi đã có index.xhtml với một thẻ ui.include trỏ đến header.jsf. Vì vậy, tôi đã có một tập tin xhtml trỏ đến một tập tin jsf. Tôi đã nghĩ rằng web.xml sẽ có thể xử lý này, nhưng nó không, tôi đã nhận StackOverflowError. Vì vậy, để sửa lỗi này, bây giờ tất cả các tệp JSF của tôi có phần mở rộng .xhtml và các thẻ ui: include lồng nhau trỏ tới tệp .xhtml.

Mặt khác, url trình duyệt có thể xử lý index.jsp, index.jsf, index.xhtml. Vì vậy, các web.xml (với ánh xạ servlet cho jsp, jsf và xhtml) xử lý url trình duyệt tốt, nhưng không phải cho những gì vấn đề của tôi ở trên được đánh dấu.

Các vấn đề liên quan