【发布时间】:2011-09-07 19:48:30
【问题描述】:
我有一个基于 Spring 3.0.6 的 webapp,它在 Tomcat 7.0 上运行良好。
web.xml 定义调度程序如下:
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
调度程序以通常的方式定义视图解析器:
<bean id="tilesViewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.tiles2.TilesView" />
</bean>
<bean id="tilesConfigurer"
class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/tiles-def.xml</value>
</list>
</property>
</bean>
我有一个用@RequestMapping("/home") 注释的控制器和一个在tiles-def.xml 中定义的"home" 视图。当我将浏览器指向/myapp/home.html 时,Tiles 页面就会打开。
如果我将 <mvc:resources mapping="/resources/**" location="/resources/" /> 或 <mvc:view-controller path="/" view-name="home.html"/> 添加到调度程序 xml 文件中,将浏览器指向 /myapp/home.html 会导致 404。日志显示:
21:34:22,128 WARN PageNotFound:947 – No mapping found for HTTP request with URI [/myapp/home.html] in DispatcherServlet with name 'dispatcher'
我做错了什么?
非常感谢
【问题讨论】:
-
你可以在 DispatcherServlet.doDispatch 中设置断点,看看发生了什么。 :)
-
您好 Boris,我尝试调试,但调度程序 servlet 的内部工作非常难以理解。问题是我的 MVC 控制器中的方法是
void并且没有返回任何字符串,因此框架尝试使用路径自动解析视图。我改变了这个明确地返回 Tiles2 视图名称,一切都重新开始了。我吸取了教训,永远不要让 Spring 猜测任何事情...... ;-) -
好的。请将您的结果作为答案发布并关闭问题))。
标签: spring model-view-controller dispatcher tiles2