我有以下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.jsp
和footer.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
等。完整的堆栈跟踪是巨大的,但如果你需要,我会写它。
答案 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映射可以正常工作。