需求來源數據庫
一個數據管理系統,頁面以Extjs實現,一張有數據的表,表的每行最後一列有按鈕,點擊按鈕能夠根據對應的數據生成一個報表供客戶端下載。數據庫中有一張表記錄了全部已經生成的報表的信息邏輯是這樣的:服務器
-
- 點擊按鈕,向controller層發送請求
- controller經過Service去數據庫查詢,若是該報表存在,則直接返回下載,若是不存在,則先生成報表,而後將報表上傳到服務器並提供下載
因爲入坑不久,分紅幾個小試驗來作吧 ide
首先,實如今服務端生成文件並保存至指定的文件路徑下:url
1 @WebServlet(urlPatterns = "/generate") 2 public class getDownTest extends HttpServlet { 3 @Override 4 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 5 doPost(req, resp); 6 } 7 8 @Override 9 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 10 String savePath = req.getServletContext().getRealPath("/upload"); 11 System.out.println("獲取到的文件上傳的路徑爲:"+savePath); 12 13 File fileDir = new File(savePath); 14 //判斷上傳文件的保存目錄是否存在 15 if (!fileDir.exists() && !fileDir.isDirectory()){ 16 fileDir.createNewFile(); 17 System.out.println(savePath+"目錄不存在,須要建立"); 18 //建立牡蠣 19 fileDir.mkdir(); 20 } 21 22 //文件寫做時間 23 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 24 String fileWriteTime = dateFormat.format(new Date()); 25 String tmpFileName = savePath + "\\" + fileWriteTime +".txt"; 26 System.out.println("臨時文件名:==="+tmpFileName); 27 28 File file = new File(tmpFileName); 29 //判斷上傳文件的保存目錄是否存在 30 if (!file.exists()){ 31 file.createNewFile(); 32 System.out.println("臨時文件建立不成功"); 33 } 34 35 FileWriter fileWriter = new FileWriter(file,true); 36 37 //流的方式 38 BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); 39 bufferedWriter.write("文件寫入時間:\r\n"+fileWriteTime); 40 bufferedWriter.close(); 41 fileWriter.close(); 42 43 //返回文件 44 resp.addHeader("Content-Disposition","attachment;filename="+fileWriteTime+".txt"); 45 } 46 }
而後,而後實現asperReport自動生成報表spa