1. 程式人生 > >日常記錄(二)SpringMVC匯出Excel

日常記錄(二)SpringMVC匯出Excel

前言

相信很多朋友在實際工作中都會要將資料匯出成Excel的需求,通常這樣的做法有兩種。
一是採用JXL來生成Excel,之後儲存到伺服器,然後在生成頁面之後下載該檔案。
二是使用POI來生成Excel,之後使用Stream的方式輸出到前臺直接下載(ps:當然也可以生成到伺服器中再下載。)。這裡我們討論第二種。
至於兩種方式的優缺點請自行百度

Struts2的方式

通常我會將已經生成好的HSSFWorkbook放到一個InputStream中,然後再到xml配置檔案中將返回結果更改為stream的方式。如下:

private void responseData
(HSSFWorkbook wb) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); wb.write(baos); baos.flush(); byte[] aa = baos.toByteArray(); excelStream = new ByteArrayInputStream(aa, 0, aa.length); baos.close(); }

配置檔案:

<action name="exportXxx" class="xxxAction"
method="exportXxx"> <result name="exportSuccess" type="stream"> <param name="inputName">excelStream</param> <param name="contentType">application/vnd.ms-excel</param> <param name="contentDisposition">attachment;filename="Undefined.xls"
</param> </result> </action>

這樣即可達到點選連結即可直接下載檔案的目的。

SpringMVC的方式

先貼程式碼:

@RequestMapping("/exportXxx.action")
public void exportXxx(HttpServletRequest request, HttpServletResponse response,
        @RequestParam(value="scheduleId", defaultValue="0")int scheduleId){
    HSSFWorkbook wb = createExcel(scheduleId) ;
    try {
        response.setHeader("Content-Disposition", "attachment; filename=appointmentUser.xls");
        response.setContentType("application/vnd.ms-excel; charset=utf-8") ;
        OutputStream out = response.getOutputStream() ;
        wb.write(out) ;
        out.flush();
        out.close();
    } catch (IOException e) {
        e.printStackTrace();
    } 
}

其實springMVC和Struts2的原理上是一樣的,只是Struts2是才去配置檔案的方式。首先是使用createExcel()這個方法來生成Excel並返回,最後利用rresponse即可向前臺輸出Excel,這種方法是通用的,也可以試用與Servlet、Struts2等。我們只需要在response的頭資訊中設定相應的輸出資訊即可。

總結

不管是使用Struts2,還是使用SpringMVC究其根本都是使用的response,所以只要我們把response理解透了不管是下載圖片、world、Excel還是其他什麼檔案都是一樣的。

前言

相信很多朋友在實際工作中都會要將資料匯出成Excel的需求,通常這樣的做法有兩種。
一是採用JXL來生成Excel,之後儲存到伺服器,然後在生成頁面之後下載該檔案。
二是使用POI來生成Excel,之後使用Stream的方式輸出到前臺直接下載(ps:當然也可以生成到伺服器中再下載。)。這裡我們討論第二種。
至於兩種方式的優缺點請自行百度

Struts2的方式

通常我會將已經生成好的HSSFWorkbook放到一個InputStream中,然後再到xml配置檔案中將返回結果更改為stream的方式。如下:

private void responseData(HSSFWorkbook wb) throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    wb.write(baos);
    baos.flush();
    byte[] aa = baos.toByteArray();
    excelStream = new ByteArrayInputStream(aa, 0, aa.length);
    baos.close();
}

配置檔案:

<action name="exportXxx" class="xxxAction" method="exportXxx">
    <result name="exportSuccess" type="stream">
        <param name="inputName">excelStream</param>
        <param name="contentType">application/vnd.ms-excel</param>
        <param name="contentDisposition">attachment;filename="Undefined.xls"</param>
    </result>
</action>

這樣即可達到點選連結即可直接下載檔案的目的。

SpringMVC的方式

先貼程式碼:

@RequestMapping("/exportXxx.action")
public void exportXxx(HttpServletRequest request, HttpServletResponse response,
        @RequestParam(value="scheduleId", defaultValue="0")int scheduleId){
    HSSFWorkbook wb = createExcel(scheduleId) ;
    try {
        response.setHeader("Content-Disposition", "attachment; filename=appointmentUser.xls");
        response.setContentType("application/vnd.ms-excel; charset=utf-8") ;
        OutputStream out = response.getOutputStream() ;
        wb.write(out) ;
        out.flush();
        out.close();
    } catch (IOException e) {
        e.printStackTrace();
    } 
}

其實springMVC和Struts2的原理上是一樣的,只是Struts2是才去配置檔案的方式。首先是使用createExcel()這個方法來生成Excel並返回,最後利用rresponse即可向前臺輸出Excel,這種方法是通用的,也可以試用與Servlet、Struts2等。我們只需要在response的頭資訊中設定相應的輸出資訊即可。

總結

不管是使用Struts2,還是使用SpringMVC究其根本都是使用的response,所以只要我們把response理解透了不管是下載圖片、world、Excel還是其他什麼檔案都是一樣的。

相關推薦

日常記錄SpringMVC匯出Excel

前言 相信很多朋友在實際工作中都會要將資料匯出成Excel的需求,通常這樣的做法有兩種。 一是採用JXL來生成Excel,之後儲存到伺服器,然後在生成頁面之後下載該檔案。 二是使用POI來生成Excel,之後使用Stream的方式輸出

shiro+mybatis+springmvc例項記錄——shiro支援ajax請求

接上文,頁面跳轉顯然不適合動靜分離ajax互動的架構模式,因此就需要對框架進行改造優化,使得後臺能夠返回json資料給前端請求。 自定義攔截器 shiro對許可權、使用者資訊的校驗實在預設的攔截器中進行的,要改寫資料返回方式,則需要重寫攔截器。這裡我們分

FCC學習記錄—— Responsive Design with Bootsstrap

響應式 sheet 工作 apc resp style ima 通過 大小 1.Bootstrap的基本了解:     Bootstrap,來自 Twitter,是目前最受歡迎的前端框架。Bootstrap 是基於 HTML、CSS、JAVASCRIPT 的,它簡潔靈活,使

Linux命令學習記錄

配置 相關 分享圖片 ati 記錄 str gem 技術分享 padding Linux中一切都是文件;目錄說明:bin:binary的縮寫,表示“二進制文件”,包含所有用戶使用的執行程序boot:“啟動”,包含與Linux啟動密切相關的文件dev:device,“設備”包

Ansible 學習記錄 基礎介紹

產品 本機 代碼 路由器 軟件 機器數 任務 提供服務 比較 Ansible的優點:   Agentless (去中心化)   Stupied Simple   SSH by default   YAML no code Ansible 使用場

個人開發—進度記錄

完成 設計 網頁 class 缺少 自己 整體 log 頁面 時間:2018/2/7 計劃:首頁的頂部標題部分,登錄,註冊,訂單,客服,定位,頁面跳轉 進行:手繪網頁整體布局與概括設計要點 完成:搜索素材 問題:概括設計要點時沒有清晰的思路,主要原因是具體的問題處理經驗不足

微信jssdk圖片、語音開發記錄

後臺 pid for item esc 音頻 locals 動態 clas 接著上篇說的,在使用jssdk之前,需要先驗簽,也就是獲取簽名,而獲取簽名就需要幾個參數,時間戳,隨機數,token等,而token一天的獲取次數是有限的, 所以需要在項目中保存獲取到的token,

echarts使用記錄翻頁,事件

bsp 均可 官方文檔 sel ima dsc n) amp 但是 1、有時候legend比較多的時候,需要做翻頁比較好,有個屬性legend的type屬性設置為scroll,然後animation可以控制動畫,官方文檔均可查。   再就是scrollDataIndex,就

SpringMVC之執行的過程

服務器 上傳 執行過程 gin 開始 throw pack 獲取 type (DispatcherServlet在Spring當中充當一個前端控制器的角色,它的核心功能是分發請求。請求會被分發給對應處理的Java類,Spring MVC中稱為Handle。) ① 用戶

Solidity合約記錄——如何開始書寫合約

block 其他 不難 開發流程 字符串拼接 比較 編程 顯示 name 以往的老規矩是寫代碼即來Hello World,事實上Solidity實現這個功能並不難。見如下代碼: 1 pragma solidity ^0.4.11; 2 3 contract He

SpringMVC核心控制器

mapping csdn 技術 獲取 exce 而且 prop https multipart 一、如何配置 Spring MVC 的核心控制器? DispatcherServlet是前端控制器設計模式的實現,提供Spring Web MVC的集中訪問點,主要負責職責的分派

LeetCode刷題記錄

LeetCode刷題記錄(二) 繼續陣列和字串卡片的題目,這一篇主要介紹一道二維陣列相關的題目。 1、對角線遍歷 題目: 我的思路: 這一題我的思路比較複雜,我先觀察幾種型別的二維陣列 1、 M=N型別的二維陣列,例如: [1, 2, 3]

Centos6.10下Open-falcon學習記錄——Mysql監控

記錄了學習過程,官方文件地址http://book.open-falcon.org/zh_0_2/usage/getting-started.html 另外還看了Open-falcon作者的寫的設計理念的文,見open-falcon編寫的整個腦洞歷程 1 Mysql監控 通過mymon(

redis入門學習記錄 redis入門學習記錄

繼第一節 redis入門學習記錄(一)之後,我們來學習redis的基本使用。 接下來我們看看/usr/local/redis/bin目錄下的幾個檔案作用是什麼?   redis-benchmark:redis效能測試工具   redis-check-aof:檢查aof日誌的工具   redi

C# 操作Excel公式——批量刪除Excel公式並保留文字值

在Excel表格中,公式很常用,在處理資料時給我們提供了極大的方便。我們可以通過建立公式來批量處理資料,同理,我們也可以通過批量刪除公式來保護資料來源或方便於我們對資料的二次操作。下面的方法將介紹如何通過C#程式設計來批量刪除Excel公式並保留值。   所需工具:Spire.XLS for .

圖解HTTP學習記錄

第2章 簡單的HTTP協議 HTTP協議規定,先從客戶端開始建立通訊,服務端在沒有接收到請求之前不會發送響應。 請求報文由請求方法、請求URI、協議版本、可選的請求首部欄位和內容實體構成的。 響應報文基本上由協議版本、狀態碼、用以解釋狀態碼的原因短語、可選的響應首部欄位

不平等博弈問題學習記錄

在上一篇文章中,定義了{l|r}這個運算 但是,還有很多的特殊情況沒有考慮過,就比如說,在{L|R}的運算中,L或R為空集怎麼辦,那麼這個這個空集就可以用 Φ Φ \Phi表示,不過一般可以用不寫任何東西來表

微信小遊戲踩坑記錄

微信視訊元件 這次是關於視訊元件的,creator的視訊元件在小遊戲中是沒有用的,只能使用小遊戲自帶的元件。使用小遊戲Video的時候需要注意三點: 座標系的區別:微信使用的是UI座標系,以左上角為(0,0)點,x軸向右,y軸向下。而cocos的世界座標以左下角為(0,0)點,x軸向

SpringMVCSpringMVC+MyBatis+Thymeleaf例項

SpringMVC例項 本文采用的環境是Spring Boot2+MyBatis+thymeleaf 資料庫建表 CREATE TABLE `t_person` ( `id` int(12) NOT NULL AUTO_INCREMENT, `person_name`

Spark學習記錄Spark叢集搭建

Hadoop  Spark叢集搭建,以及IDEA遠端除錯 環境:Hadoop-2.7.2  jdk-1.8   scala-2-11-12  spark-2.1.0 spark2.0.0開始,只支援Java8版本了,