首先是jsp页面:

<body scroll=no style="overflow-y:hidden;" onselectstart="return false"><div class="container" style="overflow-y:auto; padding-top:0px;" onscroll="hideAutoTiShi();"><div class="row"><form action="/ds/excelUploadServlet" enctype="multipart/form-data" method="post"><input id="file" type="file" name="file" value="选择文件"/><input id="submit" type="submit" onclick="undo();" value="提交"/></form></div></div><script src="jquery.min.js"></script><script src="jquery.form.js"></script><script src="excel_import.js"></script>
</body>

然后是Servlet的Java服务类

package com.inspur.dtdcommon.ds.cmd;import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.loushang.next.dao.DaoFactory;import com.inspur.dtdcommon.ds.dao.DtdCheckEntBasicInfoDao;
import com.inspur.dtdcommon.ds.dao.DtdCheckEntBasicInfoDetailDao;
import com.inspur.dtdcommon.ds.data.DtdCheckEntBasicInfo;
import com.inspur.dtdcommon.ds.data.DtdCheckEntBasicInfoDetail;
import com.inspur.dtdcommon.util.DtdUtil;
import com.inspur.dtdcommon.util.ImportExecl;public class ExcelUploadServlet extends HttpServlet{private DtdUtil dtdUtil = DtdUtil.getInstance();private DtdCheckEntBasicInfoDao dao = (DtdCheckEntBasicInfoDao) DaoFactory.getDao("com.inspur.dtdcommon.ds.dao.DtdCheckEntBasicInfoDao");private DtdCheckEntBasicInfoDetailDao dao_detail = (DtdCheckEntBasicInfoDetailDao) DaoFactory.getDao("com.inspur.dtdcommon.ds.dao.DtdCheckEntBasicInfoDetailDao");public ExcelUploadServlet() {super();}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req, resp);}/*** //遍历Excel文件,然后读取文件封装成List数据*/@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String zhi=null;FileItemFactory factory = new DiskFileItemFactory();ServletFileUpload upload = new ServletFileUpload(factory);InputStream inputStream = null;DtdCheckEntBasicInfo entity = new DtdCheckEntBasicInfo();List<DtdCheckEntBasicInfo> listInfo = new ArrayList<>();DtdCheckEntBasicInfoDetail bean = new DtdCheckEntBasicInfoDetail();List<DtdCheckEntBasicInfoDetail> listBean = new ArrayList<>();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");/*** 读取上传文件*/try {List  items = upload.parseRequest(req);Iterator iter = items.iterator();while (iter.hasNext()) {FileItem item = (FileItem) iter.next();if (!item.isFormField()) {inputStream = item.getInputStream();}}} catch (FileUploadException e) {e.printStackTrace();}/*** POI遍历Excel文件,然后读取文件封装成List数据*/ImportExecl poi = new ImportExecl();List<List<String>> list = poi.read(inputStream, false);if (list != null) {for (int i = 1; i < list.size(); i++) {List<String> cellList = list.get(i);String ID = dtdUtil.getUUID().toUpperCase();entity.setId(ID);entity.setEntid(ID);entity.setEntname(cellList.get(0));entity.setAreaid(cellList.get(1));entity.setAreaname(cellList.get(2));entity.setRegisteraddress(cellList.get(3));entity.setAddress(cellList.get(4));entity.setSocietycreditcode(cellList.get(5));entity.setLerepname(cellList.get(6));entity.setLerepmobile(cellList.get(7));entity.setLereptelephonenum(cellList.get(8));entity.setIssueDate(cellList.get(9));entity.setValidDate(cellList.get(10));entity.setDataStatus("10");entity.setCreateTime(new Date());listInfo.add(entity);//处理生成List数组
                System.out.println();bean.setId(ID);bean.setEntid(ID);bean.setEntname(cellList.get(0));bean.setRecordInfo(cellList.get(11));bean.setFund(cellList.get(12));bean.setAssets(cellList.get(13));bean.setQualification(cellList.get(14));bean.setRegulators(cellList.get(15));bean.setBusinessScope(cellList.get(16));bean.setRegisteredCapital(cellList.get(17));bean.setEstablishTime(sdf.format(new Date()));bean.setBusinessStartDate(cellList.get(9));bean.setBusinessEndDate(cellList.get(10));bean.setRegistrationAuthority(cellList.get(18));bean.setApprovalDate(cellList.get(19));if("已登记".equals(cellList.get(20))){bean.setRegistrationStatus("1");}else{bean.setRegistrationStatus("0");}listBean.add(bean);}//遍历Excel文件,然后读取文件封装成List数据,然后插入到数据中
            dao.batchInsert(listInfo);dao_detail.batchInsert(listBean);}else{throw new RuntimeException("请填写Excel内容");}}}

ImportExecl 读取Excel的工具类
package com.inspur.dtdcommon.util;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;/*** excel读取 工具类* * @jar包*      该类使用到了以下jar:*      1、poi-ooxml-3.9.jar*      2、poi-3.9.jar*/
public class ImportExecl {/*** main测试*/public static void main(String[] args) throws Exception {ImportExecl poi = new ImportExecl();List<List<String>> list = poi.read("E:/批量导入客户模板.xlsx");if (list != null) {for (int i = 0; i < list.size(); i++) {List<String> cellList = list.get(i);for (int j = 0; j < cellList.size(); j++) {System.out.print("    " + cellList.get(j));}System.out.println();}}}//总行数private int totalRows = 0;//总列数private int totalCells = 0;//错误信息private String errorInfo;//构造方法public ImportExecl() {}/*** 得到总行数*/public int getTotalRows() {return totalRows;}/*** 得到总列数*/public int getTotalCells() {return totalCells;}/*** 得到错误信息*/public String getErrorInfo() {return errorInfo;}/*** 验证excel文件*/public boolean validateExcel(String filePath) {/** 检查文件名是否为空或者是否是Excel格式的文件 */if (filePath == null || !(CheckExcelUtil.isExcel2003(filePath) || CheckExcelUtil.isExcel2007(filePath))) {errorInfo = "文件名不是excel格式";return false;}/** 检查文件是否存在 */File file = new File(filePath);if (file == null || !file.exists()) {errorInfo = "文件不存在";return false;}return true;}/*** 根据文件路径读取excel文件*/public List<List<String>> read(String filePath) throws IOException {List<List<String>> dataLst = new ArrayList<List<String>>();InputStream is = null;try {/** 验证文件是否合法 */if (!validateExcel(filePath)) {System.out.println(errorInfo);return null;}/** 判断文件的类型,是2003还是2007 */boolean isExcel2003 = true;if (CheckExcelUtil.isExcel2007(filePath)) {isExcel2003 = false;}/** 调用本类提供的根据流读取的方法 */File file = new File(filePath);is = new FileInputStream(file);dataLst = read(is, isExcel2003);is.close();is = null;} catch (Exception ex) {ex.printStackTrace();} finally {if (is != null) {try {is.close();} catch (IOException e) {is = null;e.printStackTrace();}}}return dataLst;}/*** 根据流读取Excel文件* * @param inputStream 文件输入流* @param isExcel2003 标识是否2003的excel。*                        true:是2003的excel,false:是2007的excel* @return* * @扩展说明 *          如果使用springmvc的MultipartFile接收前端上传的excel文件的话,可以使用MultipartFile的对象,获取上传的文件名称,*          然后,可以通过 CheckExcelUtil 类的方法,接收文件名称参数,来判断excel所属的版本。最后再调用此方法来读取excel数据。* */public List<List<String>> read(InputStream inputStream, boolean isExcel2003) {List<List<String>> dataLst = null;try {/** 根据版本选择创建Workbook的方式 */Workbook wb = null;if (isExcel2003) {wb = new HSSFWorkbook(inputStream);} else {wb = new XSSFWorkbook(inputStream);}dataLst = read(wb);} catch (IOException e) {e.printStackTrace();}return dataLst;}/*** 读取数据*/private List<List<String>> read(Workbook wb) {List<List<String>> dataLst = new ArrayList<List<String>>();//得到第一个shellSheet sheet = wb.getSheetAt(0);//得到Excel的行数this.totalRows = sheet.getPhysicalNumberOfRows();//得到Excel的列数if (this.totalRows >= 1 && sheet.getRow(0) != null) {this.totalCells = sheet.getRow(0).getPhysicalNumberOfCells();}//循环Excel的行for (int r = 0; r < this.totalRows; r++) {Row row = sheet.getRow(r);if (row == null) {continue;}List<String> rowLst = new ArrayList<String>();//循环Excel的列for (int c = 0; c < this.getTotalCells(); c++) {Cell cell = row.getCell(c);String cellValue = "";if (null != cell) {cell.setCellType(HSSFCell.CELL_TYPE_STRING); //把所有的Excel内容当做字符串处理// 以下是判断数据的类型switch (cell.getCellType()) {case HSSFCell.CELL_TYPE_NUMERIC: // 数字cellValue = cell.getNumericCellValue() + "";break;case HSSFCell.CELL_TYPE_STRING: // 字符串cellValue = cell.getStringCellValue();break;case HSSFCell.CELL_TYPE_BOOLEAN: // BooleancellValue = cell.getBooleanCellValue() + "";break;case HSSFCell.CELL_TYPE_FORMULA: // 公式cellValue = cell.getCellFormula() + "";break;case HSSFCell.CELL_TYPE_BLANK: // 空值cellValue = "";break;case HSSFCell.CELL_TYPE_ERROR: // 故障cellValue = "非法字符";break;default:cellValue = "未知类型";break;}}rowLst.add(cellValue);}//保存第r行的第c列
            dataLst.add(rowLst);}return dataLst;}}class CheckExcelUtil {/*** 检查是否是2003的excel,若是,则返回true*/public static boolean isExcel2003(String filePath) {return filePath.matches("^.+\\.(?i)(xls)$");}/*** 检查是否是2007的excel,若是,则返回true*/public static boolean isExcel2007(String filePath) {return filePath.matches("^.+\\.(?i)(xlsx)$");}
}

最后不要忘了web.xml

<servlet><servlet-name>ExcelUploadServlet</servlet-name><servlet-class>com.inspur.dtdcommon.ds.cmd.ExcelUploadServlet</servlet-class></servlet><servlet-mapping><servlet-name>ExcelUploadServlet</servlet-name><url-pattern>/excelUploadServlet</url-pattern></servlet-mapping>

然后就完成了Excel内容读取,Excel如下:

 读取Excel的时候,是从第二行开始读取的,如果需要从第一行开始读取修改ExcelUploadServlet.java文件中
for (int i = 1; i < list.size(); i++) {}

把其中的i=1修改成i=0就会从Excel第一行开始读取。

form表单提交,Servlet接收并读取Excel文件相关推荐

  1. form表单提交数据的同时上传文件代码示例

    form表单提交数据的同时在表单中上传文件代码示例 一.定义页面 注意:在form表单中加入属性 enctype="multipart/form-data"  表示此表单支持文件上 ...

  2. form表单提交数据到后台的方式

    form表单提交方式 1.无刷新页面提交表单 表单可实现无刷新页面提交,无需页面跳转,如下,通过一个隐藏的iframe实现,form表单的target设置为iframe的name名称, form提交目 ...

  3. 前端form表单提交的方式

    1.无刷新页面提交表单 表单可实现无刷新页面提交,无需页面跳转,如下,通过一个隐藏的iframe实现,form表单的target设置为iframe的name名称, form提交目标位当前页面ifram ...

  4. Request对象接收Form表单提交

    转自:http://www.cnblogs.com/xdp-gacl/p/3798347.html Form表单: <title>HTML的form表单</title> < ...

  5. form 表单提交时用ajax异步请求导致ajax请求结果无法接收问题

    1.背景描述,有个公司内部用的小系统,不想大动干戈用太多前端框架,就用HTML5写了个登陆页面,刚开始想着用form表单提交登陆账户信息.后来因为前后端分离,并且统一用ajax调用后台服务交互数据,因 ...

  6. form表单提交踩坑记

    2019独角兽企业重金招聘Python工程师标准>>> 今天收获了一次集团故障,心塞不已,究其原因,是form表单提交时web服务器对大小做了限制.这个必现的问题在测试阶段也不知为啥 ...

  7. python中前后端通信方法Ajax和ORM映射(form表单提交)

    后端从数据库获取数据给到前端: 第一种方式: admin.py文件代码: @admin.route('/showList') def show():# 获取数据库所有文章数据,得到一个个对象res=A ...

  8. ajax 模拟表单提交,Ajax模拟Form表单提交,含多种数据上传

    ---恢复内容开始--- Ajax提交表单.使用FormData提交表单数据和上传的文件(这里的后台使用C#获取,你可以使用Java一样获取) 有时候前台的数据提交到后台,不想使用form表单上传,希 ...

  9. from提交ajax,form表单提交与ajax消息传递

    form表单提交与ajax消息传递 1.前后端传输数据编码格式contentType: urlencoded 对应的数据格式:name=xxx&password=666 后端获取数据:requ ...

最新文章

  1. MIT新研究:过去80年,算法效率提升到底有多快?
  2. 分享几篇VMP研究和分析的文章
  3. Python进阶06 循环对象与迭代
  4. sqlite3命令详解
  5. .NET Core with 微服务 - Consul 配置中心
  6. 服务器机械硬盘国产厂家,盘点服务器国产化呼声背后的优秀厂商
  7. 被尘封的故事鸿蒙轩,被尘封的故事全任务通关人物存档
  8. 【mysql union all limit的使用】
  9. 计算机一级在线解析,2016年计算机一级试题及答案解析
  10. Multidimensional Scaling (MDS)
  11. mfc之DDX_Control作用
  12. linux reader使用方法,Linux Reader
  13. Simple QQLogin 2.1(QQ登陆器,适用于 QQ2009 或更新版本)
  14. 计算机的硬盘和光驱的接口是什么类型的接口,连接硬盘和光驱是什么接口
  15. c语言无法定位程序输入点 于动态链接库,无法定位程序输入点 于动态链接库怎么办...
  16. 搭档之家| 工作生活中的5个顶级思维(一)
  17. mybase6.0.4的license key的生成方法
  18. CuraEngine源码编译
  19. 【译文】学习深度学习的四个步骤
  20. 初中级前端面试复习总结(浏览器、HTTP、前端安全)

热门文章

  1. linux内核空间open,Linux内核源码分析 - open
  2. oracle归档模式教程,Oracle从归档模式变成非归档模式详细步骤
  3. flask restful 模板
  4. 目标定位--Deep Self-Taught Learning for Weakly Supervised Object Localization
  5. c语言const与*位置关系,C语言程序的存储区域与const关键字的使用方法
  6. c++学习笔记内联函数,函数重载,默认参数
  7. java类的运行顺序_Java语言类的基本运行顺序
  8. 万字总结,体系化带你全面认识 Nginx
  9. 【python小游戏】据说这是一款还原度超高的小游戏,你感受下......
  10. centos jdbc配置mysql_CentOS安装glassfish4.0配置jdbc连接mysql