位置:首頁 > Java技術 > Struts2教學 > Struts2 execAndWait攔截器例子

Struts2 execAndWait攔截器例子

在Struts2中附帶一個名為“execAndWait”一個非常有趣的“執行和等待”攔截器,這是一個非常方便的攔截器長時間運行操作在後台,顯示用戶的自定義的等待頁麵。在本教學中,它顯示了一個完整的使用 Struts2 execAndWait 攔截器的例子。

1. 動作

一個普通的動作類,有一個長時間運行進程,證明了execAndWait效果。

LongProcessAction.java

package com.gitbook.netmon.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頁麵

創建兩個頁麵:
  1. wait.jsp - 顯示給用戶,長時間運行的進程。
  2. 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" %>
<html>
<head>
<title>Struts 2 execAndWait 示例</title>
<meta http-equiv="refresh" content="5;url=<s:url includeParams="all" />"/>
</head>
 
<body>
<h1>Struts 2 execAndWait 示例</h1>

<h3>Please wait while we process your request...</h3>

</body>
</html>

success.jsp

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Struts 2 execAndWait 示例</title>
</head>
 
<body>
<h1>Struts 2 execAndWait 示例</h1>

<h3>Done</h3>

</body>
</html>

3. 執行和等待攔截器

鏈接動作類並聲明“execAndWait”攔截器。
execAndWait 參數
  1. delay (optional) : 以毫秒為單位初始延遲顯示在wait.jsp。默認是冇有延遲的。
  2. delaySleepInterval (optional) : 時間間隔是以毫秒為單位來檢查後台進程是否已經完成,默認值是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.gitbook.netmon.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. 示例

訪問網址: http://localhost:8080/struts2execandwait/longProcessAction.action

延時1秒,顯示在 wait.jsp 。
Struts 2 ExecAndWait interceptor example

當該過程完成時,自動顯示在 success.jsp。

Struts 2 ExecAndWait interceptor example

代碼下載:http://pan.baidu.com/s/1o62BHGY

參考

  1. Struts2 execAndWait攔截器文檔
  2. HTML Meta Refresh