2013-10-25 2 views
1

나는 tiles.xml 파일에 Regexp 접두어가 붙은 Tiles 3.0.1을 Spring MVC 3.2.4 &으로 사용하려고합니다. 저는 Tiles의 초보자입니다. 그래서 뭔가 잘못하고있을 수도 있지만, Tiles doc 사이트에서 읽은 것을 따라 가고 tech.finn.no 블로그의 내용을 적용하려고 노력하고 있습니다.봄 3.2.4 + 타일 3 =보기를 해결할 때 무한 루프가 발생합니까?

불행히도, 내 tiles.xml 파일에있는 RegExp 접두어로 completeAutoLoad = true를 사용하면보기를 해결할 때 무한 루프가 발생합니다.

스택 추적 :

SEVERE: Servlet.service() for servlet jsp threw exception 
java.lang.StackOverflowError 
    at javax.servlet.http.HttpServletResponseWrapper.encodeURL(HttpServletResponseWrapper.java:76) 
    at javax.servlet.http.HttpServletResponseWrapper.encodeURL(HttpServletResponseWrapper.java:76) 

.... 
    at javax.servlet.http.HttpServletResponseWrapper.encodeURL(HttpServletResponseWrapper.java:76) 
    at javax.servlet.http.HttpServletResponseWrapper.encodeURL(HttpServletResponseWrapper.java:76) 
    at javax.servlet.http.HttpServletResponseWrapper.encodeURL(HttpServletResponseWrapper.java:76) 
    at javax.servlet.http.HttpServletResponseWrapper.encodeURL(HttpServletResponseWrapper.java:76) 
    at org.springframework.security.web.context.SaveContextOnUpdateOrErrorResponseWrapper.encodeURL(SaveContextOnUpdateOrErrorResponseWrapper.java:181) 
    at javax.servlet.http.HttpServletResponseWrapper.encodeURL(HttpServletResponseWrapper.java:76) 
    at javax.servlet.http.HttpServletResponseWrapper.encodeURL(HttpServletResponseWrapper.java:76) 
    at javax.servlet.http.HttpServletResponseWrapper.encodeURL(HttpServletResponseWrapper.java:76) 

.... 
    at javax.servlet.http.HttpServletResponseWrapper.encodeURL(HttpServletResponseWrapper.java:76) 
    at javax.servlet.http.HttpServletResponseWrapper.encodeURL(HttpServletResponseWrapper.java:76) 
    at javax.servlet.http.HttpServletResponseWrapper.encodeURL(HttpServletResponseWrapper.java:76) 
    at javax.servlet.http.HttpServletResponseWrapper.encodeURL(HttpServletResponseWrapper.java:76) 
    at org.springframework.web.servlet.tags.UrlTag.createUrl(UrlTag.java:227) 
    at org.springframework.web.servlet.tags.UrlTag.doEndTag(UrlTag.java:174) 
    at org.apache.jsp.tag.webutil.load_002dscripts_tag._jspx_meth_spring_005furl_005f0(load_002dscripts_tag.java:300) 
    at org.apache.jsp.tag.webutil.load_002dscripts_tag.doTag(load_002dscripts_tag.java:113) 
    at org.apache.jsp.WEB_002dINF.views.tiles.layouts.default_jsp._jspx_meth_util_005fload_002dscripts_005f0(default_jsp.java:176) 
    at org.apache.jsp.WEB_002dINF.views.tiles.layouts.default_jsp._jspService(default_jsp.java:93) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749) 

의 pom.xml :

<dependency> 
     <groupId>org.apache.tiles</groupId> 
     <artifactId>tiles-extras</artifactId> 
     <version>3.0.1</version> 
    </dependency> 

webmvc-config.xml의 :

<bean class="org.springframework.web.servlet.view.tiles3.SpringWildcardServletTilesApplicationContext" autowire="constructor" /> 
<bean id="viewResolver" class="org.springframework.web.servlet.view.tiles3.TilesViewResolver" > 
    <property name="cache" value="false"/> 
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView" /> 
</bean> 

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer"> 
<property name="completeAutoload" value="true"/> 
</bean> 

Tiles.xml :

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN" "http://tiles.apache.org/dtds/tiles-config_3_0.dtd"> 
<tiles-definitions> 
<definition name="REGEXP:(.+)" template="/WEB-INF/views/tiles/layouts/default.jsp"> 
    <put-attribute name="meta" value="/WEB-INF/views/tiles/{1}/meta.jsp"/> 
    <put-attribute name="head" value="/WEB-INF/views/tiles/{1}/head.jsp"/> 
    <put-attribute name="header" value="/WEB-INF/views/tiles/{1}/header.jsp"/> 
    <put-attribute name="menu" value="/WEB-INF/views/tiles/{1}/menu.jsp"/> 
    <put-attribute name="body" value="/WEB-INF/views/tiles/{1}/body.jsp"/> 
    <put-attribute name="footer" value="/WEB-INF/views/tiles/{1}/footer.jsp"/> 
</definition> 

</tiles-definitions> 
,

Default.jsp를 :

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%> 
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> 
<%@ taglib prefix="util" tagdir="/WEB-INF/tags/util"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
    <jsp:directive.page contentType="text/html;charset=UTF-8" /> 
    <jsp:directive.page pageEncoding="UTF-8" /> 

    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
     <meta http-equiv="X-UA-Compatible" content="IE=8" />  
     <tiles:insertAttribute name="meta" ignore="true" /> 

     <util:load-scripts /> 

     <tiles:insertAttribute name="head" ignore="true" /> 

     <spring:message code="application_name" var="app_name" htmlEscape="false"/> 
     <title><spring:message code="welcome_h3" arguments="${app_name}" /></title> 
    </head> 

    <body class="tundra spring"> 
     <div id="wrapper"> 
      <div id="header"><tiles:insertAttribute name="header" ignore="true" /></div> 
      <div id="menu"><tiles:insertAttribute name="menu" ignore="true" /></div> 
      <div id="main"> 
       <div id="body"><tiles:insertAttribute name="body"/></div> 
       <div id="footer"><tiles:insertAttribute name="footer" ignore="true"/></div> 
      </div> 
     </div> 
    </body> 
</html> 

/WEB-INF/views/tiles/secure/login/body.jsp :이 구성에서 특히 특별한 일이 없다고 생각

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%> 
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> 
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 
<%@ taglib prefix="util" tagdir="/WEB-INF/tags/util"%> 

<jsp:directive.page contentType="text/html;charset=UTF-8" /> 

<div class="container"> 

<form name="login" class="form-signin" action='<spring:url value="/j_spring_security_check"/>' method="POST"> 
    <h2 class="form-signin-heading">Please sign in</h2> 
    <input type="text" class="form-control" name="j_username" placeholder="Email address" autofocus> 
    <input type="password" class="form-control" name="j_password" placeholder="Password"> 
    <label class="checkbox"> <input type="checkbox" value="remember-me"> Remember me</label> 
    <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button> 
</form> 
</div> 

, 그래서 내가 무한 루프에 빠지는 이유를 모르겠다. CompleteAutoTilesInitializer 클래스를 BasicTilesInitializerClass로 바꾸고 대신 와일드 카드 (예 : /)를 사용하고 {1}을 {1}/{2}로 바꾸면보기가 제대로로드됩니다 (무한 루프 없음).

어떤 아이디어가 잘못 되었습니까? 아니면 타일 문제입니까?

답변

2

은 정규 표현식이 너무 욕심 따라서 StackOverflow의 원인이 모두 영원히뿐만 아니라 속성을 일치 시키려고 지적 유사한 SO 문제 (https://stackoverflow.com/a/6617343/827480)를 발견. 지금 당장 해결하려면 덜 탐욕스러운 정규 표현식을 사용하는 것입니다.

관련 문제