Struts2 execAndWait攔截器例子
在Struts2中附帶一個名爲「execAndWait」一個非常有趣的「執行和等待」攔截器,這是一個非常方便的攔截器長時間運行操作在後臺,顯示用戶的自定義的等待頁面。在本教程中,它顯示了一個完整的使用 Struts2 execAndWait 攔截器的例子。
1. 動作
一個普通的動作類,有一個長時間運行進程,證明了execAndWait效果。
LongProcessAction.java
package com.yiibai.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 meta refresh
記得把元刷新的等待頁面頂部; 否則,該網頁將不重定向到成功頁面,即使該過程完成。
在這個wait.jsp,元刷新設置在每5秒網頁重新加載,如果該過程完成後,將重定向到 success.jsp, 否則留在同一個頁面。
wait.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
Struts 2 execAndWait 示例
Please wait while we process your request...
success.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
Struts 2 execAndWait 示例
Done
3. 執行和等待攔截器
鏈接動作類並聲明「execAndWait」攔截器。
execAndWait 參數
- delay (optional) : 以毫秒爲單位初始延遲顯示在wait.jsp。默認是沒有延遲的。
- delaySleepInterval (optional) : 時間間隔是以毫秒爲單位來檢查後臺進程是否已經完成,默認值是100毫秒。
struts.xml
<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>
在這種情況下,將延遲1秒顯示至wait.jsp,並檢查後臺進程是否在每500毫秒完成。即使這個過程完成後,它仍然需要等待 wait.jsp 元刷新來觸發頁面重載。
4. 示例
訪問網址: http://localhost:8080/struts2execandwait/longProcessAction.action
延時1秒,顯示在 wait.jsp 。
當該過程完成時,自動顯示在 success.jsp。
代碼下載: http://pan.baidu.com/s/1o62BHGY