<mvc:resources />中的绝对路径,而不是相对于spring servlet映射的路径

Twi*_*ite 2 spring spring-mvc

我正在尝试将请求映射到spring环境中的静态资源.我的app服务器是Jetty.

在web.xml中,我将各种url模式映射到我的spring servlet:

<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>/static/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>/otherpath/*</url-pattern>
</servlet-mapping>
[many more mappings...]
Run Code Online (Sandbox Code Playgroud)

请注意,"/"未映射到我的spring servlet.

在spring-servlet.xml中,我使用mvc:resources标签将url映射到具有静态内容的目录:

<mvc:resources mapping="/static/**" location="/WEB-INF/static/" />
Run Code Online (Sandbox Code Playgroud)

这不像我预期的那样有效.而不是映射

/static/ to /WEB-INF/static/,
Run Code Online (Sandbox Code Playgroud)

它映射

/static/static/ to /WEB-INF/static
Run Code Online (Sandbox Code Playgroud)

原因是"mvc:resources"中给出的映射似乎与映射到spring servlet的路径无关或相对.

有没有办法考虑相对于/为映射的完整路径,而不是相对于servlet映射的路径?

Twi*_*ite 8

解决方案是不使用mvc:resources标记,而是使用bean和URLHandlerMapping配置相应的处理程序:

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="alwaysUseFullPath" value="true"/>
    <property name="mappings">
        <props>
            <prop key="/static/*">staticResources</prop>
        </props>
    </property>
</bean>

<bean id="staticResources" class="org.springframework.web.servlet.resource.ResourceHttpRequestHandler">
    <property name="locations">
        <list>
            <value>/WEB-INF/static/</value>
        </list>
    </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

具有alwaysUseFullPath属性的SimpleUrlHandlerMapping允许对映射进行更细粒度的控制.