详解SpringMVC中的日期处理和文件上传操作
作者:小威要向诸佬学习呀 发布时间:2021-11-13 05:39:18
标签:SpringMVC,日期,处理,文件,上传
日期格式处理
在控制器中使用对象接收数据
前端:
<form action="test/add" method="post">
<p>图书名称:<input type="text" name="bookName"/></p>
<p>图书作者:<input type="text" name="bookAuthor"/></p>
<p>图书价格:<input type="text" name="bookPrice"/></p>
<p><input type="submit" value="提交"/></p>
</form>
后端
@Controller
@RequestMapping("/test")
public class TestController {
@RequestMapping("/add")
//表单提交的多个数据,在控制器方法中可以使用对象接收
//但是提交的数据的key必须要与对象的属性名一致
public String addBook(Book book){
return "/tips.jsp";
}
}
日期格式处理
如果前端需要输入日期数据,在控制器中转换成Date对象,SpringMVC要求前端输入的日期格式必须为yyyy/MM/dd
如果甲方要求日期格式必须为指定的格式,而这个指定格式SpringMVC不接受,该如何处理呢?
自定义日期转换器
创建自定义日期转换器
/***
* 1.创建一个类实现Converter接口,泛型指定从什么类型转换为什么类型
* 2.实现convert转换方法
*/
public class MyDateConverter implements Converter<String, Date> {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
public Date convert(String s) {
Date date = null;
try {
date = sdf.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
配置自定义转换器
<!-- 声明MVC使用注解驱动 -->
<mvc:annotation-driven conversion-service="converterFactory"/>
<bean id="converterFactory" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.qfedu.utils.MyDateConverter"/>
</set>
</property>
</bean>
文件上传下载
SpringMVC框架部署
基于Maven创建web工程
添加SpringMVC所需的依赖
Spring:context aspects jdbc test web webmvc jackson
创建SpringMVC配置文件
在web.xml中配置SpringMVC的前端控制器
在web.xml中配置SpringMVC的编码过滤器
配置springmvc静态资源处理策略
文件上传
案例:添加图书,同时提交图书的封面图片
前端提交文件
表单提示方式必须为post
表单enctype属性设置为multipart/form-data
<form action="book/add" method="post" enctype="multipart/form-data">
<p>图书名称:<input type="text" name="bookName"/></p>
<p>图书作者:<input type="text" name="bookAuthor"/></p>
<p>图书价格:<input type="text" name="bookPrice"/></p>
<p>图书封面:<input type="file" name="imgFile"/></p>
<p><input type="submit" value="提交"/></p>
</form>
控制器接收数据和文件
SpringMVC处理上传文件需要借助于CommonsMultipartResolver文件解析器
添加依赖:commons-io commons-fileupload
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
在spring-servlet.xml中配置文件解析器
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10240000"/>
<property name="maxInMemorySize" value="102400"/>
<property name="defaultEncoding" value="utf-8"/>
</bean>
控制器接收文件
在处理文件上传的方法中定义一个MultiPartFile类型的对象,就可以接受图片了
@Controller
@RequestMapping("/book")
public class BookController {
@RequestMapping("/add")
public String addBook(Book book, MultipartFile imgFile, HttpServletRequest request) throws IOException {
System.out.println("--------------add");
//imgFile就表示上传的图片
//1.截取上传文件的后缀名,生成新的文件名
String originalFilename = imgFile.getOriginalFilename();
String ext = originalFilename.substring( originalFilename.lastIndexOf(".") );
String fileName = System.currentTimeMillis()+ext;
//2.获取imgs目录在服务器的路径
String dir = request.getServletContext().getRealPath("imgs");
String savePath = dir+"/"+fileName;
//3.保存文件
imgFile.transferTo( new File(savePath));
//4.将图片的访问路径设置到book对象
book.setBookImg("imgs/"+fileName);
//5.调用service保存book到数据库
return "/tips.jsp";
}
}
文件下载
显示文件列表
list.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="external nofollow" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<!-- 可选的 Bootstrap 主题文件(一般不用引入) -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap-theme.min.css" rel="external nofollow" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<body>
<h4>文件列表</h4>
<div class="row" id="container"></div>
<script type="text/javascript" src="js/jquery-3.4.1.min.js"></script>
<script type="text/javascript">
$.get("book/list",function(res){
for (var i = 0; i < res.length; i++) {
var fn = res[i];
var htmlStr = "<div class='col-lg-2 col-md-3 col-sm-4 col-xs-6'><div class='thumbnail'><img src='imgs/"+fn+"' alt='...'> <div class='caption'><p><a href='#' class='btn btn-primary' role='button'>下载</a></p></div> </div> </div>";
$("#container").append(htmlStr);
}
},"json");
</script>
</body>
</html>
BookController
@RequestMapping("/list")
@ResponseBody
public String[] listImgs(HttpServletRequest request){
//从imgs目录下获取所有的图片信息
String dir = request.getServletContext().getRealPath("imgs");
File imgDir = new File(dir);
String[] fileNames = imgDir.list();
return fileNames;
}
实现文件下载
list.jsp
var htmlStr = "<div class='col-lg-2 col-md-3 col-sm-4 col-xs-6'><div class='thumbnail'><img src='imgs/"+fn+"' alt='...'> <div class='caption'><p><a href='book/download?fname="+fn+"' class='btn btn-primary' role='button'>下载</a></p></div> </div> </div>";
BookController
@RequestMapping("/download")
public void downloadImg(String fname, HttpServletRequest request, HttpServletResponse response) throws Exception {
//从imgs目录找到当前文件
String dir = request.getServletContext().getRealPath("imgs");
String filePath = dir+"/"+fname;
FileInputStream fileInputStream = new FileInputStream(filePath);
response.setContentType("application/exe");
response.addHeader("Content-Disposition","attachment;filename="+fname);
IOUtils.copy(fileInputStream, response.getOutputStream());
}
来源:https://blog.csdn.net/qq_53847859/article/details/126348598


猜你喜欢
- 1、官网概括引用官网说法:The Java Virtual Machine defines various run-time data ar
- 这里记录下C#中using关键字的使用方法。Using的使用大致分别以下三种:1 :using 指令(命名空间)using System;u
- 今天在码代码的时候突然想到这个问题,觉得有点困惑。在网上也翻阅不少帖子其中有一个帖子给了我一个思路,其实也是解释了基础概念。概念一:try
- 此类的功能包括发送邮件,邮箱格式是否正确,和在不发送邮件的情况下判断邮箱用户名和密码是否正确,鉴于POP检查邮箱用户名和密码出现错误情况返回
- SqlSessionFactory的openSession方法正如其名,Sqlsession对应着一次数据库会话。由于数据库回话不是永久的,
- 本文基于ThreadLocal原理,实现了一个上下文状态管理组件Scope,通过开启一个自定义的Scope,在Scope范围内,可以通过Sc
- 了解JVM内存结构的目的在Java的开发过程中,因为有JVM自动内存管理机制,不再需要像在C、C++开发那样手动释放对象的内存空间,不容易出
- 异常处理是每个项目中都绕不开的话题,那么如何优雅的处理异常,是本文的话题。本文将结合SpringBoot框架一起和大家探讨下。要思考的问题在
- 前言众所周知,Struts2是个非常优秀的开源框架,我们能用Struts2框架进行开发,同时能快速搭建好一个Struts2框架,但我们是否能
- Nacos是什么和Eureka,zookeeper,consul相同,Nacos也是一个注册中心组件咯,当然是,不过它不仅仅是注册中心。Na
- swing自带的窗体是不能够满足我们的应用需求的,所以需要制作任意图片和形状的JFrame框体,比如下图:并且可以设置窗体背景图片的透明度下
- @Value注解设置默认值在Spring Boot中,如果使用@Value注解对属性进行赋值,但如果在配置文件或启动参数中未指定对应的参数值
- android studio 版本不同连接手机方式有细微的不同,主要方式相似。介绍主要分手机和电脑两部分介绍。一、手机部分1、手机端下载一个
- Eureka大白话解析笔记补录:1.Eureka 介绍Spring Cloud Eureka 是 Spring Clou
- public class BeanDefinitionHolder implements BeanMetadataElement { &nb
- 本文实例讲述了C#编程获取IP地址的方法。分享给大家供大家参考,具体如下:1、获取客户端IP/// <summary>/// 获
- 本文实例为大家分享了java实现猜拳小游戏的具体代码,供大家参考,具体内容如下User.javaimport java.util.Scann
- 当我提交项目输入中文描述信息的时候,发现IDEA 的 Terminal无法显示中文信息,显示的是下面这样的因为我的终端设置了git.bash
- Java2在1.4中新增了一个关键字:assert。在程序开发过程中使用它创建一个断言(assertion)。,它的语法形式有如下所示的两种
- 1.查询后获取对应的数据集后,传递参数strcodeName,根据数据集中strcodeName的匹配对应字段,获取数据集中对应的目的字段p