【问题标题】:What is the need and use of <mvc:default-servlet-handler /><mvc:default-servlet-handler /> 的需要和用途是什么
【发布时间】:2015-09-29 12:39:30
【问题描述】:

Spring MVC 中&lt;mvc:default-servlet-handler /&gt; 的需求是什么。我们什么时候应该使用它。什么时候需要它。我们为什么要使用它。我在stackoverflow中浏览了几个链接,但无法获得清晰的图片或理解。谁能解释一下?

【问题讨论】:

    标签: spring spring-mvc


    【解决方案1】:

    Spring MVC中的&lt;mvc:default-servlet-handler /&gt;需要什么?

    使用这个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 Servletcontainer,使用大多数主要 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

    【讨论】:

      【解决方案2】:

      因为我们通常用映射“/*”来配置DispatcherServlet,但是所有的请求比如.js/.css也会映射到DispatcherServlet,所以我们需要一个HttpRequestHandler来分发这些静态的对 DefaultServlet 的资源请求。

      【讨论】:

        【解决方案3】:
        <mvc:default-servlet-handler />
        

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

        标记 mvc:default-servlet-handler 使用 DefaultServletHttpRequestHandler,它比 mvc:annotation-driven:

        中的处理程序具有 低属性 (Integer.MAX_VALUE)
        • DefaultAnnotationHandlerMapping
        • AnnotationMethodHandlerAdapter
        • AnnotationMethodHandlerExceptionResolve
        • see here

        例如

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

        如果你有 webapp/jquery.js,你会得到这个文件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-06-05
          • 1970-01-01
          • 1970-01-01
          • 2012-12-26
          • 1970-01-01
          • 2011-04-15
          • 1970-01-01
          相关资源
          最近更新 更多