绝对路径 而不是相对于spring servlet映射的路径
问题内容:
我正在尝试在弹簧环境中将请求映射到静态资源。我的应用服务器是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...]
请注意,“ /”未映射到我的spring servlet。
在spring-servlet.xml中,我使用mvc:resources标记将url映射到具有静态内容的目录:
<mvc:resources mapping="/static/**" location="/WEB-INF/static/" />
这不符合我的预期。而不是映射
/static/ to /WEB-INF/static/,
它映射
/static/static/ to /WEB-INF/static
原因是“ mvc:resources”中给出的映射似乎不是相对于/而是相对于映射到spring servlet的路径。
有没有办法考虑相对于/映射的完整路径,而不是相对于servlet映射的路径?
问题答案:
解决方案是不使用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>
SimpleUrlHandlerMapping及其alwaysUseFullPath属性确实允许对映射进行更细粒度的控制。