要使用基于Servlet 3.0的多路传输转换功能:
1、在web.xml中为DispatcherServlet添加一个multipart-config元素
2、通过Servlet编程的方法使用javax.servlet.MultipartConfigElement进行注册
3、自己定制了自己的Servlet类,那你必须使用javax.servlet.annotation.MultipartConfig对其进行注解。
注意:诸如最大文件大小或存储位置等配置选项都必须在这个Servlet级别进行注册,因为Servlet 3.0不允许在解析器MultipartResolver的层级配置这些信息。
传统的servlet都是在web.xml
中配置,从Servlet 3.0
开始提供了ServletContainerInitializer
接口,允许使用代码去配置servlets
、filters
、listeners
。
Spring为我们提供了一个该接口的实现类SpringServletContainerInitializer
,查看源代码可以知道该类通过@HandlesTypes()
注解指定了onStartup()
方法的第一个参数接收WebApplicationInitializer
实现类的集合。所以如果我们要使用这种方式配置servlet,只需要实现WebApplicationInitializer
接口即可。
public class WebInitializer implements WebApplicationInitializer { private static final Logger logger = LoggerFactory.getLogger(WebInitializer.class); @Override public void onStartup(javax.servlet.ServletContext servletContext) throws ServletException { logger.info("begin init web application."); //配置Spring AnnotationConfigWebApplicationContext springContext = new AnnotationConfigWebApplicationContext(); springContext.register(SpringConfig.class); //添加linstener servletContext.addListener(new ContextLoaderListener(springContext)); //添加servlet ServletRegistration.Dynamic dispatcher = servletContext.addServlet( "dispatcher", new DispatcherServlet(springContext)); dispatcher.setLoadOnStartup(1); dispatcher.addMapping("/"); //添加filter LoggerFilter loggerFilter = new LoggerFilter(); FilterRegistration.Dynamic logFilterRegistration=container.addFilter("requestResponseLogFilter", loggerFilter); logFilterRegistration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST, DispatcherType.ASYNC), false, "/*"); logger.info("init web application success."); } }
了解
原文:http://www.cnblogs.com/lemos/p/6534550.html