为Struts 2应用程序创建进度条(等待页面)

Struts 2模拟进度条的原理

对于一些需要较长时间才能完成的任务,在Web开发中,会由HTTP协议会因为超时而断开而面临许多风险,这是在桌面开发不曾遇到的。Struts 2提供的execAndWait拦截器就是为了处理和应付这种情况而设计的。注意,该拦截器不在"defaultStack"中,所以必须在使用它的动作里声明它,并且必须放在拦截器栈的最后一个。

使用了该拦截器后,动作依然正常执行,只是该拦截器会分配一个后台线程处理动作的运行,并在动作完成之前把用户带到一个"等待"页面。,该页面每隔一段时间刷新一次,直到那个后台线程执行完毕为止。如果用户随后又触发了同一个动作,但顶一个动作尚未执行完毕,这个拦截器将继续向用户发送"等待"结果;如果他已经执行完毕,用户会看到该动作的最终结果。

"等待"结果的行为与"dispatcher"结果的行为很相似,但是要注意的是,"等待"结果对应的视图带有如下的meta标签:

<meta http-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秒:

public class ProgressbarAction extends ActionSupport
{
private static final long serialVersionUID = 7441785390598480063L;

private int complete = 0;

// 获取进度值
public int getComplete()
{
complete += 10;
return complete;
}

@Override
public String execute()
{
try
{
Thread.sleep(30000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
return SUCCESS;
}
}

配置struts.xml文件:

<package name="progressbar" extends="struts-default">
<action name="default_progressbar" class="struts2.suxiaolei.progressbar.action.ProgressbarAction">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="execAndWait">
<param name="delay">1500</param>
</interceptor-ref>
<result name="success">/state_ok.jsp</result>
</action>

<action name="customer_progressbar" class="struts2.suxiaolei.progressbar.action.ProgressbarAction">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="execAndWait">
<param name="delay">1500</param>
</interceptor-ref>
<result name="wait">/customer_wait.jsp</result>
<result name="success">/state_ok.jsp</result>
</action>
</package>

测试页面:

<body>
<s:a href="/Struts2/default_progressbar.action">default_view</s:a>
<br />
<s:a href="/Struts2/customer_progressbar.action">customer_view</s:a>
</body>

自定义等待页面:

<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'customer_wait.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">

<!-- 下面的meta元素才是重点,其他的没什么影响,是IDE自带的 -->
<meta http-equiv="refresh" content="3;url=/Struts2/customer_progressbar.action">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

</head>

<body>
<div>
Please wait...(<s:property value="complete"/>)% complete
</div>
</body>
</html>

最终结果页面:

<body>
OK!
</body>

在浏览器中输入:http://localhost:8081/Struts2/test.jsp,获得如下页面

首先点击,"default_view"链接:


查看它的源代码:

<html>
<head>
<meta http-equiv="refresh" content="5;url=/Struts2/default_progressbar.action"/>
</head>
<body>
Please wait while we process your request...
<p/>

This page will reload automatically and display your request when it is completed.
</body>
</html>

这次点击"customer_view"链接:

...

...

这是自定义界面,最后动作执行完毕后,都会获得最终页面

我们使用Struts 2模拟进度条就完成了!
Struts2与Uploadify实现带进度条的文件上传 本文还有配套的精品资源,点击获取 简介:结合Struts2框架与Uploadify插件实现文件上传功能,通过进度条提升用户体验。文章详细介绍了如何集成Uploadify,设置参数,创建Struts2 Action,配置Result以及处理文件上传和安全性问题。同时强调了测试与优化的重要性,确保上传功能既安全又用户友好。 1. Struts2框架介绍与配置 1... 阅读详情

相关推荐

Struts2系统执行进度条(Kevinb原创)

Struts2系统执行进度条(Kevinb原创),写这个进度条我个人研究了很长的时间,花费了很大的精力是了这个遮蔽等待条; 使用的效果非常的棒,而且使用方法和应用方法很简单; 推荐使用;

Struts2进度条

如果你的动作需要5分钟  才能处理完,而你又不想让用户担心或者说睡着了,你该怎么办呢??? 显示一个进度条!在Web开发中,谢一个进度条并不是很容易的事情,你肯呢个要为解决这个问题画上好几天时间,晴好struts给你提供了一个简单易容的Execute and Wait拦截器,这个拦截器,非常擅长为繁琐的任务模拟以歌进度条。   对于那些需要数分钟  才能完成的任务,我们为了给用户一个友好的...

sungang1120的专栏 225

struts2 用AJAX实现的上传功能(带进度条)

struts2 用AJAX实现的上传功能,带进度条的jar包。

Struts2页面等待

在struts2中我们使用ExecuteAndWaitInterceptor拦截器实现显示等待页面,   execAndWait拦截器能够让一个执行时间较长的action在后台执行,并向用户显示进度信息。   当action的执行时间会超过5或10分钟时,它可以防止HTTP请求超时。execAndWait拦截器参数:            1、threadPriority:可选,指定线程的优先级,...

lelong999的专栏 206

struts2+ajax文件进度条的实现

文件上传进度条的简单实现,如果有不当的地方还望批评指出,谢谢!

IP白名单校验

支持格式: 1、127.0.0.1 // 指定固定IP 2、127.0.0.1-127.0.0.128 // 可使用“-”来表示一个IP区间,支持跨IP段(一般不会出现这种情况,跨IP段则配置多个规则) 3、127.0.* // 2~4位IP段可...

2200

struts2开发11--提交后自动显示等待界面

有时候当我们从前台提交大量的数据到服务器时,由于服务器处理的时间较长,这个时候我们在浏览器中看到的是一片空白,不知道后台程序是否成功执行了,这个时候就设置一个友好的信息交互界面(比如在界面上提示系统正在处理等信息)来提示用户。 (1) 在struts2中,实现该功能的是使用execAndWait拦截器,它的具体实现过程如下: 1、当表单提交请求到来时,execAndWait拦截器将创建一个新...

qingff01的专栏 216

开源DIY | 打造会“听”会“走”的智能移动垃圾桶

本文详细介绍了如何利用Arduino和超声波传感器打造一款会“听”会“走”的智能移动垃圾桶。通过开源硬件和简单编程,实现声控移动和自动避障功能,适合创客爱好者和家庭DIY。项目成本控制在200元内,涵盖硬件搭建、电路连接和核心功能实现,是入门级机器人制作的理想选择。

weixin_33670713的博客 232

ExtJS 4.2.1+Struts2 实现后台控制进度的进度条(progressbar)

一年来一直在做一个B/S架构的项目,

且看且行 1756

Visual Studio Git 使用指南

Visual Studio 2022深度集成了Git功能,提供了直观的图形界面管理源代码。本文详细介绍了VS中Git的使用方法:从环境准备、克隆/创建仓库开始,重点讲解了"Git更改"窗口的日常操作,包括查看修改、暂存文件、提交推送等。同时涵盖了分支管理、查看历史、解决冲突等核心功能,以及储藏、重置等高级操作。文章还提供了实用技巧,如提交规范、频繁提交等最佳实践。VS的Git集成覆盖了日常开发需求,图形界面与命令行可互补使用,适合各层次开发者高效管理代码版本。

guigenyi的专栏 1572

学习记录——SIMPACK生成轨道谱文件的方法

生成轨道谱文件的方法,可以用于实测轨道谱导入和自制轨道谱导入仿真

weixin_51965897的博客 7804

Struts2实现文件上传并显示实时进度

基于浏览器的文件上传,特别是对于通过标签来实现上传的情况, 存在着严重的性能问题,因为用户提交了文件之后,在浏览器把文件上传到服务器的过程中,界面看上去似乎是静止的,如果是小文件还好些,如果不幸需要上传的 是几兆、几十兆甚至上百兆的文件,我相信那是一种非常痛苦的体验,我们中间的很多人应该都有过此种不堪的经历。       我们为了改善用户界面,通常会在处理量大或者是网络速度较

z69183787的专栏 4777

SC-FDMA

<br />SC-FDMA(Single-carrier Frequency-Division Multiple Access,單載波分頻多工),是LTE的上行鏈路的主流多址。<br />SC-FDMA是單波載(Single-carrier),與OFDMA相比之下具有的較低的PAPR(峰值/平均功率比,peak-to-average power ratio),比多載波的PAPR低1-3dB左右(PAPR是由于多載波在频域叠加引起)。更低的PAPR可以使行動終端(mobile terminal)在發送功效方面

jod的专栏 3299

struts2 应用程序创建进度条(等待页面)

Struts 2模拟进度条的原理       对于一些需要较长时间才能完成的任务,在Web开发中,会由HTTP协议会因为超时而断开而面临许多风险,这是在桌面开发不曾遇到的。Struts 2提供的execAndWait拦截器就是为了处理和应付这种情况而设计的。注意,该拦截器不在"defaultStack"中,所以必须在使用它的动作里声明它,并且必须放在拦截器栈的最后一个。       使

Code-lover's Learning Notes 846

【Unity3D】RTS Engine 笔记一

RTS Engine 中配置一个新场景, 初步认识GameManager、设置地形以及配置地形网格搜索

ViYeye的博客 1653

大数据领域数据服务的数据分析工具推荐

你有没有过这样的经历?——领导说“帮我分析一下上个月的销量”,你打开Excel却发现数据有100万行,电脑直接卡死;或者想实时知道“现在直播间的观众在买什么”,却不知道用什么工具处理每秒10万条的点击数据。本文的目的:帮你解决“选什么工具做什么事”的问题,覆盖大数据服务的全流程(采集→存储→处理→分析→可视化),推荐高频、实用、易上手的工具,并讲清楚它们的“适用场景”和“优缺点”。范围。

大数据洞察的博客 1932

为Struts2 应用程序创建进度条(等待页面)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33997389的博客 160

微店构造订单页面,自动化抢票

之前的文章写过微店抢票如何构造订单页面分析,这篇文章在之前的基础上,进行抢票。

猫敷雪 7205

struts2 ajax 进度条,struts2 上传文件添加进度条

为了给用户更好体验,最进在struts2添加了上传进度条让用户知道上传过程时间,增长有好度。javascript因为之前作个 文件上传 没有用过 组件进行解析,直接用servlet 解析的,而如今 struts2 框架使用 commons-fileupload 解析上传文件.css一般咱们在action 中声明 file,fileType,等字段 struts2 在执行action 方法时已经...

weixin_35400275的博客 198

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

eclipse 基于struts2 + json 实现文件异步上传, 显示进度条

如果需要源码的朋友请发emial  给我:358645712@qq.com 在这里希望跟各位朋友多多交流,有什么不足的地方请指教。   2个难点: 1 异步上传  (重点:浏览器兼容问题。  怎么在JS中获取 里面的value,. )                      2 显示进度条(难点:1怎么监听文件上传过程, 2 实现进度条,需要多线程)     所需技术支持:

david的专栏 1200

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

struts1.2下实现文件上传进度条

标题:struts1.2下实现文件上传进度条作者:lee353086(kagula)最后修改日期:2007-11-23内容概要:    本文只是对《采用dwr+ajax和struts开发文件上传进度条》细节的补充,有些内容不在熬述。    本文分两部份:client部份和server部份。阅读对象:    知道有种语言叫java,并已阅读《采用dwr+ajax和struts开发文件上传

lee353086的专栏 4102

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【原创】论struts2上传文件进度条

    最近在做一个文件上传中显示进度条的功能,也在网上搜了下例子还挺多的包括JSP版和SERVLET版的。这几个版本都比较好实现,但是struts2版本的进度条非常少,有个把例子但是也运行不了。但是公司用的又是S2,开始按照JSP版的弄了一个晚上还是无法实现。无奈之下只能睡觉了,睡觉的时候想到了S2文件的上传到action开始执行这一步的时候其实文件已经在服务器上了,action要做的就是将

garryyrc的专栏 1万+

使用struts2上传文件时,使用timer拦截器,创建加载页面后,action内创建request对象,报(空指针异常)NullPointException

使用struts2上传文件时,由于上传总是要有个时间差,老是让用户看着提交的页面,用户可能以为没提交成功,又点一遍?又点一遍?得!本来没毛病的程序可能就这样就搞出毛病了。 在这样的背景下,加载转圈,进度条等表现技术应运而生,主要是用来显式地告诉user,嗯,程序正在玩命上传呢,不用重复提交了! 这里,可以使用struts2自带的interceptor,timer拦截器! 在使用过程中,莫

罗亚飞 1393

iframe+struts2文件上传实时进度条

前台jsp内容: &lt;%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&gt; &lt;% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName...

MjCreator的博客 365
上一篇: @Component,@Service,@Controller,@Repository 解說
下一篇: JVM系统相关
programloverjack
博客等级 码龄17年 5粉丝 252原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值