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

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

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

    iNeo

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      30 Posts :: 8 Stories :: 2 Comments :: 0 Trackbacks
     在這篇ASP.NET 中Session 實現原理淺析[2] 狀態管理器Blog中,Flier老大向大家推薦了Java中幾種Cache的實現,于是我就按圖索驥,首先是找到OSCache的老家:OpenSymphony。哇,這里的資源真多啊,簡直就是一個寶藏。為什么原來就沒有發現呢?感謝Flier老大了!
            在OpenSymphony的主頁上,我看到了兩個讓我覺得很親切的項目:WebWork和Quarts。WebWork作為一個實現了IOC的輕量級Web Application Framework一直備受開發者的青睞;而Quarts更是在異步信息處理上大展拳腳了。看到了老朋友,我就只好暫時將新歡OSCache擺一邊,找出我很久沒有聯系的老貓(Tomcat)去跟WebWork聊嗑了。
            做好了一切的準備工作之后[1],我嘗試著做一個登陸注冊的功能,以體驗一下WebWork。跟其他的Web應用一樣,我們首先要建立一個標準的WEB-INF目錄(所謂標準就是目錄下面包含lib和classes子目錄以及Web.xml文件),接著在WEB-INF/lib下面放上WebWork所需要的.jar文件并在WEB-INF目錄下建立Web.xml文件[2]。在完成了這些千篇一律的工作之后,我仔細的看了一下Web.xml中內容,它里面只定義了一個servlet:webwork,其對應的class為com.opensymphony.webwork.dispatcher.ServletDispatcher,然后由webwork這個servlet去處理所有.action的請求。看到這里,我暗自竊喜,這跟我熟悉的WAF框架是十分類似的,只不過MainServlet變成了ServletDispatcher,.do的請求變成了.action而已。
            接下來,就是到classes目錄下建立xwork.xml文件,這個文件跟WAF中的mappings.xml很相似,因為對.action的處理都是在這里被定義的,而WAF中關于.do的處理則定義在mapping.xml中。但是也有一些我并不清楚的東西,如package和Interceptor。在classes目錄下還要建立一個validator.xml文件,但是這個并不是必需的。做好了這些準備工作之后,就真正開始WebWork的體驗之旅了。
            1、建立一個index.jsp(以下為主要部分):
     <form action="Login.action" method="post">
      
    <table cellspacing=0 width="100%">
        
    <tr>
          
    <td>Login ID:
            
    <input type="text" name="loginId" width=100 />&nbsp;&nbsp;

              Password:
            
    <input type="password" name="loginPassword" width=100 />&nbsp;&nbsp;
            
    <input type="submit" value="Login" />
          
    </td>
          
    <td align=right>
             
    Hello, <ww:property value="loginId" />

          
    </td>
        
    </tr>
      
    </table>
    </form>

            需要注意的地方就是form的action屬性的寫法了;
            2、在xwork.xml中增加相應的處理action的節點

     <action name="Login" class="fantasysoft.webwork.Login">
       
    <result name="error" type="dispatcher">index.jsp</result>
       
    <result name="success" type="dispatcher">index.jsp</result>
    </action>

            這里需要注意的是action節點中name的值要與index.jsp中定義的action的名字要嚴格匹配,對于大小寫是敏感的。在action節點中還包含了節點,以說明處理action之后會可能出現的不同結果(name)和相應的處理方式(type)。譬如說,如果Login的這個action處理success了,則使用dispatcher將結果分(dispatch)到相應的頁面。而在WAF框架中并沒有這樣的定義,因為在默認情況下如果不成功則會返回當前頁面,不過可以定義FlowHandler,并擁有類似的功能且更加靈活;
            3、實現類Login的代碼:

    package fantasysoft.webwork;

    import com.opensymphony.xwork.ActionSupport;

    public class Login extends ActionSupport
    {
        
    private
     String loginId;
        
    private
     String loginPassword;

        
    public String getLoginPassword() 
    {
            
    return
     loginPassword;
        }

        
    public void setLoginPassword(String loginPassword) {
            
    this.loginPassword =
     loginPassword;
        }

        
    public String getLoginId() {
            
    return
     loginId;
        }

        
    public void setLoginId(String loginId) {
            
    this.loginId =
     loginId;
        }

        
    public String execute() throws Exception{             
            
    if (!checkUserId()return
     ERROR;  // checkUserId is the method that will be implemented
                
    else return
     SUCCESS;
        }

    }

            在代碼中,你會發現有兩個繼承變量ERROR與SUCCESS。這兩個變量是定義在Action這個接口的,而ActionSupport則實現了Action接口。在接口Action的代碼中,我們可以看到ERROR = "error"、SUCCESS = "success"。我們可以發現這兩個變量的值與xwork.xml中result子節點中的name的值是相匹配。除此之外,在代碼中,我也找不到了原來在開發中經常要用到的一個API:getParameter。事實上,將表單中數據析取出來的工作是由webwork這個唯一定義的servlet去完成的,而這個類會調用Login類中set的方法將用戶輸入的數據賦給Login類的屬性:loginId和loginPassword。在這里,我們也要跟前面index.jsp中的包含的標簽聯系起來。當數據被dispatch回index.jsp的時候,在index.jsp頁面render的過程中是調用了get的方法去獲取相應的數據的。
            最后,我們可以總結一下,整個Web應用程序的處理流程了:
            首先,當用戶提交了表單(form)至Login.action后,由web.xml中定義的唯一的一個servlet:webwork去處理這個請求。webwork會以action的name:Login到xwork.xml中尋找相應的處理action的類,于是就找到了fantasysoft.webwork包中的Login類,由Login類中的execute方法來處理提交的form的數據了;
            然后,根據execute方法的返回值,再到xwork.xml中對應的action節點中去找匹配的result子節點;
            最后,根據result子節點的定義,將處理結果分發(dispatch)或者重定向(redirect)至下一個頁面[3]

            
            [1] 準備工作可以參考
    WebWork Getting Started
            [2] web.xml文件的具體內容,可以參考
    WebWork Tutorial Lesson 2  
            [3] 對于result的Type的更多介紹,可以參考
    WebWork Tutorial Lesson 3     

    posted on 2005-11-29 08:07 只牽這只狗 閱讀(115) 評論(0)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 久久青草免费91观看| 三级网站在线免费观看| 国产大片线上免费观看| 亚洲国产精品lv| 67194成手机免费观看| 亚洲日韩国产精品无码av| 成年黄网站色大免费全看| 在线综合亚洲欧洲综合网站| 在线播放免费人成视频在线观看| 亚洲国产精品无码第一区二区三区 | 51视频精品全部免费最新| 亚洲视频免费观看| 日韩欧毛片免费视频| 亚洲色偷偷色噜噜狠狠99| 国产自产拍精品视频免费看| 三年片在线观看免费观看大全中国| 亚洲AV无码成人精品区大在线| 2022免费国产精品福利在线| 亚洲精品乱码久久久久66| 免费国产黄网站在线观看可以下载 | 国产精品高清全国免费观看| 一二三四在线观看免费中文在线观看| www国产亚洲精品久久久日本| 国产精品成人啪精品视频免费| 久久综合图区亚洲综合图区| 91香蕉视频免费| 日本一区二区在线免费观看| 国产亚洲大尺度无码无码专线 | 亚洲AV日韩AV永久无码绿巨人 | 中文字幕手机在线免费看电影| 亚洲国产综合精品中文第一区| 国产精品免费精品自在线观看| 欧洲亚洲国产精华液| 亚洲精品无码不卡在线播放HE| 成人在线免费看片| 一级毛片不卡免费看老司机| 精品亚洲国产成AV人片传媒| 免费国产一级特黄久久| 国产精品免费大片| 男女猛烈xx00免费视频试看| 亚洲人成电影在线天堂|