ในแอปพลิเคชั่นที่ใช้งานได้จริงคุณมักจะพบกับสถานการณ์ที่ Excel อัปโหลดหรือดาวน์โหลดเช่นการนำเข้าข้อมูลการดาวน์โหลดสถิติ ฯลฯ เพื่อแก้ไขปัญหานี้ฉันเขียนตัวอย่างดาวน์โหลดการอัปโหลดอย่างง่าย ๆ ตาม SpringMVC ซึ่งการประมวลผลของ Excel ใช้ส่วนประกอบ POI ของ Apache
การพึ่งพาหลักมีดังนี้:
<การพึ่งพา> <roupId> Commons-io </groupId> <ratifactId> Commons-io </artifactid> <cersion> 2.4 </เวอร์ชัน> </การพึ่งพาอาศัยกัน> <predency> <sderncy> <RoupID> org.springframework </groupId> <ratifactId> Spring-Web </artifactid> <sersion> 4.0.0.release </version> </การพึ่งพา> <การพึ่งพา> <GroupId> org.springframework </groupid> </sderctency> <การพึ่งพาอาศัย> <roupId> org.apache.poi </groupId> <ratifactid> poi </artifactid> <cersion> 3.10.1 </version> </dependency>
หมวดหมู่การประมวลผลที่เกี่ยวข้อง:
(i) คลาสคอนโทรลเลอร์
แพ็คเกจ com.research.spring.controller; นำเข้า java.io.ioException; นำเข้า java.util.arraylist; นำเข้า java.util.hashmap; นำเข้า java.util.list; นำเข้า java.util.map; นำเข้า org.apache.poi.hssf.usermodel.hssfworkbook; นำเข้า org.apache.poi.ss.usermodel.row; นำเข้า org.apache.poi.ss.usermodel.sheet; นำเข้า org.apache.poi.ss.usermodel.workbook; นำเข้า org.springframework.steretype.controller; นำเข้า org.springframework.web.bind.annotation.requestmapping; นำเข้า org.springframework.web.bind.annotation.requestparam; นำเข้า org.springframework.web.multipart.multipartfile; นำเข้า org.springframework.web.servlet.modelandview; นำเข้า com.research.spring.model.userinfo; นำเข้า com.research.spring.view.excelview; @Controller @RequestMapping ("/ไฟล์") คลาสสาธารณะ FileController {/** * การประมวลผลไฟล์อัปโหลดไฟล์ * @param ไฟล์ * @return */@requestmapping ("/อัปโหลด") โมเดลสาธารณะ // นี่คือการประมวลผลด้วยไฟล์ที่มีชื่อไฟล์รวมถึง "ผู้ใช้" และเทมเพลตใช้เทมเพลตดาวน์โหลดถ้า (file.getoriginalfilename (). มี ("ผู้ใช้")) {ลอง {เวิร์กบุ๊ก wb = hssfworkbook ใหม่ (file.getInputStream ()); แผ่นชีท = wb.getSheetat (0); สำหรับ (int i = 1; i <= sheet.getLastrownum (); i ++) {row row = sheet.getrow (i); userInfo info = ใหม่ userInfo (); info.setUserName (row.getCell (0) .getStringCellValue ()); info.setPassword (row.getCell (1) .getStringCellValue ()); list.add (ข้อมูล); }} catch (ioexception e) {e.printstacktrace (); }} modelandView mav = new modelandView ("เนื้อหา"); mav.addobject ("เนื้อหา", list.toString ()); กลับมา mav; }/*** การดาวน์โหลดไฟล์ excel การประมวลผล*/@requestmapping ("/ดาวน์โหลด") โมเดลสาธารณะและวิวทิวทัศน์ downloadexcel () {list <userinfo> list = new ArrayList <UserInfo> (); userInfo userInfo = ใหม่ userInfo (); userInfo.SetPassword ("0000"); userInfo.SetUserName ("SDFAS"); list.add (userinfo); list.add (userinfo); list.add (userinfo); list.add (userinfo); แผนที่ <string, list <userInfo >> map = new hashmap <string, list <userinfo >> (); map.put ("Infolist", รายการ); ExcelView VE = New ExcelView (); ส่งคืน ModelandView ใหม่ (VE, MAP); -(ii) คลาสเอนทิตี
แพ็คเกจ com.research.spring.model; คลาสสาธารณะ userInfo {ชื่อผู้ใช้สตริงส่วนตัว; รหัสผ่านสตริงส่วนตัว สตริงสาธารณะ getUserName () {ส่งคืนชื่อผู้ใช้; } โมฆะสาธารณะ setUserName (ชื่อผู้ใช้สตริง) {this.userName = ชื่อผู้ใช้; } สตริงสาธารณะ getPassword () {ส่งคืนรหัสผ่าน; } โมฆะสาธารณะ setPassword (รหัสผ่านสตริง) {this.password = รหัสผ่าน; } @Override สตริงสาธารณะ toString () {return "userInfo [username =" + ชื่อผู้ใช้ + ", รหัสผ่าน =" + รหัสผ่าน + "]"; -(iii) คลาสดู
คลาสนี้ใช้เมื่อดาวน์โหลดและเมื่อแสดงหน้าในฤดูใบไม้ผลิคุณใช้คลาสมุมมองที่กำหนดเองเพื่อทำการประมวลผลที่เกี่ยวข้องกับ Excel
แพ็คเกจ com.research.spring.view; นำเข้า Java.io.OutputStream; นำเข้า java.net.urlencoder; นำเข้า java.util.list; นำเข้า java.util.map; นำเข้า javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.httpservletResponse; นำเข้า org.apache.poi.hssf.usermodel.hssfworkbook; นำเข้า org.apache.poi.ss.usermodel.cell; นำเข้า org.apache.poi.ss.usermodel.row; นำเข้า org.apache.poi.ss.usermodel.sheet; นำเข้า org.springframework.web.servlet.view.document.abstractexcelview; นำเข้า com.research.spring.model.userinfo; / ** * ดาวน์โหลด excel view * * @author wdmcygah * */ คลาสสาธารณะ ExcelView ขยายบทคัดย่อ abstractExcelView {@Override ป้องกันโมฆะ buildExcelDocument (แผนที่ <สตริงวัตถุ> รุ่น HSSFWORKBOOK list <userInfo> list = (list <userInfo>) model.get ("Infolist"); if (list! = null && list.size ()! = 0) {int len = list.size (); แผ่นชีท = Workbook.createsheet (); // บรรทัดแรกของข้อความคำอธิบายแถวแถว = sheet.createrow (0); เซลล์เซลล์ = row.createCell (0, cell.cell_type_string); cell.setCellValue ("ชื่อผู้ใช้"); cell = row.createCell (1, cell.cell_type_string); cell.setCellValue ("รหัสผ่าน"); // ต่อไปนี้เป็นเนื้อหาเฉพาะสำหรับ (int i = 0; i <len; i ++) {row = sheet.createrow (i+1); cell = row.createCell (0, cell.cell_type_string); cell.setCellValue (list.get (i) .getUserName ()); cell = row.createCell (1, cell.cell_type_string); cell.setCellValue (list.get (i) .getPassword ()); }} Response.SetContentType ("Application/vnd.ms-excel"); Response.Setcharacterencoding ("UTF-8"); // ชื่อไฟล์ถูกเข้ารหัสที่นี่เพื่อให้แน่ใจว่าอักขระภาษาจีนจะปรากฏขึ้นตามปกติในระหว่างการดาวน์โหลดสตริง filename = urlencoder.encode ("user.xls", "UTF-8"); // คุณสมบัติเนื้อหา-การจัดวางถูกตั้งค่าเป็นดาวน์โหลด response.Setheader ("เนื้อหา-การจัดสรร", "ไฟล์แนบ; filename =" + ชื่อไฟล์); OutputStream OS = Response.GetOutputStream (); Workbook.write (OS); os.flush (); os.close (); -(iv) ไฟล์การกำหนดค่าหลัก
เมื่ออัปโหลดไฟล์คุณจะต้องกำหนดค่าคลาส MultipartResolver ในไฟล์การกำหนดค่า หลังการกำหนดค่าสปริงจะส่งผ่านไฟล์ไปยังวัตถุ MultipartFile โดยอัตโนมัติจากนั้นสามารถดำเนินการประมวลผลที่สอดคล้องกันได้ ตัวอย่างเช่นดูคลาสคอนโทรลเลอร์
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://ww.w3.org/2001/xml xmlns: p = "http://www.springframework.org/schema/p" xmlns: บริบท = "http://www.springframework.org/schema/mvc" xmlns: util = "http:/ XSI: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http:/www.springframework http://www.springframework.org/schema/mvc http://www.springframework.org/schema/MVC/SPRING-MVC-3.0.XSD http://www.springframework.org/schema/util/spring-util-3.0.xsd "> <บริบท: Component-scan base-package =" com.research "/> <bean> name = "คำนำหน้า" value = "/web-inf/"/> <property name = "คำต่อท้าย" value = ". jsp"/> </ebean> <!-อัปโหลดการกำหนดค่าไฟล์พาร์เทอร์ไฟล์-> <bean id = "MultipartResolver"> <property name = "ค่าเริ่มต้น name = "MaxUploadSize" value = "5242880000000"> </porement> <!-เส้นทางชั่วคราวเพื่ออัปโหลดไฟล์มันจะถูกลบโดยอัตโนมัติหลังจากอัปโหลด-> <property name = "UploadTempDir" value = "upload/temp"> </property>
(v) หน้าทดสอบ
<html> <head> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"/> </head> <body> <h3> ทดสอบฟังก์ชั่นการดาวน์โหลด excel </h3> <form = "posts/download.htm" enctype = " excel "> </put> </form> <h3> ทดสอบฟังก์ชันการอัปโหลด excel </h3> <form action =" ไฟล์/upload.htm "enctype =" multipart/form-data "method =" post "> <อินพุตประเภท =" ไฟล์ "ชื่อ =" ไฟล์ "> </อินพุต> <อินพุต
หากคุณต้องการดูซอร์สโค้ดที่สมบูรณ์คุณสามารถตรวจสอบได้ในที่เก็บ GitHub ของฉัน ในหมู่พวกเขาการอัปโหลดไฟล์จะประมวลผลไฟล์ที่ตรงกับเทมเพลตดาวน์โหลดเท่านั้น ในการประมวลผลไฟล์อื่น ๆ คุณต้องใช้มันด้วยตัวเอง การทดสอบรหัสผ่านโดยไม่มีข้อผิดพลาด
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น