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

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

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

    iNeo

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

     <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節(jié)點(diǎn)中name的值要與index.jsp中定義的action的名字要嚴(yán)格匹配,對于大小寫是敏感的。在action節(jié)點(diǎn)中還包含了節(jié)點(diǎn),以說明處理action之后會(huì)可能出現(xiàn)的不同結(jié)果(name)和相應(yīng)的處理方式(type)。譬如說,如果Login的這個(gè)action處理success了,則使用dispatcher將結(jié)果分(dispatch)到相應(yīng)的頁面。而在WAF框架中并沒有這樣的定義,因?yàn)樵谀J(rèn)情況下如果不成功則會(huì)返回當(dāng)前頁面,不過可以定義FlowHandler,并擁有類似的功能且更加靈活;
            3、實(shí)現(xiàn)類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;
        }

    }

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

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

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

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 日韩毛片免费一二三| 99久9在线|免费| 久久亚洲国产午夜精品理论片| 无码囯产精品一区二区免费| 久久免费观看国产精品| 亚洲国产日韩在线| 免费在线看片网站| 久久精品无码专区免费青青| 亚洲AV午夜成人影院老师机影院 | 无码国产精品一区二区免费16| 亚洲精品一二三区| 久久久久久久综合日本亚洲 | 亚洲中文字幕不卡无码| 又粗又大又黑又长的免费视频| 日韩一级片免费观看| 亚洲最大的视频网站| 亚洲高清国产拍精品青青草原| 又大又硬又爽又粗又快的视频免费| 色综合久久精品亚洲国产| 亚洲AV无码欧洲AV无码网站| 日韩免费无码一区二区视频| 午夜老司机永久免费看片| 麻豆安全免费网址入口| 亚洲AV无码久久久久网站蜜桃| 最近免费中文字幕mv在线电影| 污网站免费在线观看| 亚洲av永久无码精品三区在线4| 狠狠亚洲婷婷综合色香五月排名 | 亚洲av无码成人精品区在线播放| 美女内射毛片在线看免费人动物 | 免费国产人做人视频在线观看| 最近2019免费中文字幕视频三| 一区二区免费电影| 亚洲av片在线观看| 亚洲人和日本人jizz| 久久亚洲AV无码精品色午夜麻| 亚洲裸男gv网站| 国产在线不卡免费播放| 毛片视频免费观看| 免费黄色福利视频| 亚洲色偷偷综合亚洲av78|