MVC配置替代方案
自定義DispatcherServlet配置
- customizeRegistration(Registration.Dynamic registration):
AbstractDispatcherServletInitializer
中定義的方法,利用傳入的Dynamic
可以完成多項任務,Dynamic是Servlet3中用於動態註冊Servlet所使用的類。
public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
/**
* 重載方法:對DispatcherServlet進行額外配置
* @param registration DispatcherServlet註冊到Servlet容器後,得到的對象
*/
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration){
//設置MultipartConfigElement
registration.setMultipartConfig(
//設置上傳文件的臨時存儲目錄
new MultipartConfigElement("/tmp/spittr/uploads")
);
//設置load-on-startup優先級
registration.setLoadOnStartup(1);
//設置安全角色
registration.setRunAsRole("admin");
//設置初始化參數
registration.setInitParameters(new HashMap<>());
}
}
如上述代碼,重載customizeRegistration方法,實現自定義DispatcherServlet。
- 實現
WebApplicationInitializer
重寫onStartup(ServletContext servletContext)
方法,可以完成其它組件(Servlet、Filter、Listener等)的註冊。
public class MyServletInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
Registration.Dynamic myServlet = servletContext.addServlet("MyServlet", MyServlet.class);
((ServletRegistration.Dynamic) myServlet).addMapping("/custom/**");
}
}
上述代碼註冊了一個Servlet。
- 繼承
AbstractAnnotationConfigDispatcherServletInitializer
重載getServletFilters()
註冊Filter,在只註冊filter且該filter只會映射到DispatcherServlet上時可使用的快捷方式。
@Override
protected Filter[] getServletFilters(){
return new Filter[] {new MyFilter()};
}