maven+springmvc下载excle文件——ie8可用

29 篇文章 0 订阅
22 篇文章 0 订阅

springmvc下载excle文件

1、新建一个maven的web项目
mvn archetype:generate -DarchetypeCatalog=internal
2、修改pom.xml文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.xueyoucto.xueyou</groupId>
    <artifactId>springmvnDownloadExcel</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>springmvnDownloadExcel Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.0.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.0.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.0.5.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.0.5.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.0.5.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>4.0.5.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>4.0.5.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>4.0.5.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-jms -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
            <version>4.0.5.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc-portlet -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc-portlet</artifactId>
            <version>4.0.5.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-messaging -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-messaging</artifactId>
            <version>4.0.5.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-instrument -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-instrument</artifactId>
            <version>4.0.5.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-framework-bom -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-framework-bom</artifactId>
            <version>4.0.5.RELEASE</version>
            <type>pom</type>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.0.5.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-mapper-asl -->
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.13</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.7</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>springmvnDownloadExcel</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
            </plugin>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <url>http://localhost:8989/manager/text</url>
                    <username>tomcat</username>
                    <password>tomcat</password>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                    <!-- 指定编码格式,否则在DOS下运行mvn compile命令时会出现莫名的错误,因为系统默认使用GBK编码 -->
                    <compilerArguments>
                        <extdirs>src/main/webapp/WEB-INF/lib</extdirs>
                    </compilerArguments>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <!-- 指定编码格式,否则在DOS下运行mvn命令时当发生文件资源copy时将使用系统默认使用GBK编码 -->
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

3、修改web.xml文件
<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>Archetype Created Web Application</display-name>
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/springmvc-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

4、在WEB-INF文件夹下建立springmvc-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

    <context:component-scan base-package="com.xueyoucto.xueyou.controller"/>
    <context:component-scan base-package="com.xueyoucto.xueyou.utils"/>

    <mvc:annotation-driven/>
    <mvc:resources location="/Component/" mapping="/Component/**"/>
    <mvc:resources location="/img/" mapping="/img/**"/>
    <mvc:resources location="/js/" mapping="/js/**"/>
    <mvc:resources location="/css/" mapping="/css/**"/>
</beans>

5、在webapp中建立文件夹和文件,如下图所示:


6、hello.js
/**
 * Created by Administrator on 2016-09-07.
 */
var BASE_URL = "http://localhost:8989/springmvnDownloadExcel/";
$(function () {
    var tempjson= [
        {
            "code": "001",
            "name": "张三",
            "age": "13",
            "address": "青岛市",
            "birthdate": "2000-01-01 00:00:00"
        },
        {
            "code": "002",
            "name": "李四",
            "age": "16",
            "address": "济南市",
            "birthdate": "1997-01-01 00:00:00"
        }
    ];
    var bodyData = JSON.stringify(tempjson);
    bodyData = bodyData.replace(/"/g,'*');
    var Exceldata = {
        headData:['编号','姓名','年龄','地址','生日'],
        bodyData:bodyData
    };
    //下载excel
    $('#excelDownload').click(function () {
        alert('下载excel');
        alert(Exceldata.bodyData);
        DownLoadFile({
            url:BASE_URL + 'Download/testDownLoad',
            data:Exceldata
        })
    });
    //测试按钮
    $('#testDownload').click(function () {
        $.ajax({
            type: "POST",
            url: BASE_URL + 'TestJson/getJson',
            data: {param:bodyData},
            dataType: "json",
            success: function (data) {
                alert(data);
                console.log(data);
            }
        })
    });
});

var DownLoadFile = function (options) {
    var config ={ method: 'post' };
    var $form = $('<form method="' + config.method + '" />');
    $(document.body).append($form);
    $form.attr('action', options.url);
    for (var key in options.data) {
        $form.append('<input type="hidden" name="' + key + '" value="' + options.data[key] + '" />');
    }
    $form[0].submit();
    $form.remove();
};

7、hello.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" pageEncoding="utf-8" %>
<html>
<head>
  <script type="text/javascript" src="${pageContext.request.contextPath}/Component/jquery-1.12.2.min.js"></script>
  <script type="text/javascript" src="${pageContext.request.contextPath}/Component/json2.js"></script>
  <script type="text/javascript" src="${pageContext.request.contextPath}/js/hello.js"></script>
    <title>ccc</title>
    <meta charset="UTF-8"/>
</head>
<body>
<h1>hello</h1>
<input id="testDownload" type="button" value="测试服务器响应">
<input id="excelDownload" type="button" value="下载excel">
<form action="${pageContext.request.contextPath}/TestJson/getJson" method="post">
  <input name="param" value="就是我"/>
  <input type="submit" value="提交">
</form>
</body>
</html>

8、建立如下后台java文件,如图所示:


9、Download.java
package com.xueyoucto.xueyou.controller;

import com.alibaba.fastjson.JSON;
import com.xueyoucto.xueyou.utils.ExcelExport;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by Administrator on 2016-09-06.
 */
@RestController
@RequestMapping(value = "/Download", method = {RequestMethod.GET, RequestMethod.POST}, produces = "application/json;charset=UTF-8")
public class Download {
    @RequestMapping(value = "/testDownLoad")
    public void testDownLoad(HttpServletResponse response, String headData, String bodyData) {
        System.out.println(headData);
        bodyData = bodyData.replaceAll("\\*", "\"");
        System.out.println(bodyData);
        String[] titleArray = headData.split(",");
        String[] keyArray = {"code", "name", "age", "address", "birthdate"};
        System.out.println("================================");
        ExcelExport.getExcelExport().ExportJSONExcel(response, "测试导出", bodyData, titleArray, keyArray);
    }
}

10、TestJson.java
package com.xueyoucto.xueyou.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;

/**
 * Created by Administrator on 2016-09-06.
 */
@RestController
@RequestMapping(value = "/TestJson",method = {RequestMethod.GET,RequestMethod.POST},produces = "application/json;charset=UTF-8")
public class TestJson {
    @RequestMapping(value = "/getJson")
    public Map<String,Object> getJson(String param){
        System.out.println(param);
        Map<String,Object> resMap = new HashMap<String, Object>();
        resMap.put("resCode","1");
        resMap.put("resMessage","成功");
        return resMap;
    }

    @RequestMapping(value = "/getJson2")
    public Map<String,Object> inputCustomer(){
        Map<String,Object> resMap = new HashMap<String, Object>();
        resMap.put("ccc", 123123);
        return resMap;
    }
}

11、ExcelExport.java
package com.xueyoucto.xueyou.utils;

import com.alibaba.fastjson.JSON;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
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 javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * Created by Administrator on 2016/9/5.
 */
public class ExcelExport {
    private static ExcelExport ee;
    private HSSFCellStyle headStyle = null;
    private HSSFWorkbook wb = null;

    public static ExcelExport getExcelExport() {
        if (ee == null) {
            ee = new ExcelExport();
        }
        return ee;
    }

    /**
     * 设置head样式
     */
    private void headFont() {
        HSSFFont headFont = wb.createFont();
        headFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        headFont.setFontName("宋体");
        headFont.setFontHeightInPoints((short) 11);
        headStyle = wb.createCellStyle();
        headStyle.setFont(headFont);
        headStyle.setBorderTop((short) 1);
        headStyle.setBorderRight((short) 1);
        headStyle.setBorderBottom((short) 1);
        headStyle.setBorderLeft((short) 1);
        headStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    }

    /**
     * 导出excel
     * @param response 响应
     * @param fileName 文件名
     * @param strArray 二维数组
     * @throws IOException
     */
    public void ExportExcel(HttpServletResponse response, String fileName, String[][] strArray) throws IOException {
        if (strArray.length == 0) {
            return;
        }
        int arrayRowCount = strArray.length;
        int arrayColCount = strArray[0].length;
        response.reset();
        String time = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(Calendar.getInstance().getTime());
        response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName + time + ".xls", "UTF-8"));
        response.setContentType("application/octet-stream; charset=utf-8");
        wb = new HSSFWorkbook();
        headFont();
        Sheet sh = wb.createSheet();
        //设置表头
        Row trow = sh.createRow(0);
        for (int i = 0; i < arrayColCount; i++) {
            Cell tcell = trow.createCell(i);
            tcell.setCellStyle(headStyle);
            tcell.setCellValue(strArray[0][i]);
        }

        for (int rownum = 1; rownum < arrayRowCount; rownum++) {
            Row row = sh.createRow(rownum);
            for (int cellnum = 0; cellnum < arrayColCount; cellnum++) {
                Cell cell = row.createCell(cellnum);
                if (strArray[rownum][cellnum] != null) {
                    cell.setCellValue(strArray[rownum][cellnum]);
                }
            }
        }
        OutputStream out = response.getOutputStream();
        try {
            wb.write(out);
        } catch (IOException e) {
            e.printStackTrace();
        }
        out.flush();
        try {
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 通过JSON导出excel
     * @param response
     * @param fileName
     * @param bodyData
     * @param titleArray
     * @param keyArray
     */
    public void ExportJSONExcel(HttpServletResponse response,String fileName,String bodyData, String[] titleArray, String[] keyArray){
        if (fileName == null || fileName.equals("")) {
            System.out.println("文件名不能为空!");
            return;
        }
        if (bodyData == null || bodyData.equals("")) {
            System.out.println("导出数据不能为空!");
            return;
        }
        if(titleArray.length != keyArray.length){
            System.out.println("标题内容和JSON中的键个数不同");
            return;
        }

        Map<String, Object> tempMap = new HashMap<String, Object>();
        List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
        resList.add(tempMap);
        resList = JSON.parseObject(bodyData, resList.getClass());

        String[][] tempStrArray = JSONtoStringArray(resList,titleArray,keyArray);
        try {
            ExportExcel(response,fileName,tempStrArray);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 把JSON和title组成String[][]
     * @param jsonList
     * @param titleArray
     * @param keyArray
     * @return
     */
    public String[][] JSONtoStringArray(List<Map<String, Object>> jsonList, String[] titleArray, String[] keyArray){
        int colCount = titleArray.length;
        int rowCount = jsonList.size()+1;
        String[][] resStringArray = new String[rowCount][colCount];
        //标题
        for (int i = 0; i < titleArray.length; i++) {
            resStringArray[0][i] = titleArray[i];
        }
        //内容
        int k =1;
        for (Map<String, Object> stringObjectMap : jsonList) {
            for (int i = 0; i < keyArray.length; i++) {
                resStringArray[k][i]=stringObjectMap.get(keyArray[i]).toString();
            }
            k++;
        }
        return  resStringArray;
    }
}

12、编译、部署、运行

点击“测试服务器响应”:

点击“提交”:

点击“下载excel”:


打开excel:


最后的最后,上面的代码在这里 点我下载,不要你的积分噢!!!
如果有什么问题,可以私信我!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值