首先我知道 Spring MVC 与 Tiles 有很好的集成。但我的问题如下:
我已将我的 web.xml 配置为
<servlet>
<description>Spring Dispatcher Servlet</description>
<servlet-name>Dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Dispatcher</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
我的 Dispatcher-servlet.xml 配置如下:
<bean class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
<property name="definitions">
<list>
<value>
/WEB-INF/tiles-defs/base-layout.xml
</value>
<value>
/WEB-INF/tiles-defs/application-layout.xml
</value>
</list>
</property>
</bean>
<bean id="tilesViewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.tiles2.TilesView" />
<property name="order" value="1" />
</bean>
请注意,Dispatcher servlet 被映射为处理所有请求。我不想以某种方式对其进行配置,使其只能处理特定请求,例如 *.hmtl 或 *.do 或 *.form 因为我希望我的 URL 整洁,这是一个要求。
我的瓷砖定义如下
<tiles-definitions>
<definition name="publicLayout" .
template="/WEB-INF/tiles-layouts/publicLayout.jsp">
<put-attribute name="title" value="Home Page" />
<put-attribute name="body" value="" />
</definition>
<definition name="home" extends="publicLayout">
<put-attribute name="body" value="/WEB-INF/jsp/home.jsp" />
</definition>
</tiles-definitions>
现在,当我发出 HTTP 请求以说出 URL“http://localhost:8080/myapp/home”时,使用请求映射“/home”映射的带注释的控制器处理请求并最终返回视图名称为“home”的 ModelAndView ”。
最后,当调度程序 servlet 尝试呈现它说的页面时
未找到带有 URI [/myapp/WEB-INF/tiles-layouts/publicLayout.jsp] 的 HTTP 请求的映射
但是当我更改我的调度程序 servlet 映射这样 *.html 时,它工作正常,我不想这样做。
在这里可以做什么。??我认为这是一个非常普遍的问题。