Struts 2带有一个非常有趣的“ Execute and Wait ”拦截器,名为“ execAndWait ”,它是非常方便的拦截器,用于在后台向用户显示自定义的等待页面时长时间运行的操作。 在本教程中,它显示了使用Struts 2 execAndWait拦截器的完整示例。
1.行动
一个普通的动作类,具有长时间运行的过程来演示execAndWait效果。
LongProcessAction.java
package com.mkyong.common.action;
import com.opensymphony.xwork2.ActionSupport;
public class LongProcessAction extends ActionSupport{
public String execute() throws Exception {
//it should be delay few seconds,
//unless you have a super powerful computer.
for(int i =0; i<1000000; i++){
System.out.println(i);
}
return SUCCESS;
}
}
2. JSP页面
创建两个页面:
- wait.jsp –在长时间运行的过程中向用户显示。
- success.jsp –完成后向用户显示。
HTML元刷新
记住将元刷新放在等待页面的顶部; 否则,即使过程完成,该页面也不会重定向到成功页面。
在此wait.jsp中 ,将元刷新设置为每5秒重新加载一次页面,如果该过程完成,它将重定向到success.jsp ,否则将保留在同一页面上。
wait.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<meta http-equiv="refresh" content="5;url=<s:url includeParams="all" />"/>
</head>
<body>
<h1>Struts 2 execAndWait example</h1>
<h2>Please wait while we process your request...</h2>
</body>
</html>
success.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
</head>
<body>
<h1>Struts 2 execAndWait example</h1>
<h2>Done</h2>
</body>
</html>
3.执行并等待拦截器
链接动作类并声明“ execAndWait ”拦截器。
execAndWait参数
- delay(可选) :以毫秒为单位的初始延迟,以显示wait.jsp。 默认值是没有延迟。
- delaySleepInterval(可选) :以毫秒为单位的间隔,用于检查后台进程是否已完成。 默认值为100毫秒。
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="longProcessAction"
class="com.mkyong.common.action.LongProcessAction" >
<interceptor-ref name="execAndWait">
<param name="delay">1000</param>
<param name="delaySleepInterval">500</param>
</interceptor-ref>
<result name="wait">pages/wait.jsp</result>
<result name="success">pages/success.jsp</result>
</action>
</package>
</struts>
在这种情况下,将延迟1秒以显示wait.jsp ,并检查每500毫秒是否已经完成了后台进程。 即使该过程完成了,仍然需要等待wait.jsp元刷新来触发页面重新加载。
4.演示
访问URL: http:// localhost:8080 / Struts2Example / longProcessAction.action
延迟1秒,然后显示wait.jsp 。
该过程完成后,自动显示success.jsp 。
参考
翻译自: https://mkyong.com/struts2/struts-2-execandwait-interceptor-example/