Search code examples
javaspringspring-mvctomcatapache-tiles

TilesViewResolver is not working while deploying as war


I was created a sample project with Spring MVC and apache-tiles. My configurations are quite simple as below

Dispatcher-servlet.xml

....
<mvc:annotation-driven />
<context:component-scan base-package="com.abc.test" />
<mvc:resources location="/" mapping="/**"></mvc:resources>
<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView" />
    <property name="order" value="0" />
</bean>
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
    <property name="definitions">
        <list>
            <value>/WEB-INF/tiles/tile-definition.xml</value>
        </list>
    </property>
</bean>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/"></property>
    <property name="suffix" value=".jsp"></property>
</bean> 

tile-definition.xml

...
<tiles-definitions>
    <definition name="baseLayout" template="/WEB-INF/views/baseLayout.jsp">
        <put-attribute name="title" value="Spring MVC Tiles Example" />
        <put-attribute name="content" value="" />
        <put-attribute name="footer" value="/WEB-INF/views/footer.jsp" />
    </definition>
    <definition name="app_home" extends="baseLayout">
        <put-attribute name="content" value="/WEB-INF/views/home.jsp" />
    </definition>
</tiles-definitions>

and only one controller as

@Controller
@RequestMapping("/home")
public class HomeController {
    @RequestMapping(method = RequestMethod.GET)
    public String home(Model model) {
        return "app_home";
    }
}

Everythings work fine and nothing problems while running with Eclipse IDE. But when I generated war file and deployed it to Tomcat-8 server, tilesViewResolver was not intercepted. Why am I saying tilesViewResolver not work well , because I got 404 and the browser was trying to load app_home.jsp. This is logical view name for tiles and tilesViewResolver should intercept this before spring's InternalViewResolver.

Has somebody experience with it ? What am I missing ?

Edit : Attached source code.

You can download full codes from here. I copy the war file from target folder and paste it to webapps directory of my Tomcat server.The problem is as I described at above.


Solution

  • I think it was a bug of apache-tiles version 3.0.3. Now I upgraded to latest version (currently 3.0.7) and everythings work fine. Thanks a lot to @Sam and @Reddy for helping me to put tiles-definiton.xml under WEB-INF directory. But actually it is not needed to have tiles definitions under WEB-INF folder.