知识大全 JSP编程进度条设计实例

Posted

篇首语:宁可枝头抱香死,何曾吹落北风中。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 JSP编程进度条设计实例相关的知识,希望对你有一定的参考价值。

JSP编程进度条设计实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

    许多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调用

    packagetest barBean;

    importjava io Serializable;

    publicclassTaskBeanimplementsRunnable Serializable

    privateintcounter;

    privateintsum;

    privatebooleanstarted;

    privatebooleanrunning;

    privateintsleep;

    publicTaskBean()

    counter= ;

    sum= ;

    started=false;

    running=false;

    sleep= ;

    

    

    TaskBean包含的"繁重任务"是计算 + + …+ 的值 不过它不通过 *( + )/ = 公式计算 而是由run()方法调用work()方法 次完成计算 work()方法的代码如下所示 其中调用Thread sleep()是为了确保任务总耗时约 秒

    protectedvoidwork()

    try

    Thread sleep(sleep);

    counter++;

    sum+=counter;

    catch(InterruptedExceptione)

    setRunning(false);

    

    

    status jsp页面通过调用下面的getPercent()方法获得任务的完成状况

    publicsynchronizedintgetPercent()

    returncounter;

    

    如果任务已经启动 isStarted()方法将返回true

    publicsynchronizedbooleanisStarted()

    returnstarted;

    

    如果任务已经完成 isCompleted()方法将返回true

    publicsynchronizedbooleanisCompleted()

    returncounter== ;

    

    如果任务正在运行 isRunning()方法将返回true

    publicsynchronizedbooleanisRunning()

    returnrunning;

    

    SetRunning()方法由start jsp或stop jsp调用 当running参数是true时 SetRunning()方法还要将任务标记为"已经启动" 调用setRunning(false)表示要求run()方法停止执行

    publicsynchronizedvoidsetRunning(booleanrunning)

    this running=running;

    if(running)

    started=true;

    

    任务执行完毕后 调用getResult()方法返回计算结果 如果任务尚未执行完毕 它返回null

    publicsynchronizedObjectgetResult()

    if(isCompleted())

    returnnewInteger(sum);

    else

    returnnull;

    

     当running标记为true pleted标记为false时 run()方法调用work() 在实际应用中 run()方法也许要执行复 杂的SQL查询 解析大型XML文档 或者调用消耗大量CPU时间的EJB方法 注意"繁重的任务"可能要在远程服务器上执行 报告结果的JSP页面有两 种选择 或者等待任务结束 或者使用一个进度条

    publicvoidrun()

    try

    setRunning(true);

    while(isRunning()&&!isCompleted())

    work();

    finally

    setRunning(false);

    

    

    二 启动任务

    start jsp是web xml部署描述符中声明的欢迎页面 web xml的内容是

    <?xmlversion=" "encoding="GB "?>

    <!DOCTYPEweb app

    PUBLIC" //SunMicrosystems Inc //DTDWebApplication //EN"

    "

    <web app>

    <wele file list>

    <wele file>start jsp</wele file>

    </wele file list>

    </web app>

    start jsp启>动一个专用的线程来运行"繁重的任务" 然后把HTTP请求传递给status jsp

     start jsp页面利用<jsp:useBean>标记创建一个TaskBean的实例 将scope属性定义为session使得对于来自 同一浏览器的HTTP请求 其他页面也能提取到同一个Bean对象 start jsp通过调用 session removeAttribute("task")确保<jsp:useBean>创建了一个新的Bean对象 而不是提取一个旧对 象(例如 同一个用户会话中更早的JSP页面所创建的Bean对象)

    下面是start jsp页面的代码清单

    <%session removeAttribute("task");%>

    <jsp:useBeanid="task"scope="session"

    />

    <%task setRunning(true);%>

    <%newThread(task) start();%>

    <jsp:forwardpage="status jsp"/>

    start jsp创建并设置好TaskBean对象之后 接着创建一个Thread 并将Bean对象作为一个Runnable实例传入 调用start()方法时新创建的线程将执行TaskBean对象的run()方法

相关参考

知识大全 怎样在Java实例开发的过程中使用进度条

怎样在Java实例开发的过程中使用进度条  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在读取大

知识大全 JSP设计彩色验证码实例

JSP设计彩色验证码实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!cha138/Ar

知识大全 jquery 滚动条事件简单实例

这篇文章介绍了jquery滚动条事件的简单实例有需要的朋友可以参考一下 复制代码代码如下:cha138/Article/program/Java/JSP/201311/20441

知识大全 实战JSP进阶编程之一

实战JSP进阶编程之一  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  不少JSP初学者在学会简单

知识大全 Tomcat+JSP经典配置实例

Tomcat+JSP经典配置实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  经常看到jsp的

知识大全 JSP编程技术测试题

JSP编程技术测试题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一选择题(每小题分共分).当多个

知识大全 JSP自定义标签入门实例

JSP自定义标签入门实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!首先在eclipse下新建一

知识大全 JSP语法大全及实例解析

JSP语法大全及实例解析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  HTML注释在客户端显示

知识大全 JSP培训之购物车实例

JSP培训之购物车实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!cha138/Art

知识大全 解析缓冲技术在JSP编程中新的应用

解析缓冲技术在JSP编程中新的应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一概述  在W