Spring MVC 回到默認(rèn)的Servlet來進(jìn)行資源服務(wù)

2018-07-26 14:55 更新

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

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

使用默認(rèn)的配置啟用該特性,你可以:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

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

}

XML命名空間只需一行:

    <mvc:default-servlet-handler/>

不過需要注意,覆寫了"/"的Servlet映射后,默認(rèn)Servlet的RequestDispatcher就必須通過名字而非路徑來取得了。DefaultServletHttpRequestHandler會(huì)嘗試在容器初始化的時(shí)候自動(dòng)檢測默認(rèn)Servlet,這里它使用的是一份主流Servlet容器(包括Tomcat、Jetty、GlassFish、JBoss、Resin、WebLogic,和WWebSphere)已知的名稱列表。如果默認(rèn)Servlet被配置了一個(gè)其他的名字,或者使用了一個(gè)列表里未提供默認(rèn)Servlet名稱的容器,那么默認(rèn)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"/>


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號