找的的代码都会各种报错
上传的jsp页面的action要指向哪个文件?
2条回答 默认 最新
- WorldMobile 2015-11-05 08:35关注
这篇文章主要介绍了JSP上传excel及excel插入至数据库的方法,涉及JSP文件上传及针对excel的读取、写入数据库等操作技巧,需要的朋友可以参考下 本文实例讲述了JSP上传excel及excel插入至数据库的方法。分享给大家供大家参考。具体如下: 此导入excel是与pojo绑定的,(缺点)excle表头必须是pojo的字段值 1. html页面: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 <form id="myform" method="post" enctype="multipart/form-data"> <table> <tr> <td></td> <td> <input type="file" name="filepath" id="filepath" class="easyui-validatebox" required=true validType="equalLength[4]" missingMessage="文件!" value="" /> </td> </tr> <tr align="center"> <td colspan="2"> <a id="btn1" class="easyui-linkbutton" data-options="iconCls:'icon-ok'" style="width: 60px" onclick="subForm();">OK</a> <a id="btn2" class="easyui-linkbutton" data-options="iconCls:'icon-cancel'" style="width: 60px" onclick="closeDig();">Cancel</a> </td> </tr> </table> </form> <script type="text/javascript"> function subForm(){ if($('#myform').form('validate')){ /** var filepath = $("#filepath").val(); alert(filepath); $.ajax({ url: 'excleImport', typs: "post", data: {"filepath":filepath}, async: false, error: function(request) { $('#dg').datagrid('reload'); closeDig(); $.messager.alert("操作提示", "操作成功!","info"); }, success: function(data) { alert("success"); } }); **/ var filepath = $("#filepath").val(); var re = /(\\+)/g; var filename = filepath.replace(re,"#"); //对路径字符串进行剪切截取 var one = filename.split("#"); //获取数组中最后一个,即文件名 var two = one[one.length-1]; //再对文件名进行截取,以取得后缀名 var three = two.split("."); //获取截取的最后一个字符串,即为后缀名 var last = three[three.length-1]; //添加需要判断的后缀名类型 var tp = "xls,xlsx"; //返回符合条件的后缀名在字符串中的位置 var rs = tp.indexOf(last); if(rs != -1){ $("#myform").attr("action","excleImport"); $("#myform").submit(); }else{ $.messager.alert("操作提示", "您选择的上传文件不是有效xls或者xlsx文件!","error"); return false; } } else { $.messager.alert("操作提示", "请选择上传文件!","error"); } } </script> 2. java代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 @RequestMapping("/excleImport") public void excleImport(HttpServletRequest request) throws IOException, Exception { request.setCharacterEncoding("utf-8"); //设置编码 //获得磁盘文件条目工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); //获取文件需要上传到的路径 String path = request.getRealPath("/upload/kaku"); File uploadDir = new File(path); if (!uploadDir.exists()) { uploadDir.mkdirs(); } factory.setRepository(uploadDir); //设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室 factory.setSizeThreshold(1024*1024) ; //高水平的API文件上传处理 ServletFileUpload upload = new ServletFileUpload(factory); //可以上传多个文件 List<FileItem> list = (List<FileItem>)upload.parseRequest(request); for(FileItem item : list) { //获取表单的属性名字 String name = item.getFieldName(); //如果获取的 表单信息是普通的 文本 信息 if(item.isFormField()) { //获取用户具体输入的字符串 ,名字起得挺好,因为表单提交过来的是 字符串类型的 String value = item.getString() ; request.setAttribute(name, value); } //对传入的非 简单的字符串进行处理 ,比如说二进制的 图片,电影这些 else { /** * 以下三步,主要获取 上传文件的名字 */ //获取路径名 String value = item.getName() ; //索引到最后一个反斜杠 int start = value.lastIndexOf("\\"); //截取 上传文件的 字符串名字,加1是 去掉反斜杠, String filename = value.substring(start+1); //文件后缀名 String prefix = filename.substring(filename.lastIndexOf(".") + 1); CardCenter cardCenter = new CardCenter(); request.setAttribute(name, filename); //真正写到磁盘上 //它抛出的异常 用exception 捕捉 //item.write( new File(path,filename) );//第三方提供的 //手动写的 //OutputStream out = new FileOutputStream(new File(path,filename)); InputStream in = item.getInputStream() ; List<CardCenter> listFromExcel = (List<CardCenter>)ExelUtil.exportListFromExcel(in, prefix, cardCenter); this.cardCenterService.excleImport(listFromExcel); /*int length = 0 ; byte [] buf = new byte[1024] ; System.out.println("获取上传文件的总共的容量:"+item.getSize()); // in.read(buf) 每次读到的数据存放在 buf 数组中 while( (length = in.read(buf) ) != -1) { //在 buf 数组中 取出数据 写到 (输出流)磁盘上 out.write(buf, 0, length); } */ in.close(); //out.close(); } } } 3. java代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 public class ExelUtil { //第一列开始 private static int start = 0; //最后一列序号 private static int end =0; public static String getSubString(String str){ return str.substring(0,str.lastIndexOf(".")); } /** * 方法描述:由Excel文件的Sheet导出至List * @param file * @param sheetNum * @return * @throws IOException * @author * @date 2013-3-25 下午10:44:26 * @comment */ public static List<?> exportListFromExcel(File file, String fileFormat,Object dtoobj) throws IOException { return exportListFromExcel(new FileInputStream(file), fileFormat,dtoobj); } /** * 方法描述:由Excel流的Sheet导出至List * @param is * @param extensionName * @param sheetNum * @return * @throws IOException * @author * @date 2013-3-25 下午10:44:03 * @comment */ public static List<?> exportListFromExcel(InputStream is,String fileFormat,Object dtoobj) throws IOException { Workbook workbook = null; if (fileFormat.equals(BizConstant.XLS)) { workbook = new HSSFWorkbook(is); } else if (fileFormat.equals(BizConstant.XLSX)) { workbook = new XSSFWorkbook(is); } return exportListFromExcel(workbook,dtoobj); } /** * 方法描述:由指定的Sheet导出至List * @param workbook * @param sheetNum * @return * @author * @date 2013-3-25 下午10:43:46 * @comment */ private static List<Object> exportListFromExcel(Workbook workbook ,Object dtoobj) { List<Object> list = new ArrayList<Object>(); String[] model = null; Sheet sheet = workbook.getSheetAt(0); // 解析公式结果 FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); int minRowIx = sheet.getFirstRowNum(); int maxRowIx = sheet.getLastRowNum(); for (int rowIx = minRowIx; rowIx <= maxRowIx; rowIx++) { Object obj = null; if(rowIx==minRowIx){ start = sheet.getRow(rowIx).getFirstCellNum(); end = sheet.getRow(rowIx).getLastCellNum(); } Row row = sheet.getRow(rowIx); StringBuilder sb = new StringBuilder(); for (int i = start; i < end; i++) { Cell cell = row.getCell(new Integer(i)); CellValue cellValue = evaluator.evaluate(cell); if (cellValue == null) { sb.append(BizConstant.SEPARATOR+null); continue; } // 经过公式解析,最后只存在Boolean、Numeric和String三种数据类型,此外就是Error了 // 其余数据类型,根据官方文档,完全可以忽略 switch (cellValue.getCellType()) { case Cell.CELL_TYPE_BOOLEAN: sb.append(BizConstant.SEPARATOR + cellValue.getBooleanValue()); break; case Cell.CELL_TYPE_NUMERIC: // 这里的日期类型会被转换为数字类型,需要判别后区分处理 if (DateUtil.isCellDateFormatted(cell)) { sb.append(BizConstant.SEPARATOR + cell.getDateCellValue()); } else { sb.append(BizConstant.SEPARATOR + cellValue.getNumberValue()); } break; case Cell.CELL_TYPE_STRING: sb.append(BizConstant.SEPARATOR + cellValue.getStringValue()); break; case Cell.CELL_TYPE_FORMULA: break; case Cell.CELL_TYPE_BLANK: break; case Cell.CELL_TYPE_ERROR: break; default: break; } } if(rowIx==minRowIx){ String index = String.valueOf(sb); String realmodel =index.substring(1, index.length()); model =realmodel.split(","); }else{ String index = String.valueOf(sb); String realvalue =index.substring(1, index.length()); String[] value =realvalue.split(","); //字段映射 try { dtoobj =dtoobj.getClass().newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } obj = reflectUtil(dtoobj,model,value); list.add(obj); } } return list; } /** * 方法描述:字段映射赋值 * @param objOne * @param listName * @param listVales * @return * @author * @date 2013-3-25 下午10:53:43 * @comment */ @SuppressWarnings("deprecation") private static Object reflectUtil(Object objOne, String[] listName, String[] listVales) { Field[] fields = objOne.getClass().getDeclaredFields(); for (int i = 0; i < fields.length; i++) { fields[i].setAccessible(true); for (int j = 0; j < listName.length; j++) { if (listName[j].equals(fields[i].getName())) { try { if (fields[i].getType().getName().equals(java.lang.String.class.getName())) { // String type if(listVales[j]!=null){ fields[i].set(objOne, listVales[j]); }else{ fields[i].set(objOne, ""); } } else if (fields[i].getType().getName().equals(java.lang.Integer.class.getName()) || fields[i].getType().getName().equals("int")) { // Integer type if(listVales[j]!=null){ fields[i].set(objOne, (int)Double.parseDouble(listVales[j])); }else{ fields[i].set(objOne, -1); } }else if(fields[i].getType().getName().equals("Date")){ //date type if(listVales[j]!=null){ fields[i].set(objOne, Date.parse(listVales[j])); } }else if(fields[i].getType().getName().equals("Double") ||fields[i].getType().getName().equals("float")){ //double if(listVales[j]!=null){ fields[i].set(objOne, Double.parseDouble(listVales[j])); }else{ fields[i].set(objOne, 0.0); } } } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } break; } } } return objOne; } } 希望本文所述对大家的JSP程序设计有所帮助。
解决 无用评论 打赏 举报
悬赏问题
- ¥60 版本过低apk如何修改可以兼容新的安卓系统
- ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
- ¥50 有数据,怎么建立模型求影响全要素生产率的因素
- ¥50 有数据,怎么用matlab求全要素生产率
- ¥15 TI的insta-spin例程
- ¥15 完成下列问题完成下列问题
- ¥15 C#算法问题, 不知道怎么处理这个数据的转换
- ¥15 YoloV5 第三方库的版本对照问题
- ¥15 请完成下列相关问题!
- ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?