相关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控制器
01 | package cn.javass.chapter2.web.controller; |
02 |
03 | import java.io.File; |
04 | import java.io.IOException; |
05 | import java.util.Calendar; |
06 | import java.util.Date; |
07 |
08 | import javax.servlet.http.HttpServletRequest; |
09 |
10 | import org.springframework.stereotype.Controller; |
11 | import org.springframework.web.bind.annotation.RequestMapping; |
12 | import org.springframework.web.bind.annotation.RequestParam; |
13 | import org.springframework.web.multipart.commons.CommonsMultipartFile; |
14 |
15 | @Controller |
16 | @RequestMapping("/file") |
17 | public 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 可以取出请求时传输的参数
本文详细介绍了在SpringMVC项目中部署及使用jar包,配置DispatcherServlet,实现文件上传的功能,包括文件上传组件引入、配置DispatcherServlet、初始化参数设置、文件上传控制器实现与异常处理。


被折叠的 条评论
为什么被折叠?



