W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
在Servlet 3.0以上的環(huán)境下,你可以通過(guò)編程的方式來(lái)配置Servlet容器了。你可以完全放棄web.xml
,也可以兩種配置方式同時(shí)使用。以下是一個(gè)注冊(cè)DispatcherServlet
的例子:
import org.springframework.web.WebApplicationInitializer;
public class MyWebApplicationInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext container) {
XmlWebApplicationContext appContext = new XmlWebApplicationContext();
appContext.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");
ServletRegistration.Dynamic registration = container.addServlet("dispatcher", new DispatcherServlet(appContext));
registration.setLoadOnStartup(1);
registration.addMapping("/");
}
}
Spring MVC提供了一個(gè)WebApplicationInitializer
接口,實(shí)現(xiàn)這個(gè)接口能保證你的配置能自動(dòng)被檢測(cè)到并應(yīng)用于Servlet 3容器的初始化中。WebApplicationInitializer
有一個(gè)實(shí)現(xiàn),是一個(gè)抽象的基類,名字叫AbstractDispatcherServletInitializer
。有了它,要配置DispatcherServlet
將變得更簡(jiǎn)單,你只需要覆寫(xiě)相應(yīng)的方法,在其中提供servlet映射、DispatcherServlet
所需配置的位置即可:
public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return null;
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] { MyWebConfig.class };
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
以上的例子適用于使用基于Java配置的Spring應(yīng)用。如果你使用的是基于XML的Spring配置方式,那么請(qǐng)直接繼承AbstractDispatcherServletInitializer
這個(gè)類:
public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {
@Override
protected WebApplicationContext createRootApplicationContext() {
return null;
}
@Override
protected WebApplicationContext createServletApplicationContext() {
XmlWebApplicationContext cxt = new XmlWebApplicationContext();
cxt.setConfigLocation("/WEB-INF/spring/dispatcher-config.xml");
return cxt;
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
AbstractDispatcherServletInitializer
同樣也提供了便捷的方式來(lái)添加過(guò)濾器Filter
實(shí)例并使他們自動(dòng)被映射到DispatcherServlet
下:
public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {
// ...
@Override
protected Filter[] getServletFilters() {
return new Filter[] { new HiddenHttpMethodFilter(), new CharacterEncodingFilter() };
}
}
每個(gè)過(guò)濾器被添加時(shí),默認(rèn)的名稱都基于其類類型決定,并且它們會(huì)被自動(dòng)地映射到DispatcherServlet
下。
關(guān)于異步支持,AbstractDispatcherServletInitializer
的保護(hù)方法isAsyncSupported
提供了一個(gè)集中的地方來(lái)開(kāi)關(guān)DispatcherServlet
上的這個(gè)配置,它會(huì)對(duì)所有映射到這個(gè)分發(fā)器上的過(guò)濾器生效。默認(rèn)情況下,這個(gè)標(biāo)志被設(shè)為true
。
最后,如果你需要對(duì)DispatcherServlet
做進(jìn)一步的定制,你可以覆寫(xiě)createDispatcherServlet
這個(gè)方法。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: