快速业务通道

JBuilder2005 Servlet开发之下载型 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-24
小节里,我们需要更改Servlet的doGet()方法,指定响应的格式并从日志目录中读取相应的日志文件内容写到Servlet的输出流中。

由于文件内容以二进制流形式输出,Servlet向导在代码清单 8第33行所生成代码:

PrintWriter out = response.getWriter();是多余的,我们将其删除。加入以下粗体的代码:

代码清单 10 下载日志文件代码

1. package bookstore.servlet; 2. import Javax.servlet.*; 3. import javax.servlet.http.*; 4. import java.io.*; 5. 6. public class ExcelFileServlet 7. extends HttpServlet 8. { 9.  … 10.  public void doGet(HttpServletRequest request, HttpServletResponse response) 11.  throws ServletException, IOException 12.  { 13.   //年份 14.   int year; 15.   try 16.   { 17.    year = Integer.parseInt(request.getParameter("year")); 18.   } catch (NumberFormatException e) 19.   { 20.    year = 2005; 21.   } 22. 23.   //月份 24.   int month; 25.   try 26.   { 27.    month = Integer.parseInt(request.getParameter("month")); 28.   } catch (NumberFormatException e) 29.   { 30.    month = 1; 31.   } 32.   String fileName = "log_" + year + "_" + month +".xls"; 33.   File file = new File("D:\\serverLog\\"+fileName); 34.   response.setContentType("application/x-msdownload"); 35.   response.setContentLength( (int) file.length()); 36.   response.setHeader("Content-Disposition", "attachment;filename="+fileName); 37. 38.   FileInputStream fis = new FileInputStream(file); 39.   BufferedInputStream fbis = new BufferedInputStream(fis); 40.   byte abyte0[] = new byte[1024]; 41.   int k = 0; 42.   OutputStream out = response.getOutputStream(); 43.   while ( (long) k < file.length()) 44.   { 45.    int j = fbis.read(abyte0, 0, 1024); 46.    k += j; 47.    out.write(abyte0, 0, j); 48.   } 49.   out.flush(); 50.  } 51.  … 52. }

第32行通过URL参数的值得到日志文件名,34~36行指定响应头信息,以便客户端以弹出对话框的形式下载日志文件,38~49行将日志文件的内容写到响应输出流中。

JBuilder2005 Servlet开发之下载型(4)

时间:2010-03-27 陈雄华

改造welcome.JSP

至此,下载日志文件的Servlet已经开发完毕,现在,我们需要在welcome.jsp页面中添加一个访问ExcelFileServlet的链接。

在welcome.jsp中添加以下粗体的代码,如下所示:

代码清单 11 添加下载日志链接后的welcome.jsp

1. <%@page contentType="text/html; charset=GBK"%> 2. <%@taglib uri="http://jakarta.apache.org/taglibs/datetime-1.0" prefix="dt"%> 3. … 4. 现在的时间是<dt:format pattern="MM/dd/yyyy hh:mm"><dt:currentTime/></dt:format> 5. <br><a href="/WebModule/excelfileservlet?year=2005&month=1">下载系统启动日志</a> 6. <br>点击<a href="quit.jsp">这里</a>退出系统 7. </body> 8. </html>

为了简单起见,年份和月份的URL参数使用固定的值,在实际应用场合,这两个数据可能来自于网页表单的数据组件。

启动Web应用程序,正确登录后,转到welcome.jsp页面,页面效果如下所示:

JBuilder2005 Servlet开发之下载型 - 编程入门网

图 13 附件下载日志链

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号