Struts 2模拟进度条的原理
对于一些需要较长时间才能完成的任务,在Web开发中,会由HTTP协议会因为超时而断开而面临许多风险,这是在桌面开发不曾遇到的。Struts 2提供的execAndWait拦截器就是为了处理和应付这种情况而设计的。注意,该拦截器不在"defaultStack"中,所以必须在使用它的动作里声明它,并且必须放在拦截器栈的最后一个。
使用了该拦截器后,动作依然正常执行,只是该拦截器会分配一个后台线程处理动作的运行,并在动作完成之前把用户带到一个"等待"页面。,该页面每隔一段时间刷新一次,直到那个后台线程执行完毕为止。如果用户随后又触发了同一个动作,但顶一个动作尚未执行完毕,这个拦截器将继续向用户发送"等待"结果;如果他已经执行完毕,用户会看到该动作的最终结果。
"等待"结果的行为与"dispatcher"结果的行为很相似,但是要注意的是,"等待"结果对应的视图带有如下的meta标签:
java代码:
-
<metahttp-equiv="refresh"content="5;url=/Struts2/default_progressbar.action"/>
该标签的作用就每隔多少秒就重新加载一次同样的URL。这里"5"表示5秒,"url=/Struts2/default_progressbar.action"表示要加载的URL。
Struts 2是一个灵活强大的框架,如果你不喜欢Struts 2提供的默认"等待页面",你也可以自己设计自己的等待页面,若在动作声明中,没有找到"等待"结果,将使用默认值。
execAndWait拦截器
execAndWait拦截器 可以接收以下参数:
- threadPriority:分配给相关线程的优先级,默认值为Thread.NORM_PRIORITY。
- delay:向用户发送"等待"结果前的毫秒数,默认值为0。如果你不想立刻发送"等待"结果,可以将该参数设置为一个值。例如,你想让动作超过2秒还未完成时才发送"等待"结果,需要将其值设置为2000.
- delaySleepInterval:每隔多少毫秒唤醒主线程(处理动作的后台线程)去检查后台线程是否已经处理完成,默认值是100。这个值设为0时无效。
示例:使用默认视图与自定义视图
创建一个动作类,该动作类的工作为挂起30秒:
java代码:
-
publicclassProgressbarActionextendsActionSupport
-
{
-
privatestaticfinallongserialVersionUID=7441785390598480063L;
-
-
privateintcomplete=0;
-
-
-
publicintgetComplete()
-
{
-
complete+=10;
-
returncomplete;
-
}
-
-
@Override
-
publicStringexecute()
-
{
-
try
-
{
-
Thread.sleep(30000);
-
}
-
catch(InterruptedExceptione)
-
{
-
e.printStackTrace();
-
}
-
returnSUCCESS;
-
}
-
}
配置struts.xml文件:
java代码:
-
<packagename="progressbar"extends="struts-default">
-
<actionname="default_progressbar"class="struts2.suxiaolei.progressbar.action.ProgressbarAction">
-
<interceptor-refname="defaultStack"></interceptor-ref>
-
<interceptor-refname="execAndWait">
-
<paramname="delay">1500</param>
-
</interceptor-ref>
-
<resultname="success">/state_ok.jsp</result>
-
</action>
-
-
<actionname="customer_progressbar"class="struts2.suxiaolei.progressbar.action.ProgressbarAction">
-
<interceptor-refname="defaultStack"></interceptor-ref>
-
<interceptor-refname="execAndWait">
-
<paramname="delay">1500</param>
-
</interceptor-ref>
-
<resultname="wait">/customer_wait.jsp</result>
-
<resultname="success">/state_ok.jsp</result>
-
</action>
-
</package>
测试页面:
java代码:
-
<body>
-
<s:ahref="/Struts2/default_progressbar.action">default_view</s:a>
-
<br/>
-
<s:ahref="/Struts2/customer_progressbar.action">customer_view</s:a>
-
</body>
自定义等待页面:
java代码:
-
<html>
-
<head>
-
<basehref="<%=basePath%>">
-
-
<title>MyJSP'customer_wait.jsp'startingpage</title>
-
-
<metahttp-equiv="pragma"content="no-cache">
-
<metahttp-equiv="cache-control"content="no-cache">
-
<metahttp-equiv="expires"content="0">
-
<metahttp-equiv="keywords"content="keyword1,keyword2,keyword3">
-
<metahttp-equiv="description"content="Thisismypage">
-
-
<!--下面的meta元素才是重点,其他的没什么影响,是IDE自带的-->
-
<metahttp-equiv="refresh"content="3;url=/Struts2/customer_progressbar.action">
-
<!--
-
<linkrel="stylesheet"type="text/css"href="styles.css">
-
-->
-
-
</head>
-
-
<body>
-
<div>
-
Pleasewait...(<s:propertyvalue="complete"/>)%complete
-
</div>
-
</body>
-
</html>
最终结果页面:
在浏览器中输入:http://localhost:8081/Struts2/test.jsp,获得如下页面
首先点击,"default_view"链接:
查看它的源代码:
java代码:
-
<html>
-
<head>
-
<metahttp-equiv="refresh"content="5;url=/Struts2/default_progressbar.action"/>
-
</head>
-
<body>
-
Pleasewaitwhileweprocessyourrequest...
-
<p/>
-
-
Thispagewillreloadautomaticallyanddisplayyourrequestwhenitiscompleted.
-
</body>
-
</html>
这次点击"customer_view"链接:
...
...
这是自定义界面,最后动作执行完毕后,都会获得最终页面
我们使用Struts 2模拟进度条就完成了!
转载自:http://sishuok.com/forum/blogPost/list/508.html
分享到:
相关推荐
程序进过本人亲测,附件中含SQL,用的是MySQL数据库,实现了带进度条的多文件上传,并提供下载功能,解压后可直接导入Eclipse,希望对你有所帮助。
java struts2实现文件上传进度条显示
文件上传进度条的简单实现,如果有不当的地方还望批评指出,谢谢!
这个是个人在网上找到的一些案例结合起来做的一个Struts2的文件上传,jar我就没拷上来了
struts2上传文件进度条显示,里面有详细的代码
利用Struts 2框架创建一个web项目chap2_e22,实现用户登录过程。具体要求是在loginAction类中分别用login()和registered()处理用户登录和注册的过程,分别创建login.jsp和register.jsp两个页面实现登录和注册的...
这是根据uploadify3 2结合struts2搭建的文件上传环境 可以直接导入eclipse运行 每步实现基本都加了注释 以下是我碰到的问题: 1 判断session是否失效 本实例没测试这个问题 但在工作项目中碰到了 但原因在这里...
struts2+hibernate+spring,struts2文件上传带进度条,页面美观,功能齐全。下载后把工程导入到myeclipse后即可运行,不需任何配置。由于压缩后文件较大,所以该功能下的lib为空,下载后请自己导入struts2,hibernate...
Struts2系统执行进度条(Kevinb原创),写这个进度条我个人研究了很长的时间,花费了很大的精力是了这个遮蔽等待条; 使用的效果非常的棒,而且使用方法和应用方法很简单; 推荐使用;
本资源源于网络,经过修改,返还网络!呵呵呵!完整项目demo。
这是使用Eclipse 3.3, JDK 6.0,以及Tomcat 6.0翻写的Struts2的演示程序。它是了解和学习Struts2的好例子。
建立你的第一个Struts2应用程序
Struts2+jquery上传进度条 带所有包 完美运行
struts2结合uploadify3.2实现上传进度条,可控文件大小
花了3个小时才搭建出来的struts2小程序
1.struts2 带进度条文件上传 源码 2.源码中有lib 下载后部署马上就能用 3.代码中有详细的注释信息 4.对关键点有详细的解释说明 5.如果谁用起来觉得有问题可在评论留言,留联系方式,我会联系你的 6.非常感谢原创作者...
struts1.2下实现文件上传进度条
在struts2中上传是很简单的,struts2会先把文件写到临时文件中,以后在提供这个文件的File对象到action中。具体原理看这里:
struts2上传文件带进度条 加上自己的一些修改