程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> JBuilder2005 Servlet開發之下載型

JBuilder2005 Servlet開發之下載型

編輯:JAVA編程入門知識

在這節裡,我們對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到下一步。

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. }

   第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.
  <a href="/webModule/excelfileservlet?year=2005&month=1">下載系統啟動日志</a>

  6.
  點擊<a href="quit.jsp">這裡</a>退出系統
  7.
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved