<mvc:default-servlet-handler>的需求和用法是什么

时间:2015-07-10 16:52:04

标签: spring spring-mvc

Spring MVC中<mvc:default-servlet-handler />的需求是什么?我们什么时候应该使用它。什么时候需要它。我们为什么要使用它。我在stackoverflow中经历了一些链接,但无法获得清晰的图片或理解。有人可以解释一下吗?

3 个答案:

答案 0 :(得分:37)

<mvc:default-servlet-handler />Spring MVC的需求是什么?

使用此handler弹出调度程序会将所有请求转发到默认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 dispatcher使用默认servlet在static resources下提供web root时。

如果我们使用DefaultServletHttpRequestHandler,那么我们可以替换:

    <mvc:resources mapping="/js/**" location="/js/" />
    <mvc:resources mapping="/css/**" location="/css/" />
    <mvc:resources mapping="/images/**" location="/images/" />

with:

<mvc:default-servlet-handler />

您可以更多地探索here

答案 1 :(得分:5)

因为我们通常使用映射&#34; / *&#34;来配置DispatcherServlet,但是所有请求(例如 .js / .css)也将映射到DispatcherServlet,因此我们需要HttpRequestHandler将这些静态资源请求分派给DefaultServlet。

答案 2 :(得分:0)

<mvc:default-servlet-handler />

此标记通常用于获取* .js,* .css,* .jpg等资源。

标签mvc:default-servlet-handler使用低属性(Integer.MAX_VALUE)的DefaultServletHttpRequestHandler,而不是 mvc:annotation-driven:

中的处理程序
  • DefaultAnnotationHandlerMapping
  • AnnotationMethodHandlerAdapter上
  • AnnotationMethodHandlerExceptionResolve
  • see here

例如

您的请求(http://localhost:8080/jquery.js)首先将搜索Controller映射@RequsetMapping(“jquery.js”),当请求找不到任何Controller映射时,尝试在您的文件夹中获取资源 web webapp

如果您有 webapp / jquery.js ,则会收到此文件。