小编典典

使用 在春季3中导致所有其他视图停止工作

java

最简单的例子:

我已经配置了一个调度程序servlet来捕获所有内容:

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

我有一个简单的测试控制器:

@RequestMapping("/index")
@ResponseBody
public String rootTest(){
    return "Main page displayed from TestController";
}

在这个测试用例中,我将以下行添加(或删除)到dispatcher-servlet.xml

<mvc:resources mapping="/public/**" location="/public/"/>

我的远大目标: 提供静态内容(图像,css,js)以及动态内容(通过Jetty
servlet容器内的Velocity生成,与全能的Spring捆绑在一起)。

我的Dilema: 添加时<mvc:resources .../>得到404
http://localhost/index,但是我可以从http://localhost/public/img/42.png提供图像。如果删除,<mvc:resources .../>http://localhost/index可以正常工作,但是,当然,如何投放静态内容?

额外的问题: 为什么我永远也不会吃蛋糕呢?


阅读 226

收藏
2020-10-18

共1个答案

小编典典

有两个问题:

  1. 切勿/*在servlet映射中使用:

    <servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>/</url-pattern>
    

  2. <mvc:resources>需要<mvc:annotation-driven>(或显式声明的处理程序映射等)。

发生这种情况是因为DispatcherServlet仅当在上下文中未找到自定义处理程序映射时,才应用处理程序映射的默认配置。由于<mvc:resources>添加了自己的处理程序映射,因此默认值被破坏,因此应通过<mvc:annotation- driven>Bean或手动将其他处理程序映射显式除名。

另请注意,尽管它们默认为,但<mvc:resources>仅声明DefaultAnnotationHandlerMapping,而不声明其他映射,例如。如果需要,请手动声明它们。BeanNameUrlHandlerMapping``DispatcherServlet

2020-10-18