副标题#e#
在这节里,我们对welcome.JSP页面举办改革,在页面中添加一个链接,这个链接挪用Servlet下载上节所记录的系统日志文件。
通过领导建设ExcelFileServlet
1、File->New…->Web->双击Standard Servlet图标,启动建设尺度Servlet的领导。
指定Servlet类名为ExcelFileServlet,将包名设为bookstore.servlet,按Next到下一步。
2、选择包围doGet()处理惩罚要领。
图 11 包围Servlet要领
·Servlet:creates content type:unspecified,设定Servlet的生成文档的范例,由于这个Servlet作为一个Excel文件并以附件的形式下载,需要我们手工设定Servlet的响应内容范例。
·implements methods:doGet(),这样领导将生成一个doGet()要领框架。
按Next到下一步。
3、界说Servlet的URL参数。
图 12 界说Servlet的URL参数
点击Add Parameter在参数列表呈现一个新行,在新行中界说Servlet的URL参数,个中Name为URL所带的参数名,而Variable为Servlet中对应的变量名,另外还可以通过Desc和Default为变量指定注释和默认值,在Type栏中指定变量的范例。
我们界说了两个URL参数,别离是year和month,指定需要下载日志的年份和月份。按Next到下一步。
#p#副标题#e#
4.指定servlet的会见路径
接管第4步领导所设定的Servlet的名字和会见路径,它们别离是:
·Name:excelfileservlet
·URL pattern:/excelfileservlet
直接按Finish建设ExcelFileServlet,其代码如下所示:
代码清单 8 ExcelFileServlet.Java
1. package bookstore.servlet;
2. import javax.servlet.*;
3. import javax.servlet.http.*;
4. import java.io.*;
5. import java.util.*;
6.
7. public class ExcelFileServlet
8. extends HttpServlet
9. {
10. //Initialize global variables
11. public void init()
12. throws ServletException
13. {
14. }
15.
16. //Process the HTTP Get request
17. public void doGet(HttpServletRequest request, HttpServletResponse response)
18. throws ServletException, IOException
19. {
20. //年份
21. String year = request.getParameter("year");
22. if (year == null)
23. {
24. year = "2005";
25. }
26.
27. //月份
28. String month = request.getParameter("month");
29. if (month == null)
30. {
31. month = "1";
32. }
33. PrintWriter out = response.getWriter();
34. //@todo implement GET
35. }
36.
37. //Clean up resources
38. public void destroy()
39. {
40. }
41. }
第17~35行的doGet()要领是ExcelFileServlet的主体部门,个中第20~32是获取URL参数的代码。
在web.XML中将生成对应这个Servlet的陈设描写信息,如下所示:
代码清单 9 ExcelFileServlet的陈设描写设置信息
1. <web-app>
2. …
3. <servlet>
4. <servlet-name>excelfileservlet</servlet-name>
5. <servlet-class>bookstore.servlet.ExcelFileServlet</servlet-class>
6. </servlet>
7. <servlet-mapping>
8. <servlet-name>excelfileservlet</servlet-name>
9. <url-pattern>/excelfileservlet</url-pattern>
10. </servlet-mapping>
11. …
12. </web-app>
下载日志文件代码
在这一小节里,我们需要变动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. }
#p#分页标题#e#
第32行通过URL参数的值获得日志文件名,34~36行指定响应头信息,以便客户端以弹出对话框的形式下载日志文件,38~49行将日志文件的内容写到响应输出流中。
改革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页面,页面结果如下所示:
图 13 附件下载日志链接的welcome.jsp页面
点击下载系统日志后,将弹出一个文件下载的对话框,如下图所示:
图 14 下载系统日志文件对话框
点击生存按钮,即可以将日志文件从Web应用处事器下载到当地的硬盘中。