部署为战争时,TilesViewResolver无法正常工作

时间:2016-09-27 11:13:26

标签: java spring spring-mvc tomcat apache-tiles

我使用Spring MVC和apache-tiles创建了一个示例项目。我的配置非常简单,如下所示

分配器一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> 

瓦片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>

只有一个控制器

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

使用Eclipse IDE运行时,Everythings工作正常,没有任何问题。但是当我生成 war 文件并将其部署到Tomcat-8服务器时,tilesViewResolver未被截获。为什么我说tilesViewResolver效果不好,因为我得到了404,浏览器正在尝试加载 app_home.jsp 。这是tile的逻辑视图名称,tilesViewResolver应该在spring InternalViewResolver之前拦截它。

有人有经验吗?我错过了什么?

  

编辑:附加的源代码。

您可以从here下载完整代码。我从目标文件夹中复制war文件并将其粘贴到我的Tomcat服务器的webapps目录中。问题如上所述。

1 个答案:

答案 0 :(得分:0)

我认为这是apache-tiles版本3.0.3的错误。现在我升级到最新版本(目前 3.0.7 ,并且每个人都可以正常工作。非常感谢@Sam和@Reddy帮助我  将tiles-definiton.xml放在WEB-INF目录下。但实际上不需要在WEB-INF文件夹下设置切片定义。