我有一个包含文本字段和文件输入的JSP表单。我想知道处理表单验证/处理的方法。由于表单有文件输入,因此它是多部分表单,因此我将单独检查文件,如
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
for (FileItem item : items) {
if (item.isFormField()) {
// Process regular form field (input type="text|radio|checkbox|etc", select, etc).
String fieldname = item.getFieldName();
String fieldvalue = item.getString();
// ... (do your job here)
} else {
// Process form file field (input type="file").
String fieldname = item.getFieldName();
String filename = FilenameUtils.getName(item.getName());
InputStream filecontent = item.getInputStream();
// ... (do your job here)
}
}
} catch (FileUploadException e) {
throw new ServletException("Cannot parse multipart request.", e);
}
// ...
}
(摘自here)。
但是,我的问题是如何处理文件(例如excel文件),而不是存储它,只是使用POI XSSF将电子表格数据直接处理到地图中(因为FileInput查找存储的文件路径)? 另外,如何将上面的servlet中的局部变量/映射传递回jsp页面?
基本上,我想允许用户填写一个表单并选择要处理的excel文件,我想在同一个jsp上的servlet中验证之后显示结果而不刷新jsp(比如在表单下方显示结果?) / p>
答案 0 :(得分:0)
您可以直接从InputStream中读取电子表格,例如
InputStream filecontent = item.getInputStream();
XSSFWorkbook wb = new XSSFWorkbook(filecontent);
// get first worksheet
XSSFSheet sheet = wb.getSheetAt(0);
// get cell at top left
System.out.println(sheet.getRow(0).getCell(0).getStringCellValue());