【发布时间】:2015-09-29 12:39:30
【问题描述】:
Spring MVC 中<mvc:default-servlet-handler /> 的需求是什么。我们什么时候应该使用它。什么时候需要它。我们为什么要使用它。我在stackoverflow中浏览了几个链接,但无法获得清晰的图片或理解。谁能解释一下?
【问题讨论】:
标签: spring spring-mvc
Spring MVC 中<mvc:default-servlet-handler /> 的需求是什么。我们什么时候应该使用它。什么时候需要它。我们为什么要使用它。我在stackoverflow中浏览了几个链接,但无法获得清晰的图片或理解。谁能解释一下?
【问题讨论】:
标签: spring spring-mvc
Spring MVC中的<mvc:default-servlet-handler />需要什么?
使用这个handler spring dispatcher 会将所有请求转发到默认的Servlet。要启用该功能,您可以使用注释或基于 xml 的配置,如下所示:
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
或者在 XML 中:
<mvc:default-servlet-handler/>
它会做什么?
DefaultServletHttpRequestHandler 将在启动时尝试auto-detect default Servlet 为container,使用大多数主要 Servlet 容器(包括 Tomcat、Jetty、GlassFish、JBoss、Resin)的已知名称列表、WebLogic 和 WebSphere)。如果默认 Servlet 已自定义配置了不同的名称,或者在默认 Servlet 名称未知的情况下使用了不同的 Servlet 容器,则必须显式提供默认 Servlet 的名称,如下例所示:
@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable("myCustomDefaultServlet");
}
}
或者在 XML 中:
<mvc:default-servlet-handler default-servlet-name="myCustomDefaultServlet"/>
我们应该什么时候使用它?究竟什么时候需要?我们为什么要使用它?
当您希望 spring 调度程序使用默认 servlet 为 web root 下的 static resources 提供服务时。
如果我们使用DefaultServletHttpRequestHandler,那么我们可以替换:
<mvc:resources mapping="/js/**" location="/js/" />
<mvc:resources mapping="/css/**" location="/css/" />
<mvc:resources mapping="/images/**" location="/images/" />
与:
<mvc:default-servlet-handler />
您可以探索更多here。
【讨论】:
因为我们通常用映射“/*”来配置DispatcherServlet,但是所有的请求比如.js/.css也会映射到DispatcherServlet,所以我们需要一个HttpRequestHandler来分发这些静态的对 DefaultServlet 的资源请求。
【讨论】:
<mvc:default-servlet-handler />
此标签通常用于获取 *.js、*.css、*.jpg 等资源。
标记 mvc:default-servlet-handler 使用 DefaultServletHttpRequestHandler,它比 mvc:annotation-driven:
中的处理程序具有 低属性 (Integer.MAX_VALUE)例如
您的请求(如(http://localhost:8080/jquery.js)首先将搜索控制器映射@RequsetMapping(“jquery.js”),当请求未找到任何控制器映射时,请尝试在您的文件夹中获取资源web 或 webapp。
如果你有 webapp/jquery.js,你会得到这个文件。
【讨论】: