网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.JAVA操作数据库方式与设计模式应.
.struts构建文件上传(1).
.Java对象的强、软、弱和虚引用.
.Web应用中Java的速度真相探讨.
.使用Maps.
.Spring JDBC抽象框架简化Web数据.
.普通字符.
.Java WS和C#调用.
.java语音实现技术TTS资料.
.Web 服务代理组件创建 JSF Web 服.
.Java Servlet规范2.3中的过滤器访.
.Hibernate 3新增XML关系持久性介.
.Notifier类实现Event/Listener更.
.如何在J2EE平台上实施应用性能的.
.Java嵌入式开发之j2me--四.
.如何使用Java编写NT服务(二).
.[JAVA100例]009、异常的捕获和实.
.Java Web Start开发指南(一).
.使用布局管理器呈现生动的JAVA程.
.Sun称Java企业系统支持Windows和.

Java Servlet 编程及应用之六

发表日期:2008-1-5



  Servlet 链提供了Servlet 应用的一种非凡功能。与UNIX 和DOS 命令中的管道类似,可以将多个Servlet 以特定顺序链接起来。在Servlet 链中,一个Servlet 的输出被当作下一个Servlet 的输入,而链中最后一个Servlet 的输出被返回到浏览器。

  编程思路:首先编写一个表过滤器Servlet,它的作用主要是按照一定的表格格式输出,在通过Servlet 表过滤器(TableFilter.Java)后,无格式化的Servlet(ghq.java)所有的行将会被格式化成Html表格。

  表过滤器 TableFilter.java 的源代码如下:(代码节选)



import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class TableFilter extends HttpServlet
{
 public void service(HttpServletRequest req, HttpServletResponse resp)
 throws ServletException, java.io.IOException
 {
  // Get all headers set by the previous servlet and echo them
  java.util.Enumeration e = req.getHeaderNames();
  while (e.hasMoreElements()) {
   String header = (String)e.nextElement();
   String value = req.getHeader(header);
   resp.setHeader(header, value);
  }
  // Get the input and output streams
  ServletInputStream in = req.getInputStream();
  ServletOutputStream out = resp.getOutputStream();
  // Only process if this is a recognized MIME type
  String type = req.getContentType();
  if (type.equals("text/html") type.equals("text/table")
type.equals("application/x-www-form-urlencoded")) {
   resp.setContentType("text/html");
   // Create a buffered reader that we can use to read
   // a single line at a time
   BufferedReader br = new BufferedReader(new InputStreamReader(in));

   boolean inTable = false;
   int tableCols = 0;
   boolean headerRow = false;

   // Read until no more data exists

   while (true) {
    String s = br.readLine();

    // null indicates end of file

    if (s == null) {
     break;
    }

   // If we are in the middle of a table command, process
   // the line

   if (inTable) {

    // Search for the end of the table
    if (s.startsWith("<!--end table")) {
     out.println("</table></center>");
     inTable = false;
    }
    else {
     // We've got a row of a table - format it
     s = formatRow(s, tableCols, headerRow);
     headerRow = false;
    }
   }
   else {
 
    // Search for the start of a table
    if (s.startsWith("<!--table")) {
     int pos = s.indexOf("columns=");
     tableCols = 0;
     if (pos >= 0) {

      // Get the number of columns

      String cols = s.substring(pos + 8);
      int endPos = cols.indexOf(" ");
      if (endPos > 0) {
       cols = cols.substring(0, endPos);
      }
     tableCols = Integer.parseInt(cols);
    }

   .........
   .........
  这个表过滤器servlet 分析另一个servlet 的输出,查找含有非凡格式指令的HTML 注释,这些指令包括表有多少列、是否显示表头等等。在该表格格式指令之后的所有行将会被格式化成一个HTML 表格。这样链中的前一个servlet 只要简单地将数据用逗号分隔,数据就可以一行一行地直接输出了,而无须修改这些数据格式化HTML 表格。

  没有格式化输出的HTML 表格ghq.java 的源代码如下:


上一篇:J2SE 1.5新特性简介 人气:617
下一篇:为J2ME开发移动3D游戏之立即模式 人气:547
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐