知识大全 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实例开发的过程中使用进度条 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在读取大
JSP设计彩色验证码实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!cha138/Ar
这篇文章介绍了jquery滚动条事件的简单实例有需要的朋友可以参考一下 复制代码代码如下:cha138/Article/program/Java/JSP/201311/20441
实战JSP进阶编程之一 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 不少JSP初学者在学会简单
Tomcat+JSP经典配置实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 经常看到jsp的
JSP编程技术测试题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一选择题(每小题分共分).当多个
JSP自定义标签入门实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!首先在eclipse下新建一
JSP语法大全及实例解析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! HTML注释在客户端显示
JSP培训之购物车实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!cha138/Art
解析缓冲技术在JSP编程中新的应用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一概述 在W