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.
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.