在JSP-Servlet開發中匯入事件驅動技術

來源:互聯網
上載者:User
js|servlet   JSP-SERVLET為WEB應用程式開發人員提供了一個優秀的平台。但是,現在國內大多數的基於JSP-SERVLET的開發都處在最基礎的狀態,代碼重用率低,開發效率低,無法適應大型、複雜的WEB開發要求。

首先,要實現事件驅動,必須在JSP-SERVLET開發中採用MVC技術。

M=Model(模型)
V=View(視圖)
C=Control(控制)

視圖(V)定義了使用者介面。模型(M)定義了抽象類別和邏輯。控制(C)則負責根據視圖發生的事件調用模型的邏輯完成業務處理。

一般

Model(模型)由普通的java類來實現。

View(視圖)由jsp來實現。

Control(控制)由servlet來實現。

視圖和模型是緊密關聯,又相互獨立的。

模型是視圖的抽象,必須包含一定的邏輯來處理視圖所表現的對象的事件。

同時對於相同的邏輯,視圖可以以各種方式表現。

例如,在web開發中,

[1] 對於一個代表“單選”抽象的SingleSelection類,在使用者的瀏覽器上可以顯示為Radio button, 也可以是單選下拉框,或者是其他任何的單選性質的控制項。

[2] 對於一個代表“提交”抽象的Submition類,在使用者的瀏覽器上可以顯示為Submit button, 也可以是超連結、圖片,甚至可以是可觸發JavaScript的submit()方法的任何控制項。

事件驅動對於MVC技術是極其重要的,主要由Control(控制)來實現。而JSP-SERVLET的實現本身就非常適合於編寫事件驅動的程式。

眾所周知,javax.servlet.http.HttpServlet類每次都調用

doPost(HttpServletRequest req, HttpServletResponse resp)

或者

doGet(HttpServletRequest req, HttpServletResponse resp)

方法來響應用戶端的submit操作。

Servlet響應的事件就是用戶端瀏覽器的submit操作。用戶端瀏覽器的submit事件觸發Servlet的特定事件處理方法,但是入口只有一個:javax.servlet.http.HttpServlet類的service(HttpServletRequest req, HttpServletResponse resp)方法。(具體到對於用戶端的操作的響應,則可能是doPost(HttpServletRequest req, HttpServletResponse resp)或者是doGet(HttpServletRequest req, HttpServletResponse resp)方法。

所以可以重寫這些方法來控制Servlet對submit事件的響應處理,調用不同的JSP,JAVA BEAN,甚至於EJB。

例:EventDrivenServlet繼承javax.servlet.http.HttpServlet,並且重寫doPost(HttpServletRequest req, HttpServletResponse resp)和doGet(HttpServletRequest req, HttpServletResponse resp)方法,令這2個方法都直接調用同一個方法,我們把這個方法命名為“act”??

void act(HttpServletRequest req, HttpServletResponse resp)

act方法應該根據req參數傳入的資訊,調用相應的類以及方法,最後將resp返回給用戶端。

act方法進行的處理必須包括如下幾點:

1) 解析req。

2) 根據上一步的解析結果初始化(或者更新)相應的類。

3) 調用相應的方法進行邏輯處理。

4) 將處理結果反映到resp裡。

5) 根據邏輯處理結果指定下一個顯示的頁面

6) forward到下一個頁面。

但是,act方法又是怎麼知道該調用哪一個類的哪一個方法,該遷移到哪一個畫面去的呢?

答案是傳遞給act方法一個訊息??Message。

Message類是訊息的抽象,應該定義成abstract的,可以是一個空類。從這個Message類派生出所有的具體的訊息類。所有的訊息類都必須從Message類繼承。

前面講過,畫面上(JSP)的每一個可submit的控制項在邏輯上都對應一個Submition,每一個Submition都和一個特定的訊息類相關聯。這樣,只要我們在Control層能夠截獲這些訊息類,並且解析這些訊息類攜帶的資訊,並將它們委派給相應的類的方法去處理,就可以實現事件驅動。

例:

畫面上有一個“登入”按鈕,它對應著一個Submition類,並且產生一個LoginMessage的訊息。LoginMessage繼承Message,並且加入了一個Hashtable成員變數,攜帶了使用者名稱和密碼的資訊。

畫面上還一個“變更密碼”按鈕,它對應著一個ChangePasswordSubmition類,並且產生一個ChangePasswordMessage的訊息。ChangePasswordMessage繼承Message,並且加入了一個Hashtable成員變數,攜帶了使用者名稱和密碼的資訊。

當Servlet響應這個submit時,可以根據傳來的訊息的類型和攜帶的資訊來委派處理。

具體實現時,我們應該重載EventDrivenServlet的act()方法,加入一個Message類的參數。

void act(HttpServletRequest req, HttpServletResponse resp,Message message)

如果message instanceof LoginMessage為true,那麼就將message造型成LoginMessage,並且將LoginMessage傳遞給相應的方法,處理完成後指定相應的畫面並發回用戶端。

如果message instanceof ChangePasswordMessage為true, 那麼就將message造型成ChangePasswordMessage,並且將ChangePasswordMessage傳遞給相應的方法,處理完成後指定相應的畫面並發回用戶端。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.