需求来源数据库
一个数据管理系统,页面以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