在這節(jié)里,我們對welcome.jsp頁面進行改造,在頁面中添加一個鏈接,這個鏈接調(diào)用Servlet下載上節(jié)所記錄的系統(tǒng)日志文件。
通過向?qū)?chuàng)建ExcelFileServlet
1、File->New...->W(wǎng)eb->雙擊Standard Servlet圖標,啟動創(chuàng)建標準Servlet的向?qū)А?/P>
指定Servlet類名為ExcelFileServlet,將包名設(shè)為bookstore.servlet,按Next到下一步。
2、選擇覆蓋doGet()處理方法。

·Servlet:creates content type:unspecified,設(shè)定Servlet的生成文檔的類型,由于這個Servlet作為一個Excel文件并以附件的形式下載,需要我們手工設(shè)定Servlet的響應(yīng)內(nèi)容類型。
·implements methods:doGet(),這樣向?qū)⑸梢粋€doGet()方法框架。
按Next到下一步。
3、定義Servlet的URL參數(shù)。

點擊Add Parameter在參數(shù)列表出現(xiàn)一個新行,在新行中定義Servlet的URL參數(shù),其中Name為URL所帶的參數(shù)名,而Variable為Servlet中對應(yīng)的變量名,此外還可以通過Desc和Default為變量指定注釋和默認值,在Type欄中指定變量的類型。
我們定義了兩個URL參數(shù),分別是year和month,指定需要下載日志的年份和月份。按Next到下一步。
4.指定servlet的訪問路徑
接受第4步向?qū)O(shè)定的Servlet的名字和訪問路徑,它們分別是:
·Name:excelfileservlet
·URL pattern:/excelfileservlet
直接按Finish創(chuàng)建ExcelFileServlet,其代碼如下所示:
代碼清單 8 ExcelFileServlet.java1. 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. }1. <web-app>
2. …
3. ?。約ervlet>
4. ?。約ervlet-name>excelfileservlet</servlet-name>
5. ?。約ervlet-class>bookstore.servlet.ExcelFileServlet</servlet-class>
6. ?。?servlet>
7. ?。約ervlet-mapping>
8. <servlet-name>excelfileservlet</servlet-name>
9. <url-pattern>/excelfileservlet</url-pattern>
10. </servlet-mapping>
11. …
12. </web-app>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. }1. <%@page contentType="text/html; charset=GBK"%>
2. <%@taglib uri="http://jakarta.apache.org/taglibs/datetime-1.0" prefix="dt"%>
3. …
4. 現(xiàn)在的時間是<dt:format pattern="MM/dd/yyyy hh:mm"><dt:currentTime/></dt:format>
5.
<a href="/webModule/excelfileservlet?year=2005&month=1">下載系統(tǒng)啟動日志</a>
6.
點擊<a href="quit.jsp">這里</a>退出系統(tǒng)
7.
|
新聞熱點
疑難解答