您现在的位置: 网页制作教程网 >> 网络编程 >> jsp 教程 >> JSP 实例教程 >> 文章正文

JSP编程进度条设计实例(1)

作者:AspCool

来源:www.ASPCool.com

热度:

2006-10-14 9:45:36

许多Web应用、企业应用涉及到长时间的操作,例如复杂的数据库查询或繁重的XML处理等,虽然这些任务主要由数据库系统或中间件完成,但任务执行的结果仍旧要借助JSP才能发送给用户。本文介绍了一种通过改进前端表现层来改善用户感觉、减轻服务器负载的办法。
  
    当JSP调用一个必须长时间运行的操作,且该操作的结果不能(在服务器端)缓冲,用户每次请求该页面时都必须长时间等待。很多时候,用户会失去耐心,接着尝试点击浏览器的刷新按钮,最终失望地离开。
  
    本文介绍的技术是把繁重的计算任务分离开来,由一个独立的线程运行,从而解决上述问题。当用户调用JSP页面时,JSP页面会立即返回,并提示用户任务已经启动且正在执行;JSP页面自动刷新自己,报告在独立线程中运行的繁重计算任务的当前进度,直至任务完成。
  
  一、模拟任务
  
    首先我们设计一个TaskBean类,它实现Java.lang.Runnable 接口,其run()方法在一个由JSP页面(start.jsp)启动的独立线程中运行。终止run()方法执行由另一个JSP页面stop.jsp负责。TaskBean类还实现了java.io.Serializable接口,这样JSP页面就可以将它作为JavaBean调用:
  
  package test.barBean;
  import java.io.Serializable;
  
  public class TaskBean implements Runnable, Serializable {
   private int counter;
   private int sum;
   private boolean started;
   private boolean running;
   private int sleep;
  
   public TaskBean() {
   counter = 0;
   sum = 0;
   started = false;
   running = false;
   sleep = 100;
   }
  }
  
    TaskBean包含的“繁重任务”是计算1+2+3…+100的值,不过它不通过100*(100+1)/2=5050公式计算,而是由 run()方法调用work()方法100次完成计算。work()方法的代码如下所示,其中调用Thread.sleep()是为了确保任务总耗时约 10秒。
  
  protected void work() {
   try {
   Thread.sleep(sleep);
   counter++;
   sum += counter;
   } catch (InterruptedException e) {
   setRunning(false);
   }
  }
  
    status.jsp页面通过调用下面的getPercent()方法获得任务的完成状况:
  
  public synchronized int getPercent() {
   return counter;
  }

我来说两句:

1分 2分 3分 4分 5分
姓名: *


* 请各位网友遵纪守法并注意语言文明。
网站简介 | 联系方式 | 意见建议 | 版权说明
Copyright © 2007 All rights reserved
滇ICP备06006992号