<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    athrunwang

    紀元
    數據加載中……
    為Struts 2應用程序創建進度條(等待頁面)

    Struts 2模擬進度條的原理

          對于一些需要較長時間才能完成的任務,在Web開發中,會由HTTP協議會因為超時而斷開而面臨許多風險,這是在桌面開發不曾遇到的。Struts 2提供的execAndWait攔截器就是為了處理和應付這種情況而設計的。注意,該攔截器不在"defaultStack"中,所以必須在使用它的動作里聲明它,并且必須放在攔截器棧的最后一個。

          使用了該攔截器后,動作依然正常執行,只是該攔截器會分配一個后臺線程處理動作的運行,并在動作完成之前把用戶帶到一個"等待"頁面。,該頁面每隔一段時間刷新一次,直到那個后臺線程執行完畢為止。如果用戶隨后又觸發了同一個動作,但頂一個動作尚未執行完畢,這個攔截器將繼續向用戶發送"等待"結果;如果他已經執行完畢,用戶會看到該動作的最終結果。

          "等待"結果的行為與"dispatcher"結果的行為很相似,但是要注意的是,"等待"結果對應的視圖帶有如下的meta標簽:

    <meta http-equiv="refresh" content="5;url=/Struts2/default_progressbar.action"/>

    該標簽的作用就每隔多少秒就重新加載一次同樣的URL。這里"5"表示5秒,"url=/Struts2/default_progressbar.action"表示要加載的URL。

       Struts 2是一個靈活強大的框架,如果你不喜歡Struts 2提供的默認"等待頁面",你也可以自己設計自己的等待頁面,若在動作聲明中,沒有找到"等待"結果,將使用默認值。


    execAndWait攔截器

    execAndWait攔截器 可以接收以下參數:

    • threadPriority:分配給相關線程的優先級,默認值為Thread.NORM_PRIORITY。
    • delay:向用戶發送"等待"結果前的毫秒數,默認值為0。如果你不想立刻發送"等待"結果,可以將該參數設置為一個值。例如,你想讓動作超過2秒還未完成時才發送"等待"結果,需要將其值設置為2000.
    • delaySleepInterval:每隔多少毫秒喚醒主線程(處理動作的后臺線程)去檢查后臺線程是否已經處理完成,默認值是100。這個值設為0時無效。

    示例:使用默認視圖與自定義視圖

    創建一個動作類,該動作類的工作為掛起30秒:

    public class ProgressbarAction extends ActionSupport
    {
    private static final long serialVersionUID = 7441785390598480063L;

    private int complete = 0;

    // 獲取進度值
    public int getComplete()
    {
    complete += 10;
    return complete;
    }

    @Override
    public String execute()
    {
    try
    {
    Thread.sleep(30000);
    }
    catch (InterruptedException e)
    {
    e.printStackTrace();
    }
    return SUCCESS;
    }
    }

    配置struts.xml文件:

    <package name="progressbar" extends="struts-default">
    <action name="default_progressbar" class="struts2.suxiaolei.progressbar.action.ProgressbarAction">
    <interceptor-ref name="defaultStack"></interceptor-ref>
    <interceptor-ref name="execAndWait">
    <param name="delay">1500</param>
    </interceptor-ref>
    <result name="success">/state_ok.jsp</result>
    </action>

    <action name="customer_progressbar" class="struts2.suxiaolei.progressbar.action.ProgressbarAction">
    <interceptor-ref name="defaultStack"></interceptor-ref>
    <interceptor-ref name="execAndWait">
    <param name="delay">1500</param>
    </interceptor-ref>
    <result name="wait">/customer_wait.jsp</result>
    <result name="success">/state_ok.jsp</result>
    </action>
    </package>

    測試頁面:

    <body>
    <s:a href="/Struts2/default_progressbar.action">default_view</s:a>
    <br />
    <s:a href="/Struts2/customer_progressbar.action">customer_view</s:a>
    </body>

    自定義等待頁面:

    <html>
    <head>
    <base href="<%=basePath%>">

    <title>My JSP 'customer_wait.jsp' starting page</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">

    <!-- 下面的meta元素才是重點,其他的沒什么影響,是IDE自帶的 -->
    <meta http-equiv="refresh" content="3;url=/Struts2/customer_progressbar.action">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

    </head>

    <body>
    <div>
    Please wait...(<s:property value="complete"/>)% complete
    </div>
    </body>
    </html>

    最終結果頁面:

    <body>
    OK!
    </body>

    在瀏覽器中輸入:http://localhost:8081/Struts2/test.jsp,獲得如下頁面

    首先點擊,"default_view"鏈接:


    查看它的源代碼:

    <html>
    <head>
    <meta http-equiv="refresh" content="5;url=/Struts2/default_progressbar.action"/>
    </head>
    <body>
    Please wait while we process your request...
    <p/>

    This page will reload automatically and display your request when it is completed.
    </body>
    </html>

    這次點擊"customer_view"鏈接:

    ...

    ...

    這是自定義界面,最后動作執行完畢后,都會獲得最終頁面

    我們使用Struts 2模擬進度條就完成了!

    posted on 2011-11-18 10:40 AthrunWang 閱讀(1026) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产亚洲蜜芽精品久久| 激情综合亚洲色婷婷五月APP| 亚洲av成人一区二区三区在线播放| 中文字幕亚洲免费无线观看日本| 亚洲精选在线观看| 人人玩人人添人人澡免费| 国产亚洲美女精品久久久久狼| XXX2高清在线观看免费视频| 亚洲国产无套无码av电影| 日本一区午夜艳熟免费| 亚洲av日韩av不卡在线观看| 久久aa毛片免费播放嗯啊| 亚洲日本香蕉视频| 无码日韩精品一区二区免费| 亚洲精品人成网线在线播放va | 亚洲国产美女在线观看| 久九九精品免费视频| 亚洲日产乱码一二三区别| 免费高清在线影片一区| 国产亚洲成在线播放va| 在线播放亚洲第一字幕| 91麻豆国产免费观看| 亚洲一区二区三区在线网站| 国产大片免费观看中文字幕| 国产精品福利在线观看免费不卡| 久久亚洲精品成人777大小说| 2020久久精品国产免费| 亚洲av无码一区二区三区四区| 亚洲国产精品人人做人人爽| 久久国产乱子伦精品免费看| 亚洲中文字幕久久精品无码VA| 伊在人亚洲香蕉精品区麻豆| 久久久受www免费人成| 亚洲人成电影福利在线播放 | 成人免费观看一区二区| 亚洲AV无码精品国产成人| 亚洲乱码日产一区三区| 精品无码AV无码免费专区| 亚洲AV无码一区二区三区电影| 中文字幕在线亚洲精品| 最近免费中文字幕视频高清在线看|