首页 文章

jsp url映射后的StackOverflowError

提问于
浏览
0

我关注 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 时,我得到以下错误堆栈跟踪:

ERROR [io.undertow.request](默认任务-29)UT005023:对/ contextpath / data的异常处理请求:org.apache.jasper.JasperException:javax.servlet.ServletException:org.apache中的java.lang.StackOverflowError . jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:506)[jastow-1.0.0.Final.jar:1.0.0.Final] org.apache.jasper.servlet.JspServletWrapper.service(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] at 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)[下载] -servlet-1.0.15.Final.jar:1.0.15.Final] at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.hand leRequest(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.underto的.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56)[undertow-servlet-1.0.15.Final.jar:1.0.15.Final] w.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.handl的SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76)[undertow-core-1.0.15.Final.jar:1.0.15.Final] ers.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.handle在io.undertow.server.Connectors.executeRootHandler(Connectors.java:177)上请求(ServletInitialHandler.java:146)[undertow-servlet-1.0.15.Final.jar:1.0.15.Final][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] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)[rt.jar:1.7.0_45] at 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

    但我使用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>
    
  • 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映射正常工作 .

相关问题