首页 > 开发 > 综合 > 正文

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应用服务器下载到本地的硬盘中。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表