Spring环境搭建之:Spring MVC、文件上传下载


相关jar包:
导入文件上传下载组件的jar包
commons-fileupload-1.3.jar
commons-io-2.4.jar

Spring MVC中使用JstlView时需要添加的包
jstl-1.1.2.jar
standard-1.1.2.jar

1.整体架构

2.web.xml文件配置DispatcherServlet拦截所有的请求

01<servlet>
02    <servlet-name>chapter2</servlet-name>
03    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
04        <init-param>
05            <param-name>contextConfigLocation</param-name>
06            <param-value>/WEB-INF/conf/chapter2-servlet.xml</param-value>
07        </init-param>
08    <load-on-startup>1</load-on-startup>
09</servlet>
10 
11<servlet-mapping>
12    <servlet-name>chapter2</servlet-name>
13    <url-pattern>/</url-pattern>
14</servlet-mapping>

DispatcherServlet默认会加载WEB-INF/[DispatcherServlet的servlet-name]-servlet.xml配置文件。
这里的[servlet-name]为chapter2,就一定要添加一个chapter2-servlet.xml文件

这里该文件不是在默认位置WEB-INF下,而是在WEB-INF/conf/下,就需要通过<init-param>指定其配置路径
contextConfigLocation

1<init-param>
2    <param-name>contextConfigLocation</param-name>
3    <param-value>/WEB-INF/conf/chapter2-servlet.xml</param-value>
4</init-param>

<load-on-startup>指定服务器启动时DispatcherServlet初始化的优先级,数字越小越优先初始化。


3.xxx-servlet.xml文件的配置

01<?xmlversion="1.0"encoding="UTF-8"?>
02<beansxmlns="http://www.springframework.org/schema/beans"
03    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
04        xmlns:context="http://www.springframework.org/schema/context"
05    xmlns:mvc="http://www.springframework.org/schema/mvc"
06    xsi:schemaLocation="
07        http://www.springframework.org/schema/beans
08        http://www.springframework.org/schema/beans/spring-beans.xsd
09        http://www.springframework.org/schema/context
10        http://www.springframework.org/schema/context/spring-context.xsd
11        http://www.springframework.org/schema/mvc
12        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
13 
14    <!--
15        启动SpringMVC的注解功能,它会自动注册HandlerMapping、
16        HandlerAdapter、ExceptionResolver的相关实例
17    -->
18    <mvc:annotation-driven/>
19    <mvc:default-servlet-handler/>
20    <!-- DispatcherServlet会过滤所有的请求,这样请求静态资源时会出问题,加上该配置后,请求resources下面的静态资源时,url不会被过滤 -->
21    <mvc:resourcesmapping="/resources/**"location="/resources/"/>
22    <!-- 扫描添加了@Controller等注解的类 -->
23    <context:component-scanbase-package="cn.javass.chapter2.web.controller"/>
24 
25    <!--
26        ViewResolver 视图解析器,对处理器返回的ModelAndView进行解析,
27        返回到相应的视图页面, 以UploadController为例,上传成功后经过解析会
28        返回/WEB-INF/jsp/success.jsp视图页面
29    -->
30    <beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver">
31        <propertyname="viewClass"value="org.springframework.web.servlet.view.JstlView"/>
32        <propertyname="prefix"value="/WEB-INF/jsp/"/>
33        <propertyname="suffix"value=".jsp"/>
34    </bean>
35    <!-- 文件解析器 -->
36    <beanname="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
37        <propertyname="defaultEncoding"value="utf-8"></property>
38        <propertyname="maxUploadSize"value="10485760000"></property>
39        <propertyname="maxInMemorySize"value="40960"></property>
40    </bean>
41</beans>

4.Controller控制器

01package cn.javass.chapter2.web.controller;
02 
03import java.io.File;
04import java.io.IOException;
05import java.util.Calendar;
06import java.util.Date;
07 
08import javax.servlet.http.HttpServletRequest;
09 
10import org.springframework.stereotype.Controller;
11import org.springframework.web.bind.annotation.RequestMapping;
12import org.springframework.web.bind.annotation.RequestParam;
13import org.springframework.web.multipart.commons.CommonsMultipartFile;
14 
15@Controller
16@RequestMapping("/file")
17public classUploadController {
18 
19    @RequestMapping("/upload")
20    publicString upload(@RequestParamCommonsMultipartFile file,
21            HttpServletRequest request)throws IllegalStateException,
22            IOException {
23        // isEmpty()返回上传的文件是否为空,有2种情况: 1、文件表单中是否选择了文件 2、选择的文件是否有内容
24        if(!file.isEmpty()) {
25            String fileName = file.getOriginalFilename();
26            fileName =new Date().getTime() + fileName;
27            System.out.println("文件名----------->"+ fileName);
28            String extension = fileName
29                    .substring(fileName.lastIndexOf(".") +1);
30            if(extension != null
31                    && (extension.equalsIgnoreCase("xls") || extension
32                            .equalsIgnoreCase("xlsx"))) {
33                finalString TEMP_FILE_PATH = request.getServletContext()
34                        .getRealPath("/WEB-INF/upload");
35                finalString FILE_SEPARATOR = System.getProperties()
36                        .getProperty("file.separator");
37                String filePath = TEMP_FILE_PATH + FILE_SEPARATOR + fileName;
38                File f =new File(filePath);
39                // 2种文件拷贝的方法
40                file.transferTo(f);
41                // FileUtils.copyInputStreamToFile(file.getInputStream(), f);
42 
43                // 删除保存时间超过2天的临时文件
44                deleteTempFile(2, TEMP_FILE_PATH);
45 
46                return"success";
47            }else {
48                System.out.println("文件格式不对,请上传xls或xlsx格式");
49                return"fail";
50            }
51        } else {
52            return"fail";
53        }
54    }
55 
56    @RequestMapping("/toupload")
57    publicString toUpload() {
58        return"upload";
59    }
60 
61    /**
62     * 删除指定目录path下,文件存在时间超过指定day天数的文件
63     *
64     * @param day
65     *            所要清理的目标文件已经存在的天数
66     * @param path
67     *            所要清理文件的文件夹路径
68     */
69 
70    privatevoid deleteTempFile(intday, String path) {
71        Date date;
72        Date dateNow;
73        Calendar cal = Calendar.getInstance();
74        Calendar calNow = Calendar.getInstance();
75        File filepath =new File(path);
76        File[] files;
77        if(filepath.exists()) {
78            if(filepath.isDirectory()) {
79                files = filepath.listFiles();
80                for(int i = 0; i < files.length; i++) {
81                    date =new Date(files[i].lastModified());
82                    dateNow =new Date();
83                    cal.setTime(date);
84                    calNow.setTime(dateNow);
85                    intdec = calNow.get(Calendar.DAY_OF_YEAR)
86                            - cal.get(Calendar.DAY_OF_YEAR);
87                    // 删除指定日期的文件
88                    if(dec >= day) {
89                        files[i].delete();
90                    }
91                }
92            }
93        }
94    }
95}

@Controller 指定该类为控制器,可以拦截url请求,也可以直接使用HttpServletRequest/Response
@RequestMapping 的value指定请求映射的url
@RequestParam 可以取出请求时传输的参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值