前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JSP上传文件与导出Excel表

JSP上传文件与导出Excel表

作者头像
端碗吹水
发布2020-09-23 12:27:24
3.8K0
发布2020-09-23 12:27:24
举报

JSP上传文件


我们可以通过Apache的fileupload组件来实现jsp上传文件,这样就不需要自己去写具体的实现了,首先需要配置如下依赖:

代码语言:javascript
复制
<dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.3</version>
</dependency>

写一个简单的jsp页面,通过表单来提交需要上传的文件:

代码语言:javascript
复制
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<!-- enctype是表单提交的数据类型 -->
<form action="upload" method="post" enctype="multipart/form-data">
    <!-- multiple属性可以上传多个文件 -->
    <input type="file" name="fileUpload" multiple="multiple"/>
    <button type="submit" name="subimit">上传</button>
</form>
</body>
</html>

然后编写一个servlet,用来将上传的文件都保存到指定的路径中:

代码语言:javascript
复制
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.apache.commons.io.FileUtils;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;

@WebServlet("/upload")
public class UpLoadServlet extends HttpServlet {

    protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
        // 指定一个临时路径
        DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
        diskFileItemFactory.setRepository(new File("D:/"));

        // 实例化上传文件对象,并把临时目录对象传递给它
        ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
        // 设置编码
        servletFileUpload.setHeaderEncoding("UTF-8");
        // 设置单个文件的最大大小
        servletFileUpload.setFileSizeMax(1024 * 1024 * 5);
        // 设置全部文件的最大大小
        servletFileUpload.setSizeMax(1024 * 1024 * 50);

        // 文件上传后的保存路径
        File saverDir = new File(this.getServletContext().getRealPath("/uploadDir"));
        System.out.println(saverDir.getPath());
        try {
            // 把包含在请求中的文件数据对象拿出来放到集合里
            List<FileItem> fileItemList = servletFileUpload.parseRequest(httpServletRequest);

            // 遍历集合里的文件对象
            for (FileItem fileItem : fileItemList) {

                // 判断是否是表单字段,是的话就打印出来
                if (fileItem.isFormField()) {
                    System.out.println(fileItem.getString());
                }

                // 非表单字段就是文件对象
                if (!fileItem.isFormField()) {
                    // 将文件对象中的数据写入到之前定义的保存目录中
                    FileUtils.copyInputStreamToFile(fileItem.getInputStream(), new File(saverDir, fileItem.getName()));
                }

            }

        } catch (FileUploadException e) {
            e.printStackTrace();
        }
        // 上传完之后再跳回原来的页面中
        httpServletResponse.sendRedirect("upload.jsp");
    }
}

接着在工程中创建uploadDir目录:

JSP上传文件与导出Excel表
JSP上传文件与导出Excel表

我上传了两个文件:

JSP上传文件与导出Excel表
JSP上传文件与导出Excel表

上传之后在你的工程路径下找target目录下的uploadDir目录(如果你使用的是IDEA),看看有没有上传成功,我这里是上传成功了:

JSP上传文件与导出Excel表
JSP上传文件与导出Excel表

<br>

导出Excel表


Apache有个poi组件,可以帮助我们把一些数据导出为Excel表格式的文件,例如可以将mysql的一些表格数据导出成Excel表格式的文件。首先需要配置如下依赖:

代码语言:javascript
复制
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>3.17</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.21</version>
    </dependency>

写一个简单的导出数据的类:

代码语言:javascript
复制
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import java.io.File;
import java.io.IOException;

public class OutputExcel {

    public static void main(String[] args) throws IOException {
        //创建工作薄对象
        HSSFWorkbook workbook = new HSSFWorkbook();
        //创建工作表对象
        HSSFSheet sheet = workbook.createSheet("学生信息");
        // 创建首行
        HSSFRow cells=sheet.createRow(0);
        cells.createCell(0).setCellValue("编号");
        cells.createCell(1).setCellValue("名字");
        cells.createCell(2).setCellValue("性别");
        cells.createCell(3).setCellValue("地址");
        cells.createCell(4).setCellValue("电话号码");

        // 循环给工作表填充数据
        for (int i = 1; i < 100; i++) {
            // 创建行
            cells = sheet.createRow(i);
            // 创建单元格,然后设置单元格的数据
            cells.createCell(0).setCellValue(i);
            cells.createCell(1).setCellValue("小明");
            cells.createCell(2).setCellValue("男");
            cells.createCell(3).setCellValue("湖南");
            cells.createCell(4).setCellValue("15669855326");
        }
        // 将生成的Excel格式的数据保存到指定的路径中
        workbook.write(new File("E:\\test.xls"));
    }
}

然后打开文件,文件的内容如下:

JSP上传文件与导出Excel表
JSP上传文件与导出Excel表

如图证明导出成功。

也可以事先准备好一个带有样式的Excel文件,然后把数据导入该Excel文件中,例如我有一个Excel文件,文件样式如下:

JSP上传文件与导出Excel表
JSP上传文件与导出Excel表

编写代码如下:

代码语言:javascript
复制
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class OutputExcel {

    public static void main(String[] args) throws IOException {
        //创建工作薄对象
        HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream("e:\\note.xls"));
        //得到模板文件的工作表对象
        HSSFSheet sheet = workbook.getSheet("Sheet1");

        // 循环给工作表填充数据
        for (int i = 1; i < 100; i++) {
            // 创建行
            HSSFRow cells = sheet.createRow(i);
            // 创建单元格,然后设置单元格的数据
            cells.createCell(0).setCellValue(i);
            cells.createCell(1).setCellValue("小明");
            cells.createCell(2).setCellValue("男");
            cells.createCell(3).setCellValue("湖南");
            cells.createCell(4).setCellValue("15669855326");
        }
        // 将生成的Excel格式的数据保存到指定的路径中
        workbook.write(new File("e:\\note.xls"));
    }

}

完成后,文件内容如下:

JSP上传文件与导出Excel表
JSP上传文件与导出Excel表

还可以导入到别的Excel文件中,只需要把保存路径改一下就可以了。

<br>

把数据库中的表格数据导出为Excel表: 数据库表格内容如下:

JSP上传文件与导出Excel表
JSP上传文件与导出Excel表

1.写一个数据库连接对象管理类:

代码语言:javascript
复制
import java.sql.Connection;
import java.sql.DriverManager;

public class DBManager {

    public static Connection getConnection() throws Exception {
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection=DriverManager.getConnection("jdbc:mysql:///jdbc","root","password");
        return connection;
    }
}

2.编写一个类,将数据库表格的数据转换成Excel表格式:

代码语言:javascript
复制
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import java.io.File;
import java.sql.*;

public class OutputDataToXls {

    public static void main(String[] args) throws Exception {
        //创建工作薄对象
        HSSFWorkbook workbook = new HSSFWorkbook();
        //创建工作表对象
        HSSFSheet hssfSheet = workbook.createSheet("学生信息");

        //得到数据库连接对象并执行查询语句
        Connection connection = DBManager.getConnection();
        PreparedStatement preparedStatement = connection.prepareStatement("select * from student");
        ResultSet resultSet = preparedStatement.executeQuery();

        //拿到表结构对象
        ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
        //得到总列数
        int columnCount = resultSetMetaData.getColumnCount();
        //创建首行
        HSSFRow cells = cells = hssfSheet.createRow(0);
        //创建首行的单元格并将列名填充进去
        for (int i = 1; i <= columnCount; i++) {
            cells.createCell(i - 1).setCellValue(resultSetMetaData.getColumnName(i));
        }

        //将查询出来的数据填充到每一行的单元格中
        for (int i = 1; resultSet.next(); i++) {
            cells = hssfSheet.createRow(i);
            for (int j = 1; j <= columnCount; j++) {
                cells.createCell(j - 1).setCellValue(resultSet.getObject(resultSetMetaData.getColumnName(j)).toString());
            }
        }
        // 将生成的Excel格式的数据保存到指定的路径中
        workbook.write(new File("e:\\student.xls"));
    }
}

3.完成后,打开生成的文件,效果如下:

JSP上传文件与导出Excel表
JSP上传文件与导出Excel表

如果需要样式什么的,可以使用之前介绍的方法,先准备一个空的模板文件,然后再写入数据。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-12-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • JSP上传文件
  • 导出Excel表
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档