詳解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/[email protected]/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/[email protected]/dist/css/bootstrap-theme.min.css" rel="external nofollow" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous"> <!-- 最新的 Bootstrap 核心 JavaScript 文件 --> <script src="https://cdn.jsdelivr.net/npm/[email protected]/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()); }
以上就是詳解SpringMVC中的日期處理和文件上傳操作的詳細內容,更多關於SpringMVC日期處理 文件上傳的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- SpringMVC視圖轉發重定向區別及控制器詳解
- SpringMVC執行步驟、Model的使用詳解
- SpringMVC 接收前端傳遞的參數四種方式小結
- SpringMVC超詳細講解視圖和視圖解析器
- Java Spring MVC獲取請求數據詳解操作