码迷,mamicode.com
首页 > 编程语言 > 详细

spring 之 文件上传 (一)

时间:2018-05-13 16:05:10      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:param   ati   临时   正数   patch   etl   startup   整数   就会   

一、如果使用Servlet3.0对multipart进行支持配置,则需要使用 DispatcherServlet 的 registration 来启用multpart 请求。可以在 自己实现的 AbstractAnnotationConfigDispatcherServletInitializer 类中重载 customizeRegistration 方法。AbstractAnnotationConfigDispatcherServletInitializer 将 DispatcherServlet 注册到 Servlet 容器中就会调用 customizeRegistration 方法。

    /* 通过这个ServletRegistration.Dynamic 可以设置很多 如
     * 1.调用 setLoadOnStartup()设置  load-on-startup 优先级
     * (load-on-startup元素标记容器是否在启动的时候就加载这个 servlet(实例化并调用其init()方法),它的值必须是一个整数,表示servlet应该被载入的顺序,
     * 当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet,当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载,正数的值越小,该servlet的优先级越高,
     * 应用启动时就越先加载当值相同时,容器就会自己选择顺序来加载)
     * 
     * 2.调用 setInitParameter 设置初始化参数
     * 
     * 3.调用 setMultipartConfig 配置对 multipart 的支持
     */
    @Override
    protected void customizeRegistration(Dynamic registration) {
        //设置对 multipart 的支持,临时存储目录为 E:\\javaUploads
        registration.setMultipartConfig(new MultipartConfigElement("E:\\javaUploads"));
        //限制文件大小不超过2MB,整个请求不超过4MB
        //registration.setMultipartConfig(new MultipartConfigElement("E:\\javaUploads", 2097152, 4194304, 0));
    }

添加其他的 Servlet 和 Filter

如果想往Web 容器中注册其他组件,可以创建一个新的初始化器。最简单的方式就是实现spring 的 WebApplicationInitializer 接口。

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration.Dynamic;

import org.springframework.web.WebApplicationInitializer;

import filter.MyFilter;
import servlet.MyServlet;

public class MyServletInitializer implements WebApplicationInitializer{

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        System.out.println("----注册myServlet-----");
        //注册一个 Servlet
        Dynamic myServlet = servletContext.addServlet("myServlet", MyServlet.class);
        //映射到 /testServlet/** 路径上
        myServlet.addMapping("/testServlet");
        //注册Filter
        javax.servlet.FilterRegistration.Dynamic filter = servletContext.addFilter("myFilter", MyFilter.class);
        filter.addMappingForUrlPatterns(null, false, "/testServlet");
        
    }

}

如果要注册Filter并将其映射到DispatcherServlet 上,只需要重载 AbstractAnnotationConfigDispatcherServletInitializer 的 getServletFilters 方法即可。

    //注册 Filter,该 Filter 只会映射到 DispatcherServlet 
    @Override
    protected Filter[] getServletFilters() {
        return new Filter[] {new DispatcherServletFilter()};
    }

 

二、在web.xml中声明 DispatcherServlet

  <!-- ContextLoaderListener 和 DispatcherServlet 各自都会加载一个Spring 应用上下文 -->
  <!-- contextConfigLocation 该上下文参数指定了 ContextLoaderListener 从路径为/WEB-INF/spring/root-context.xml 文件中加载bean定义 -->
  <context-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>/WEB-INF/spring/root-context.xml</param-value><!-- 设置根上下文配置文件位置 -->
  </context-param>
  
  <!-- 注册 ContextLoaderListener -->
  <listener>
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  
  <!-- 注册 DispatcherServlet -->
  <!-- DispatcherServlet 默认会根据 Servlet 名字找到一个文件来加载应用上下文。如在此处它会加载  /WEB-INF/dispatcherServlet-context.xml 这个文件,也可以指定一个路径来加载,如下-->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    
    <init-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>/WEB-INF/spring/servlet-context.xml</param-value>
    </init-param>
    
    <load-on-startup>1</load-on-startup>
  </servlet>
  
  <!-- 将 DispatcherServlet 映射到 "/" -->
  <servlet-mapping>
     <servlet-name>dispatcherServlet</servlet-name>
     <url-pattern>/</url-pattern>
  </servlet-mapping>

 

spring 之 文件上传 (一)

标签:param   ati   临时   正数   patch   etl   startup   整数   就会   

原文地址:https://www.cnblogs.com/codefeng/p/9032354.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!