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

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

JBuilder2005 Servlet開發(fā)之下載型

2019-11-17 06:01:46
字體:
供稿:網(wǎng)友

在這節(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()處理方法。

JBuilder2005 Servlet開發(fā)之下載型
圖 11 覆蓋Servlet方法

·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ù)。

JBuilder2005 Servlet開發(fā)之下載型
圖 12 定義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.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參數(shù)的代碼。

   在web.xml中將生成對應(yīng)這個Servlet的部署描述信息,如下所示:

   代碼清單 9 ExcelFileServlet的部署描述配置信息

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>

  下載日志文件代碼

   在這一小節(jié)里,我們需要更改Servlet的doGet()方法,指定響應(yīng)的格式并從日志目錄中讀取相應(yīng)的日志文件內(nèi)容寫到Servlet的輸出流中。

   由于文件內(nèi)容以二進制流形式輸出,Servlet向?qū)г诖a清單 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參數(shù)的值得到日志文件名,34~36行指定響應(yīng)頭信息,以便客戶端以彈出對話框的形式下載日志文件,38~49行將日志文件的內(nèi)容寫到響應(yīng)輸出流中。

  改造welcome.jsp

   至此,下載日志文件的Servlet已經(jīng)開發(fā)完畢,現(xiàn)在,我們需要在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. 現(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.

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 泽普县| 尼木县| 花莲县| 即墨市| 工布江达县| 喀喇沁旗| 黄骅市| 织金县| 赤峰市| 伊金霍洛旗| 永嘉县| 宜黄县| 江都市| 梁河县| 怀来县| 万安县| 佛冈县| 合川市| 大余县| 新巴尔虎左旗| 华蓥市| 上栗县| 外汇| 望城县| 交口县| 浦江县| 榕江县| 普定县| 通海县| 巍山| 辉南县| 阿巴嘎旗| 垦利县| 镇赉县| 怀安县| 广东省| 萨迦县| 文成县| 柘城县| 仁布县| 中西区|