我的调度程序servlet映射到应用程序的根目录。
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
我有一个名为&#39; static&#39;的文件夹。在我的webroot中。它包含CSS,JS和图像文件。但是,由于调度程序servlet映射,对静态内容的请求最终会在404s中结束。
我知道解决这个问题的解决方案。
将调度程序映射到更具体的URL,例如:context:/ app /,然后编写一个过滤器来拦截请求,并有条件地映射到默认的servlet,或者委托给spring调度程序。
网址重写技巧。
使用<mvc:resources />
问题是,我的映射是基于XML的,我绝对不会在使用注释名称的地方散布我的映射配置。因此,如果我使用<mvc:resources />
,我的基于xml的映射会中断,并且所有到不同控制器的url映射都会丢失。
这是因为<mvc:resources /
&gt;覆盖一些设置并应用它自己的设置。但它也是静态内容最干净的解决方案。
可以告诉<mvc:resources />
不覆盖基于xml的映射吗?
答案 0 :(得分:1)
<mvc:resources />
似乎非常适合您的问题。
根据我的理解,您的DispatcherServlet
正在处理对您服务器的所有请求。因此,资源标记应返回mvc:resources位置属性中指定位置的文件。它不应该捕捉除映射之外的任何东西。
你是否正在使用
的内容<mvc:resources mapping="/static/**" location="/static/"/>
如果覆盖标签中不可配置的设置,请考虑实例化您自己的org.springframework.web.servlet.resource.ResourceHttpRequestHandler
答案 1 :(得分:1)
我确实在web.xml中有这个
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/resources/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.png</url-pattern>
<url-pattern>*.js</url-pattern>
<url-pattern>*.css</url-pattern>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
答案 2 :(得分:0)
您可以为控制器提供文件扩展名,例如
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
然后,以.do
结尾的所有网址都将通过spring DispatcherServlet。
答案 3 :(得分:0)
add&lt; mvc:default-servlet-handler /&gt;在web.xml文件的顶部
或者如果您使用的是注释
@Configuration
@EnableWebMvc
public class MVCConfig extends WebMvcConfigurerAdapter {
@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) {
configurer.enable("default");
}
}