Spring MVC 回到默認的Servlet來進行資源服務

2018-07-26 14:55 更新

這些配置允許你將DispatcherServlet映射到"/"路徑(也即覆蓋了容器默認Servlet的映射),但依然保留容器默認的Servlet以處理靜態(tài)資源的請求。這可以通過配置一個URL映射到"/**"的處理器DefaultServletHttpRequestHandler來實現(xiàn),并且該處理器在其他所有URL映射關系中優(yōu)先級應該是最低的。

該處理器會將所有請求轉發(fā)(forward)到默認的Servlet,因此需要保證它在所有URL處理器映射HandlerMappings的最后。如果你是通過<mvc:annotation-driven>的方式進行配置,或自己定制了HandlerMapping實例,那么你需要確保該處理器order屬性的值比DefaultServletHttpRequestHandler的次序值Integer.MAXVALUE小。

使用默認的配置啟用該特性,你可以:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

}

XML命名空間只需一行:

    <mvc:default-servlet-handler/>

不過需要注意,覆寫了"/"的Servlet映射后,默認Servlet的RequestDispatcher就必須通過名字而非路徑來取得了。DefaultServletHttpRequestHandler會嘗試在容器初始化的時候自動檢測默認Servlet,這里它使用的是一份主流Servlet容器(包括Tomcat、Jetty、GlassFish、JBoss、Resin、WebLogic,和WWebSphere)已知的名稱列表。如果默認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"/>


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號