- struts2使用execAndWait拦截器实现自动显示等待页面。
execAndWait拦截器的实现过程
1.当表单提交请求到来时,execuAndWait拦截器将创建一个新的线程来执行Action,然后返回一个等待页面给用户,让用户知道请求正在处理中。
2.等待页面将包含自动刷新功能,每隔几秒钟就通知浏览器,向初始请求的URL再次发送请求。
3.execAndWait拦截器再次截获请求,判断Action是否执行完毕,如果仍未执行完毕,则继续向等待用户返回等待页面;如果已经执行完毕,则向用户返回相应的执行成功页面。
execAndWait的三个参数
threadPriority:可选参数,用来指定线程的优先级,默认值为Thread.NORM_PRIORITY
delay:可选参数,用来指定显示等待页面初始等待延迟时间,以毫秒为单位。默认情况下没有等待延迟。
delaySleepInterval:可选参数,只能和delay参数一起使用,用来指定检查后台进程是否执行完毕的时间间隔,以毫秒为单位,默认值是100毫秒
在上一篇的基础上进行实例更改。
1.struts.xml修改为
<!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.i18n.encoding" value="utf-8" />
<constant name="struts.custom.i18n.resources" value="TokenInterceptor" />
<package name="default" extends="struts-default">
<action name="login" class="action.LoginAction">
<interceptor-ref name="defaultStack" />
<!--execAndWait拦截器必须是所有拦截器的最后一个,因为它将停止后续的所有操作 -->
<interceptor-ref name="execAndWait" />
<result name="wait">/wait.jsp</result>
<result name="success">/index.jsp</result>
</action>
</package>
</struts>
2.wait.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>避免表单重复提交</title>
<!-- 设置页面每隔5s刷新一次 -->
<meta http-equiv="refresh" content="5;url=<s:url includeParams='all'/> "/>
</head>
<body>
<center>
<jsp:include page="index.html"/>
<h4>正 在 登 录 系 统<br/><br/>
请 您 稍 候 ...</h4>
</center>
</body>
</html>