jsp url映射后的StackOverflowError

时间:2014-12-12 00:11:25

标签: java jsp servlets web.xml

我有以下content/data.jsp页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    ...
</head>
<body>
<jsp:include page="../template/header.jsp"/>

<jsp:include page="../template/footer.jsp"/>
</body>
</html>

其中header.jspfooter.jsp只是普通的html文件。效果很好。然后我将这些行添加到我的web.xml文件中:

<servlet>
    <servlet-name>data</servlet-name>
    <jsp-file>/content/data.jsp</jsp-file>
</servlet>
<servlet-mapping>
    <servlet-name>data</servlet-name>
    <url-pattern>/data/*</url-pattern>
</servlet-mapping>

当我尝试请求contextpath/data而不是contextpath/content/data.jsp时,我得到以下错误堆栈跟踪:

  

错误[io.undertow.request](默认任务-29)UT005023:对/ contextpath / data的异常处理请求:org.apache.jasper.JasperException:javax.servlet.ServletException:org中的java.lang.StackOverflowError。 org.apache.jasper.servlet.JspServletWrapper.service中的apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:506) [jastow-1.0.0.Final.jar:1.0.0.Final](JspServletWrapper.java: 390)[jastow-1.0.0.Final.jar:1.0.0.Final] org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:326)[jastow-1.0.0.Final.jar:1.0 .0.Final] at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:259)[jastow-1.0.0.Final.jar:1.0.0.Final],位于javax.servlet.http.HttpServlet。 service(HttpServlet.java:790)[jboss-servlet-api_3.1_spec-1.0.0.Final.jar:1.0.0.Final] at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) [endow-servlet-1.0.15.Final.jar:1.0.15.Final]在io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.han dleRequest(ServletSecurityRoleHandler.java:61)[undertow-servlet-1.0.15.Final.jar:1.0.15.Final] at io.undertow.jsp.JspFileHandler.handleRequest(JspFileHandler.java:27)[jastow-1.0.0 .Final.jar:1.0.0.Final] at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)[undertow-servlet-1.0.15.Final.jar:1.0.15.Final] at at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25)[undertow-core-1.0.15.Final。 jar:1.0.15.Final] at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:113)[afow-servlet-1.0.15.Final.jar:1.0.15.Final] at io io.undert的.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56)[undertow-servlet-1.0.15.Final.jar:1.0.15.Final] ow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25)[undertow-core-1.0.15.Final.jar:1.0.15.Final] at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler。 java:45)[undertow-core-1.0.15.Final.jar:1.0.15.Final] at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:61)[undertow-servlet-1.0 .15.Final.jar:1.0.15.Final] at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58)[undertow-core-1.0.15.Final.jar:1.0.15.Final ]在io.undertow.security.handlers的io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70)[undertow-servlet-1.0.15.Final.jar:1.0.15.Final]。在io.undertow.server.hand的SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76)[undertow-core-1.0.15.Final.jar:1.0.15.Final] lers.PredicateHandler.handleRequest(PredicateHandler.java:25)[undertow-core-1.0.15.Final.jar:1.0.15.Final] at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler。 java:61)在io.undertow.server.handlers的io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25)[undertow-core-1.0.15.Final.jar:1.0.15.Final] .PredicateHandler.handleRequest(PredicateHandler.java:25)[undertow-core-1.0.15.Final.jar:1.0.15.Final] at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:240)[ underow-servlet-1.0.15.Final.jar:1.0.15.Final] at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:227)[undertow-servlet-1.0.15.Final.jar:在io.undertow的io.undertow.servlet.handlers.ServletInitialHandler.access $ 000(ServletInitialHandler.java:73)[undertow-servlet-1.0.15.Final.jar:1.0.15.Final]的1.0.15.Final]。 servlet.handlers.ServletInitialHandler $ 1.handl eRequest(ServletInitialHandler.java:146)[undertow-servlet-1.0.15.Final.jar:1.0.15.Final] at io.undertow.server.Connectors.executeRootHandler(Connectors.java:177)[undertow-core-1.0 .15.Final.jar:1.0.15.Final] at io.undertow.server.HttpServerExchange $ 1.run(HttpServerExchange.java:727)[undertow-core-1.0.15.Final.jar:1.0.15.Final]在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)[rt.jar:1.7.0_45] java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)[rt.jar: 1.7.0_45]在java.lang.Thread.run(Thread.java:744)[rt.jar:1.7.0_45]引起:javax.servlet.ServletException:java.lang.StackOverflowError

等。完整的堆栈跟踪是巨大的,但如果你需要,我会写它。

2 个答案:

答案 0 :(得分:0)

但我使用web.xml中的下一个结构

<servlet>
<servlet-name>NameServler</servlet-name>
<servlet-class>Location..Packege</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>NameServler</servlet-name>
<url-pattern>/NombredeAcesoalServlet</url-pattern>
</servlet-mapping>

答案 1 :(得分:0)

在web.xml中使用<include-prelude><include-coda>而不是基于<jsp:include>的模板后,问题就消失了。我刚刚添加了

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <include-prelude>/template/header.jspf</include-prelude>
        <include-coda>/template/footer.jspf</include-coda>

    </jsp-property-group>
</jsp-config>

到我的web.xml并完全删除了jsp文件中丑陋的重复<jsp:include page="../template/header.jsp"/><jsp:include page="../template/footer.jsp"/>行。现在,URL映射可以正常工作。