选择显示字体大小

jbuilder2005 servlet开发之下载型

在这节里,我们对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.


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons