部署为 war 时 TilesViewResolver 不工作
TilesViewResolver is not working while deploying as war
我使用 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 时一切正常,没有任何问题。但是当我生成war文件并部署到Tomcat-8服务器时,tilesViewResolver
没有被拦截。为什么我说 tilesViewResolver
效果不佳,因为我收到 404 并且浏览器正在尝试加载 app_home.jsp。这是图块的逻辑视图名称,tilesViewResolver
应该在 spring 的 InternalViewResolver
.
之前拦截它
有人有这方面的经验吗?我错过了什么?
Edit : Attached source code.
您可以从 here 下载完整代码。我从目标文件夹复制 war 文件并将其粘贴到我的 Tomcat server.The 的 webapps 目录中,问题如上所述。
我认为这是 apache-tiles 版本 3.0.3
的错误。现在我升级到最新版本 (当前 3.0.7) 并且一切正常。非常感谢@Sam 和@Reddy 帮助我
将 tiles-definiton.xml
放在 WEB-INF
目录下。但实际上 WEB-INF
文件夹下不需要 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 时一切正常,没有任何问题。但是当我生成war文件并部署到Tomcat-8服务器时,tilesViewResolver
没有被拦截。为什么我说 tilesViewResolver
效果不佳,因为我收到 404 并且浏览器正在尝试加载 app_home.jsp。这是图块的逻辑视图名称,tilesViewResolver
应该在 spring 的 InternalViewResolver
.
有人有这方面的经验吗?我错过了什么?
Edit : Attached source code.
您可以从 here 下载完整代码。我从目标文件夹复制 war 文件并将其粘贴到我的 Tomcat server.The 的 webapps 目录中,问题如上所述。
我认为这是 apache-tiles 版本 3.0.3
的错误。现在我升级到最新版本 (当前 3.0.7) 并且一切正常。非常感谢@Sam 和@Reddy 帮助我
将 tiles-definiton.xml
放在 WEB-INF
目录下。但实际上 WEB-INF
文件夹下不需要 tiles 定义。