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頁麵
創建兩個頁麵:
- 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" %> <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 參數
- delay (optional) : 以毫秒為單位初始延遲顯示在wait.jsp。默認是冇有延遲的。
- 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 。
當該過程完成時,自動顯示在 success.jsp。
代碼下載:http://pan.baidu.com/s/1o62BHGY