我正在尝试配置spring mvc应用程序而不编写显式控制器,但只使用DispatcherServlet。我很难让它工作(我没有故意添加控制器)。这是我的代码:
<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>*.htm</url-pattern>
</servlet-mapping>
在JSP中:
<a href="/myapp/test1.htm">Test1 HTML</a>
我看到以下错误:
[org.springframework.web.servlet.PageNotFound] WARN No mapping found for HTTP request with URI [/myapp/test1.htm] in DispatcherServlet
with name 'dispatcher'
答案 0 :(得分:1)
您可以通过在dispatcher-servlet.xml中指定控制器来完成此操作,只要您还指定了某种视图解析器:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/htm/" />
<property name="suffix" value=".htm" />
</bean>
<mvc:view-controller path="/test" view-name="test" />
答案 1 :(得分:0)
好的,所以你的问题实际上是要知道是否可以提供名称与dispatcher-servlet匹配匹配的静态资源。
这绝对有可能,and documented:
这允许将DispatcherServlet映射到“/”(从而覆盖容器的默认Servlet的映射),同时仍允许容器的默认Servlet处理静态资源请求。它配置DefaultServletHttpRequestHandler,URL映射为“/ **”,相对于其他URL映射的优先级最低。
此处理程序将所有请求转发到默认Servlet。
虽然你知道这个映射会与静态资源发生冲突,但选择将spring servlet映射到一个非常具体的映射(*.htm
)是很奇怪的。您可以简单地选择将servlet映射到任何其他扩展(*.action
或其他),因此首先不会发生此冲突。