Struts2 execAndWait拦截器用户在请求Action返回结果前的处理,主要是给用户友好的提示:
首先新建一个等待页面 wait.jsp ,该页面是用户用于等待的页面。
在Struts.xml里面配置拦截器:
<action name="login" class="com.struts2.LoginAction" method="login"> <result name="success">/method.jsp</result> <result name="error">/loginError.jsp</result> <!-- 配置等待页面,返回值必须是wait --> <result name="wait">/wait.jsp</result> <interceptor-ref name="defaultStack"></interceptor-ref> <!-- 引入拦截器,execAndWait拦截器必须在所有拦截器的最下面 --> <interceptor-ref name="execAndWait"> <!-- 等待时间,执行时间没有超过此值,将不显示等待画面 (毫秒)--> <param name="delay">2000</param> <!-- 间隔检查时间,检查后台进程有没有执行完毕,如果完成了它就立刻返回,不用等到等待,用户不会看到等待画面 --> <param name="delaySleepInterval">50</param> </interceptor-ref> </action>
在action里面让该方法延迟执行:
package com.struts2; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import org.apache.struts2.interceptor.RequestAware; import org.apache.struts2.interceptor.SessionAware; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport{ private static final long serialVersionUID = 1L; private User user ; public User getUser() { return user; } /* * map方式获取request和session */ public void setUser(User user) { this.user = user; } public String login() throws Exception{ Thread.sleep(3000) ; System.out.println("这是登陆"); return SUCCESS ; } }
运行该工程,结果如下:
My JSP 'wait.jsp' starting page<!-- <link rel="stylesheet" type="text/css" href="styles.css"> -->
正在提交请求,请耐心等待.......
假如action里面没有设置延迟,那么action将直接跳转,不会显示wait.jsp