zoukankan      html  css  js  c++  java
  • springmvc 导出excel

    1.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/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.kawa</groupId>
      <artifactId>poiDemo</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>war</packaging>
      <dependencies>
                <!-- Apache工具组件 -->
                <dependency>
                    <groupId>org.apache.commons</groupId>
                    <artifactId>commons-lang3</artifactId>
                    <version>3.3.2</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.commons</groupId>
                    <artifactId>commons-io</artifactId>
                    <version>1.3.2</version>
                </dependency>
                <dependency>
                    <groupId>commons-net</groupId>
                    <artifactId>commons-net</artifactId>
                    <version>3.3</version>
                </dependency>
                <!-- Jackson Json处理工具包 -->
                <dependency>
                    <groupId>com.fasterxml.jackson.core</groupId>
                    <artifactId>jackson-databind</artifactId>
                    <version>2.4.2</version>
                </dependency>
                <!-- Spring -->
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-context</artifactId>
                    <version>4.1.3.RELEASE</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-beans</artifactId>
                    <version>4.1.3.RELEASE</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-webmvc</artifactId>
                    <version>4.1.3.RELEASE</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-jdbc</artifactId>
                    <version>4.1.3.RELEASE</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-aspects</artifactId>
                    <version>4.1.3.RELEASE</version>
                </dependency>
                <!-- JSP相关 -->
                <dependency>
                    <groupId>jstl</groupId>
                    <artifactId>jstl</artifactId>
                    <version>1.2</version>
                </dependency>
                <dependency>
                    <groupId>javax.servlet</groupId>
                    <artifactId>servlet-api</artifactId>
                    <version>2.5</version>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>javax.servlet</groupId>
                    <artifactId>jsp-api</artifactId>
                    <version>2.0</version>
                    <scope>provided</scope>
                </dependency>
                <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
                <dependency>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                    <version>1.1</version>
                </dependency>
                <!-- https://mvnrepository.com/artifact/log4j/log4j -->
                <dependency>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                    <version>1.2.13</version>
                </dependency>
                          
              <!-- poi -->
             <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>3.7</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-examples</artifactId>
                <version>3.7</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-scratchpad</artifactId>
                <version>3.7</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>3.7</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml-schemas</artifactId>
                <version>3.7</version>
            </dependency>
    <!--         <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-excelant</artifactId>
                <version>3.7</version>
            </dependency> -->
                <!-- httpclient -->
                <dependency>
                    <groupId>org.apache.httpcomponents</groupId>
                    <artifactId>httpclient</artifactId>
                    <version>4.3.5</version>
                </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.7.12</version>
            </dependency>
            
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>log4j-over-slf4j</artifactId>
                <version>1.7.12</version>
            </dependency>
                <!-- 单元测试 -->
                <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>4.12</version>
                    <scope>test</scope>
                </dependency>                            
      </dependencies>
    </project>

    2.web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        id="taotao" version="2.5">
        <display-name>poiDemo</display-name>
        <welcome-file-list>
            <welcome-file>index.html</welcome-file>
            <welcome-file>index.htm</welcome-file>
            <welcome-file>index.jsp</welcome-file>
            <welcome-file>default.html</welcome-file>
            <welcome-file>default.htm</welcome-file>
            <welcome-file>default.jsp</welcome-file>
        </welcome-file-list>
        <!-- 加载spring容器 -->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring/applicationContext-*.xml</param-value>
        </context-param>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <!-- 解决post乱码 -->
        <filter>
            <filter-name>CharacterEncodingFilter</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>
        </filter>
        <filter-mapping>
            <filter-name>CharacterEncodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        <!-- springmvc的前端控制器 -->
        <servlet>
            <servlet-name>poiDemo</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <!-- contextConfigLocation不是必须的, 如果不配置contextConfigLocation, springmvc的配置文件默认在:WEB-INF/servlet的name+"-servlet.xml" -->
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:spring/springmvc.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>poiDemo</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    
    </web-app>

    3.spring和springmc的配置

    3.1 applicationContext-service.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:p="http://www.springframework.org/schema/p"
        xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"
        >
    
        <!-- 加载配置文件 -->
        <context:property-placeholder location="classpath:resource/*.properties" />
        <!-- 扫描包加载Service实现类 -->
        <context:component-scan base-package="com.kawa.poi.service"></context:component-scan>
    </beans>

    3.2 springmvc

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
        <context:component-scan base-package="com.kawa.poi.controller" />
        <mvc:annotation-driven />
        <bean
            class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/jsp/" />
            <property name="suffix" value=".jsp" />
        </bean>
        <!-- 在web.xml中springmcv的前段控制器设置的是拦截所有路径包括静态文件
                次配置是让其不拦截静态资源-->
        <mvc:resources location="/" mapping="/**"/>    
    </beans>

    4 java代码部分,此demo还涉及到跨域请其他工程接口使用httpclient跨域请求

    4.1 相关的properties文件

    4.1.1 resource.properties配置跨域请求url

    #获取event列表的url
    query_eventList=http://127.0.0.1:8089/simulator/portal/device/v0.0.1/event

    4.1.2 excel.properties excel相关的配置

    #excel标题
    excel_title=POIDEMO
    #excle列名(定义数组)
    excel_columnNames=eventId,eventName,eventType,ruleType,status,createTime,lastModifyTime,description,eventInfo,ruleInfo,onClick
    #

     4.2 excel工具类

    package com.kawa.poi.util;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.CellStyle;
    import org.apache.poi.ss.usermodel.Font;
    import org.apache.poi.ss.usermodel.IndexedColors;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    /**
     * 导出Excel文档工具类
     * */
    public class ExcelUtil {
    
        /**
         * 创建excel文档,
         * list 数据
         * @param keys list中map的key数组集合
         * @param columnNames excel的列名
         * */
        public static Workbook createWorkBook(List<Map<String, Object>> list,String []keys,String columnNames[]) {
            // 创建excel工作簿
            Workbook wb = new HSSFWorkbook();
            // 创建第一个sheet(页),并命名
            Sheet sheet = wb.createSheet(list.get(0).get("sheetName").toString());
            // 手动设置列宽。第一个参数表示要为第几列设;,第二个参数表示列的宽度,n为列高的像素数。
            for(int i=0;i<keys.length;i++){
                sheet.setColumnWidth((short) i, (short) (35.7 * 150));
            }
    
            // 创建第一行
            Row row = sheet.createRow((short) 0);
    
            // 创建两种单元格格式
            CellStyle cs = wb.createCellStyle();
            CellStyle cs2 = wb.createCellStyle();
    
            // 创建两种字体
            Font f = wb.createFont();
            Font f2 = wb.createFont();
    
            // 创建第一种字体样式(用于列名)
            f.setFontHeightInPoints((short) 10);
            f.setColor(IndexedColors.BLACK.getIndex());
            f.setBoldweight(Font.BOLDWEIGHT_BOLD);
    
            // 创建第二种字体样式(用于值)
            f2.setFontHeightInPoints((short) 10);
            f2.setColor(IndexedColors.BLACK.getIndex());
    
    //        Font f3=wb.createFont();
    //        f3.setFontHeightInPoints((short) 10);
    //        f3.setColor(IndexedColors.RED.getIndex());
    
            // 设置第一种单元格的样式(用于列名)
            cs.setFont(f);
            cs.setBorderLeft(CellStyle.BORDER_THIN);
            cs.setBorderRight(CellStyle.BORDER_THIN);
            cs.setBorderTop(CellStyle.BORDER_THIN);
            cs.setBorderBottom(CellStyle.BORDER_THIN);
            cs.setAlignment(CellStyle.ALIGN_CENTER);
    
            // 设置第二种单元格的样式(用于值)
            cs2.setFont(f2);
            cs2.setBorderLeft(CellStyle.BORDER_THIN);
            cs2.setBorderRight(CellStyle.BORDER_THIN);
            cs2.setBorderTop(CellStyle.BORDER_THIN);
            cs2.setBorderBottom(CellStyle.BORDER_THIN);
            cs2.setAlignment(CellStyle.ALIGN_CENTER);
            //设置列名
            for(int i=0;i<columnNames.length;i++){
                Cell cell = row.createCell(i);
                cell.setCellValue(columnNames[i]);
                cell.setCellStyle(cs);
            }
            //设置每行每列的值
            for (short i = 1; i < list.size(); i++) {
                // Row 行,Cell 方格 , Row 和 Cell 都是从0开始计数的
                // 创建一行,在页sheet上
                Row row1 = sheet.createRow((short) i);
                // 在row行上创建一个方格
                for(short j=0;j<keys.length;j++){
                    Cell cell = row1.createCell(j);
                    cell.setCellValue(list.get(i).get(keys[j]) == null?" ": list.get(i).get(keys[j]).toString());
                    cell.setCellStyle(cs2);
                }
            }
            return wb;
        }
    
    }

    4.3 httpclient工具类

    package com.kawa.poi.util;
    
    import java.io.IOException;
    import java.net.URI;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.http.NameValuePair;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.client.utils.URIBuilder;
    import org.apache.http.entity.ContentType;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.util.EntityUtils;
    
    import com.fasterxml.jackson.databind.JsonNode;
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    public class HttpClientUtil {
        
        
        
        //定义jackson对象
        private static final ObjectMapper MAPPER = new ObjectMapper();
    
        public static String doGet(String url, Map<String, String> param) {
    
            // 创建Httpclient对象
            CloseableHttpClient httpclient = HttpClients.createDefault();
    
            String resultString = "";
            CloseableHttpResponse response = null;
            try {
                // 创建uri
                URIBuilder builder = new URIBuilder(url);
                if (param != null) {
                    for (String key : param.keySet()) {
                        builder.addParameter(key, param.get(key));
                    }
                }
                URI uri = builder.build();
    
                // 创建http GET请求
                HttpGet httpGet = new HttpGet(uri);
    
                // 执行请求
                response = httpclient.execute(httpGet);
                // 判断返回状态是否为200
                if (response.getStatusLine().getStatusCode() == 200) {
                    resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (response != null) {
                        response.close();
                    }
                    httpclient.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return resultString;
        }
    
        public static String doGet(String url) {
            return doGet(url, null);
        }
    
        public static String doPost(String url, Map<String, String> param) {
            // 创建Httpclient对象
            CloseableHttpClient httpClient = HttpClients.createDefault();
            CloseableHttpResponse response = null;
            String resultString = "";
            try {
                // 创建Http Post请求
                HttpPost httpPost = new HttpPost(url);
                // 创建参数列表
                if (param != null) {
                    List<NameValuePair> paramList = new ArrayList<NameValuePair>();
                    for (String key : param.keySet()) {
                        paramList.add(new BasicNameValuePair(key, param.get(key)));
                    }
                    // 模拟表单
                    UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList);
                    httpPost.setEntity(entity);
                }
                // 执行http请求
                response = httpClient.execute(httpPost);
                resultString = EntityUtils.toString(response.getEntity(), "utf-8");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    response.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
    
            return resultString;
        }
    
        public static String doPost(String url) {
            return doPost(url, null);
        }
        
        public static String doPostJson(String url, String json) {
            // 创建Httpclient对象
            CloseableHttpClient httpClient = HttpClients.createDefault();
            CloseableHttpResponse response = null;
            String resultString = "";
            try {
                // 创建Http Post请求
                HttpPost httpPost = new HttpPost(url);
                // 创建请求内容
                StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
                httpPost.setEntity(entity);
                // 执行http请求
                response = httpClient.execute(httpPost);
                resultString = EntityUtils.toString(response.getEntity(), "utf-8");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    response.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
    
            return resultString;
        }
        //带requestHeader参数的请求
        public static String doGetWithHeaders(String url,Map<String, String> headers) {
            //创建httpcleant对象
            CloseableHttpClient httpClient = HttpClients.createDefault();
            CloseableHttpResponse response = null;
            String result = "";
            try {
                HttpGet htGet = new HttpGet(url);
                // 添加http headers
                if (headers != null && headers.size() > 0) {
                    for (String key : headers.keySet()) {
                        htGet.addHeader(key, headers.get(key));
                    }
                }
                // 读取数据
                response = httpClient.execute(htGet);
                result = EntityUtils.toString(response.getEntity(), "utf-8");
             
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
               try {
                response.close();
            } catch (Exception e2) {
                e2.printStackTrace();
            }
            }
            return result;
        }
        //json转list
        public static Object toList(String json, Class<?> clazz ){
            try {
                
                JsonNode jsonNode = MAPPER.readTree(json);
                JsonNode eventList =  jsonNode.get("eventList");
                Object obj = null;
                if(eventList.isArray() && eventList.size()>0){
                    obj = MAPPER.readValue(eventList.traverse(),
                            MAPPER.getTypeFactory().constructCollectionType(List.class, clazz));
                }
                return obj;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
        
    }

    4.4 EventGetResultDTO.java   将json转换为pojo的实体类,此实体类的属性只能比接口返回的json数据里面的字段多,但不能少

    package com.kawa.poi.pojo;
    
    
    
    public class EventGetResultDTO {
    
        private String eventId;    
        
        private String eventName;
    
        private String eventType;
    
        private String ruleType;
    
        private String status;   
        
        private String createTime;
      
        private String lastModifyTime;
        
        private String description;
    
        private String eventInfo;
    
        private String ruleInfo;
        
        private String onClick;
    
        
        public String getOnClick() {
            return onClick;
        }
    
        public void setOnClick(String onClick) {
            this.onClick = onClick;
        }
    
        public String getEventId() {
            return eventId;
        }
    
        public void setEventId(String eventId) {
            this.eventId = eventId;
        }
    
        public String getEventName() {
            return eventName;
        }
    
        public void setEventName(String eventName) {
            this.eventName = eventName;
        }
    
        public String getEventType() {
            return eventType;
        }
    
        public void setEventType(String eventType) {
            this.eventType = eventType;
        }
    
        public String getRuleType() {
            return ruleType;
        }
    
        public void setRuleType(String ruleType) {
            this.ruleType = ruleType;
        }
    
        public String getStatus() {
            return status;
        }
    
        public void setStatus(String status) {
            this.status = status;
        }
    
        public String getCreateTime() {
            return createTime;
        }
    
        public void setCreateTime(String createTime) {
            this.createTime = createTime;
        }
    
        public String getLastModifyTime() {
            return lastModifyTime;
        }
    
        public void setLastModifyTime(String lastModifyTime) {
            this.lastModifyTime = lastModifyTime;
        }
    
        public String getDescription() {
            return description;
        }
    
        public void setDescription(String description) {
            this.description = description;
        }
    
        public String getEventInfo() {
            return eventInfo;
        }
    
        public void setEventInfo(String eventInfo) {
            this.eventInfo = eventInfo;
        }
    
        public String getRuleInfo() {
            return ruleInfo;
        }
    
        public void setRuleInfo(String ruleInfo) {
            this.ruleInfo = ruleInfo;
        }
    
        public String toString() {
            StringBuilder strBuilder = new StringBuilder();
            strBuilder.append("eventId = ");
            strBuilder.append(eventId);
            strBuilder.append("eventName = ");
            strBuilder.append(eventName);
            strBuilder.append(", eventType = ");
            strBuilder.append(eventType);
            strBuilder.append(", ruleType = ");
            strBuilder.append(ruleType);
            strBuilder.append(", createTime = ");
            strBuilder.append(createTime);
            strBuilder.append(", lastModifyTime = ");
            strBuilder.append(lastModifyTime);
            strBuilder.append(", status = ");
            strBuilder.append(status);
            strBuilder.append(", eventInfo = ");
            strBuilder.append(eventInfo);
            strBuilder.append(", ruleInfo = ");
            strBuilder.append(ruleInfo);
            return strBuilder.toString();
        }
    }

    4.5 Service层

    ExcelService.java

    package com.kawa.poi.service;
    
    import java.io.IOException;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public interface ExcelService {
        
         public String download(HttpServletRequest request, HttpServletResponse response)throws IOException;
    }

    ExcelServiceImpl.java

    package com.kawa.poi.service.impl;
    
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Service;
    
    import com.kawa.poi.pojo.EventGetResultDTO;
    import com.kawa.poi.service.ExcelService;
    import com.kawa.poi.util.ExcelUtil;
    import com.kawa.poi.util.HttpClientUtil;
    @Service
    public class ExcelServiceImpl implements ExcelService{
        //Excel标题
        @Value(value="${excel_title}")
        private String excel_title;
        //excel列名
        @Value(value="${excel_columnNames}")
        private String[] excel_columnNames;
        //请求event信息的url
        @Value(value="${query_eventList}")
        private String query_eventList;
            
        public String download(HttpServletRequest request, HttpServletResponse response)throws IOException {
            
            Map<String, String> headers = new HashMap<String, String>();
            headers.put("app_key", "1111");
            //填充数据
            List<EventGetResultDTO> result=queryEventList(query_eventList, headers);
            List<Map<String,Object>> list=createExcelRecord(result);
          //  String columnNames[]={"eventId","eventName","eventType","ruleType","status","createTime","lastModifyTime","description","eventInfo","ruleInfo","onClick"};//列名
          //  String keys[]    = {"eventId","eventName","eventType","ruleType","status","createTime","lastModifyTime","description","eventInfo","ruleInfo","onClick"};//map中的key
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            try {
                ExcelUtil.createWorkBook(list,excel_columnNames,excel_columnNames).write(os);
            } catch (IOException e) {
                e.printStackTrace();
            }
            byte[] content = os.toByteArray();
            InputStream is = new ByteArrayInputStream(content);
            // 设置response参数,可以打开下载页面
            response.reset();
            response.setContentType("application/vnd.ms-excel;charset=utf-8");
            response.setHeader("Content-Disposition", "attachment;filename="+ new String((excel_title + ".xls").getBytes(), "iso-8859-1"));
            ServletOutputStream out = response.getOutputStream();
            BufferedInputStream bis = null;
            BufferedOutputStream bos = null;
            try {
                bis = new BufferedInputStream(is);
                bos = new BufferedOutputStream(out);
                byte[] buff = new byte[2048];
                int bytesRead;
                // Simple read/write loop.
                while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
                    bos.write(buff, 0, bytesRead);
                }
            } catch (final IOException e) {
                throw e;
            } finally {
                if (bis != null)
                    bis.close();
                if (bos != null)
                    bos.close();
            }
            return null;
        }
        
        private List<EventGetResultDTO> queryEventList(String url,Map<String, String> headers) {
         String doGetWithHeaders = HttpClientUtil.doGetWithHeaders(url, headers);
         List<EventGetResultDTO> list = (List<EventGetResultDTO>) HttpClientUtil.toList(doGetWithHeaders, EventGetResultDTO.class);
         return list;
        }
        
        private List<Map<String, Object>> createExcelRecord(List<EventGetResultDTO> eventGetResults) {
            List<Map<String, Object>> listmap = new ArrayList<Map<String, Object>>();
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("sheetName", "sheet1");
            listmap.add(map);
            EventGetResultDTO eventGetResultDTO=null;
            for (int j = 0; j < eventGetResults.size(); j++) {
                eventGetResultDTO=eventGetResults.get(j);
                Map<String, Object> mapValue = new HashMap<String, Object>();
                //{"eventId","eventName","eventType","ruleType","status","createTime","lastModifyTime","description","eventInfo","ruleInfo","onClick"}
                mapValue.put("eventId", eventGetResultDTO.getEventId());
                mapValue.put("eventName",eventGetResultDTO.getEventName());
                mapValue.put("eventType", eventGetResultDTO.getEventType());
                mapValue.put("status", eventGetResultDTO.getStatus());
                mapValue.put("createTime",eventGetResultDTO.getCreateTime());
                mapValue.put("lastModifyTime", eventGetResultDTO.getLastModifyTime());
                mapValue.put("description", eventGetResultDTO.getDescription());
                mapValue.put("eventInfo", eventGetResultDTO.getEventInfo());
                mapValue.put("ruleInfo", eventGetResultDTO.getRuleInfo()); 
                mapValue.put("onClick", eventGetResultDTO.getOnClick());              
                listmap.add(mapValue);
            }
            return listmap;
        }    
    
    }

    4.6 Controller层

    package com.kawa.poi.controller;
    
    
    import java.io.IOException;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    import com.kawa.poi.service.ExcelService;
    
    
    @Controller
    public class DownloadAct {
        @Autowired
        private ExcelService excelService;
        
        @RequestMapping(value="/kawa",method=RequestMethod.GET)
        public String download(HttpServletRequest request, HttpServletResponse response) throws IOException{
            excelService.download(request, response);
            return null;
        }
    }
  • 相关阅读:
    https://scrapingclub.com/exercise/detail_sign/
    https://scrapingclub.com/exercise/basic_captcha/
    https://scrapingclub.com/exercise/basic_login/
    344. 反转字符串(简单)
    142. 环形链表 II(中等)
    面试题02.07.链表相交
    19. 删除链表的倒数第 N 个结点
    24.两两交换链表中的节点
    206.反转链表(简单)
    707.设计链表
  • 原文地址:https://www.cnblogs.com/hlkawa/p/6096011.html
Copyright © 2011-2022 走看看