国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

JBuilder2005 Servlet開發之下載型

2024-07-21 02:15:18
字體:
來源:轉載
供稿:網友

  在這節里,我們對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. <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應用服務器下載到本地的硬盤中。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 眉山市| 喀喇| 西平县| 盐边县| 漯河市| 五原县| 信宜市| 平顶山市| 吕梁市| 胶南市| 武平县| 皮山县| 鄂尔多斯市| 德江县| 监利县| 岳普湖县| 绩溪县| 望江县| 洪江市| 化州市| 龙海市| 镇赉县| 璧山县| 重庆市| 罗甸县| 伊宁县| 英山县| 错那县| 榆社县| 和静县| 新乡市| 东城区| 蕉岭县| 阳高县| 大姚县| 姚安县| 利津县| 海安县| 阿拉善盟| 维西| 广东省|