详解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;
   }

}

详解SpringMVC中的日期处理和文件上传操作

配置自定义转换器

<!--  声明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

标签:SpringMVC,日期,处理,文件,上传
0
投稿

猜你喜欢

  • 使用Java读取Word文件的简单例子分享

    2022-12-17 02:15:19
  • IDEA 2020.1 版自动导入MAVEN依赖的方法(新版MAVEN无法自动导入/更新POM依赖、MAVEN设置自动更新、自动更新快捷键)

    2022-08-27 09:31:22
  • Spring Boot 项目发布到 Tomcat 服务器的操作步骤

    2023-10-28 09:39:05
  • Intellij IDEA 2017新特性之Spring Boot相关特征介绍

    2023-06-22 15:13:02
  • IDEA全量替换一次性解决旧项目并将所有文件换行符改为LF问题

    2022-09-17 18:44:32
  • C# XmlDocument操作XML案例详解

    2021-11-23 04:00:01
  • Spring实现默认标签解析流程

    2021-07-29 10:07:55
  • C#实现简单俄罗斯方块

    2023-06-18 07:18:36
  • 登陆验证码kaptcha结合spring boot的用法详解

    2023-02-19 15:56:32
  • 详解Servlet3.0新特性(从注解配置到websocket编程)

    2023-08-08 14:29:48
  • Mybatis初始化知识小结

    2023-11-01 13:59:27
  • maven中下载jar包源码和javadoc的命令介绍

    2023-07-27 04:41:01
  • 详解Java数据结构之平衡二叉树

    2022-05-06 08:54:13
  • Unity实现图形相交检测

    2021-09-16 09:31:01
  • 详解Android中Runtime解决屏幕旋转问题(推荐)

    2022-04-03 03:12:02
  • C# WinForm RichTextBox文本动态滚动显示文本方式

    2021-09-12 20:44:31
  • 基于Spring Boot保护Web应用程序

    2022-11-15 19:14:48
  • 使用反射方式获取JPA Entity的属性和值

    2023-07-24 17:43:22
  • Java爬虫实现Jsoup利用dom方法遍历Document对象

    2023-06-15 07:52:36
  • 详解Spring缓存注解@Cacheable,@CachePut , @CacheEvict使用

    2021-11-18 12:18:05
  • asp之家 软件编程 m.aspxhome.com