老师,我的ParamDto里面的FileMap下的excel为空

老师,我的ParamDto里面的FileMap下的excel为空

点击导入之后在D://Upload下有导入的文件,但是浏览器如下

http://img1.sycdn.imooc.com//climg/5b6e74660001e4e019201080.jpg

之后我再ImportExcelServlet中加入一些输入语句,ImportExcelServlet代码如下

package org.imooc.Servlet;

import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.imooc.dto.*;
import org.imooc.service.*;
import org.imooc.util.RequestUtil;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class ImportExcelServlet extends HttpServlet {
   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       this.doPost(req, resp);
   }

   @Override
   protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//       判断是普通表单还是带文件上传的表单
       if (ServletFileUpload.isMultipartContent(req)) {
//            调用解析request请求的方法
           ParamDto dto = RequestUtil.parseParam(req);
           System.out.println(dto.toString());
           System.out.println("解析请求,返回ParamDto,存放List两个集合");
           ImpotrExcelParamDto paramDto = new ImpotrExcelParamDto();
           paramDto.setTitle(dto.getParamMam().get("title"));
           paramDto.setExcel(dto.getFileMap().get("excel"));
           System.out.println(paramDto.toString());
           System.out.println("把返回的ParamDto中的两个集合分别取出来,存入ImportExcelDto");
           ExcelService service = new ExcelService();
           System.out.println("新建service对象");
           ImpotrExcelResultDto resultDto = service.imp(paramDto);
           System.out.println("保存文件并解析");
           req.setAttribute("resule", resultDto);
           System.out.println("把解析的结果存入request作用域中");
           System.out.println(resultDto.toString());

       } else {

       }
       req.getRequestDispatcher("/WEB-INF/jsp/importExcelResult.jsp").forward(req, resp);
   }

}

控制台输出如下

ParamDto{paramMam={title=啦啦啦}, fileMap={excel=name=C:\Users\xiaolei\Desktop\新建 Microsoft Excel 工作表.xlsx, StoreLocation=D:\Tomcat\apache-tomcat-9.0.8\temp\upload_6f1cdc09_d1a1_4fe8_8617_c83d3db02067_00000001.tmp, size=9163 bytes, isFormField=false, FieldName=excel}}
解析请求,返回ParamDto,存放List两个集合
ImpotrExcelParamDto{title='啦啦啦', excel=name=C:\Users\xiaolei\Desktop\新建 Microsoft Excel 工作表.xlsx, StoreLocation=D:\Tomcat\apache-tomcat-9.0.8\temp\upload_6f1cdc09_d1a1_4fe8_8617_c83d3db02067_00000001.tmp, size=9163 bytes, isFormField=false, FieldName=excel}
把返回的ParamDto中的两个集合分别取出来,存入ImportExcelDto
新建service对象
保存文件并解析
把解析的结果存入request作用域中
ImpotrExcelResultDto{title='啦啦啦', studentList=[], msg='保存文件失败!'}

ExcelServices代码如下:

package org.imooc.service;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
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.ss.usermodel.WorkbookFactory;
import org.imooc.dto.ImpotrExcelParamDto;
import org.imooc.dto.ImpotrExcelResultDto;
import org.imooc.entity.Student;
import org.imooc.util.FileUtil;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ExcelService {
   public ImpotrExcelResultDto imp(ImpotrExcelParamDto dto) {
       ImpotrExcelResultDto result=new ImpotrExcelResultDto();
       result.setTitle(dto.getTitle());
       List<Student> studentList = new ArrayList<Student>();
       result.setStudentList(studentList);
       String fileName = null;
       try {
//            保存文件,接收返回的保存文件名
           fileName = FileUtil.save(dto.getExcel(), FileUtil.SAVE_PATH);
       } catch (Exception e) {
          result.setMsg("保存文件失败!");
       }
//        如果文件名不为空,则保存文件成功,解析
       if (fileName != null) {
           try {
               Workbook workbook = WorkbookFactory.create(new File(FileUtil.SAVE_PATH + fileName));
               Sheet sheet = workbook.getSheetAt(0);
               int rowNum = sheet.getLastRowNum();
               for (int i = 1; i <= rowNum; i++) {
                   Row row = sheet.getRow(i);
                   Student student=new Student();
                   student.setName(row.getCell(0).getStringCellValue());
                   student.setAge((int) row.getCell(1).getNumericCellValue());
                   studentList.add(student);
               }
           } catch (Exception e) {
               result.setMsg("解析文件失败!");
           }
       }
       return result;

   }
}

RequestUtil代码如下

package org.imooc.util;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.imooc.dto.ParamDto;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.List;

public class RequestUtil {
   /**
    * 从request流中解析参数与上传文件
    *
    * @param request
    */
   public static ParamDto parseParam(HttpServletRequest request) {
       ParamDto result = new ParamDto();
//            新建文件上传对象,处理上传
       ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
//            设置编码
       upload.setHeaderEncoding("UTF-8");
       try {
//                解析上传文件
           List<FileItem> fileItemList = upload.parseRequest(request);
           for (FileItem fileItem : fileItemList) {
               String filename = "";//用于存放文件的有效文件名
               if (fileItem.isFormField()) {
//                        是表单项
                   result.getParamMam().put(fileItem.getFieldName(), fileItem.getString("UTF-8"));
//                        System.out.println(fileItem.getFieldName() + "," + fileItem.getString("UTF-8"));
               } else {
//                        是文件上传项
//                        获得有效文件名
                   filename = fileItem.getName().substring(fileItem.getName().lastIndexOf("\\"));
//                      把文件存入指定位置
//                    fileItem.write(new File("d:/Upload/" + filename));
//
                   result.getFileMap().put(filename, fileItem);
               }
           }
       } catch (FileUploadException e) {
           e.printStackTrace();
       } catch (Exception e) {
           e.printStackTrace();
       }


       return result;
   }

}

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
一叶知秋519 2018-08-13 10:57:00

同学你好,我将你的代码贴到老师的源码中运行了一下,发现数据是可以导入的,只是在显示的时候,没有显示出来;

ImportExcelServlet类中,将结果存入request域中时,使用:

req.setAttribute("result", resultDto);

就可以将数据显示到页面;同学的importExcelResult.jsp页面中取值时,是通过${result.title}取值呢,还是通过${resule.title}取值呢,建议同学检查一下对应关系。

祝学习愉快!

一叶知秋519 2018-08-12 11:18:42

同学的问题是导入Excel后,Excel表内的数据没有显示到页面中吗?

  • 提问者 李成大独秀 #1
    是的,页面中没有Excel的内容,我加了一句 System.out.println(paramDto.toString()); 在控制台输出的是:ImpotrExcelParamDto{title='啦啦啦', excel=name=C:\Users\xiaolei\Desktop\新建 Microsoft Excel 工作表.xlsx, StoreLocation=D:\Tomcat\apache-tomcat-9.0.8\temp\upload_6f1cdc09_d1a1_4fe8_8617_c83d3db02067_00000001.tmp, size=9163 bytes, isFormField=false, FieldName=excel}
    2018-08-12 12:42:08
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10204    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师