没有控制器的Spring MVC是否可能(但仅使用DispatcherServlet)

时间:2015-07-18 13:31:00

标签: java html spring spring-mvc servlets

我正在尝试配置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> &nbsp;

我看到以下错误:

[org.springframework.web.servlet.PageNotFound] WARN  No mapping found for HTTP request with URI [/myapp/test1.htm] in DispatcherServlet
with name 'dispatcher'

2 个答案:

答案 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或其他),因此首先不会发生此冲突。