亚洲AV日韩AⅤ综合手机在线观看,激情婷婷久久综合色,欧美色五月婷婷久久,久久国产精品99久久人人澡

  • <abbr id="uk6uq"><abbr id="uk6uq"></abbr></abbr>
  • <tbody id="uk6uq"></tbody>
  • J2EE表現(xiàn)層設(shè)計思考核心

    時間:2024-08-31 14:11:49 J2EE培訓(xùn) 我要投稿
    • 相關(guān)推薦

    J2EE表現(xiàn)層設(shè)計思考核心

      J2EE表現(xiàn)層設(shè)計思考核心是什么?下面yjbys小編為大家分享最新J2EE表現(xiàn)層設(shè)計解讀,希望對大家學(xué)習(xí)J2EE有所幫助!

      設(shè)計表現(xiàn)層時需要考慮的幾個問題

      開發(fā)者在設(shè)計表現(xiàn)層時,可以使用不同的模型,這時需要考慮一些相關(guān)的設(shè)計問題。這些問題和模型關(guān)系的緊密程度也各有不同,它們可以影響系統(tǒng)的各個方面,包括有安全、數(shù)據(jù)完整性、可管理性和擴展性。雖然這些設(shè)計問題大部分都可以用模型的形式表示,但我們不打算這樣做,因為這樣更為抽象,我們選擇以非正式的文檔形式表示。我們只是根據(jù)不同的模型,將每個需要考慮的問題列出來。

      Session管理

      用戶Session指的是跨越一個客戶和服務(wù)器多個請求間的一個對話。我們將在以下部分根據(jù)用戶Session的概念討論這個問題。

      客戶端的Session狀態(tài)

      在客戶端保存Session的狀態(tài)指的是將Session的狀態(tài)串行化并且嵌入到返回給客戶的HTML頁面中。

      在客戶端保存Session的狀態(tài)有這以下的好處:

      . 它實現(xiàn)起來相對容易

      . 在保存少量的狀態(tài)信息時,它工作得很好

      此外,這個策略還消除了跨越多個服務(wù)器復(fù)制狀態(tài)的問題,例如多個服務(wù)器間實現(xiàn)負載均衡時就會遇到這種情況。

      在客戶端保存Session狀態(tài)通常有兩個方法HTML的隱藏字段和HTTP cookies我們將在下面討論這些策略。第三個策略則是在每個頁面的URL中嵌入Session狀態(tài)信息。

      雖然第三個方法比較少見,但它也有著其它兩個方法的許多限制。

      HTML的隱藏字段(HTML Hidden Fields)

      雖然這個方法實現(xiàn)起來相對容易,不過使用HTML隱藏字段在客戶端保存Session狀態(tài)仍然有著許多的缺點。這些缺點在保存大量的狀態(tài)時尤為突出。保存大量的狀態(tài)將會對性能有很大的影響。因為每次發(fā)出請求和響應(yīng)時,都需要在網(wǎng)絡(luò)中傳送這些狀態(tài)信息。

      此外,當(dāng)你利用隱藏的字段來保存Session狀態(tài)時,這些持久的狀態(tài)值只能是字符串值,因此所有的對象引用都必須被“字符串化”,而這些信息除非經(jīng)過特別的加密,否則都是以明文的形式顯示在HTML的源代碼中。

      HTTP Cookies

      與隱藏字段的方法一樣,使用HTTP Cookies的方式也是相對簡單的。不幸的是,這兩個方法有著許多相同的缺點。特別是,在保存大量的狀態(tài)信息時將會對性能產(chǎn)生很大的影響,因為在每次的請求和響應(yīng)時,都必須在網(wǎng)絡(luò)上傳送全部的Session狀態(tài)信息。

      在客戶端保存Session狀態(tài)時,我們也會遇到大小和類型的局限問題。cookie headers的大小是有限制的,這樣就限制了可以被持久保存的數(shù)據(jù)量,而且和隱藏字段的方法一樣,當(dāng)你使用cookies來保存Session狀態(tài)時,這些持久的狀態(tài)信息只能使用字符串值。

      在客戶端保存Session狀態(tài)會帶來的安全問題

      當(dāng)你在客戶端保存Session狀態(tài)時,你必須考慮到由此帶來的安全問題。如果你不想數(shù)據(jù)暴露給客戶端,你就需要一些方法來加密數(shù)據(jù),從而保證數(shù)據(jù)的安全。

      雖然在客戶端保存Session狀態(tài)相對容易實現(xiàn),不過它有著很多的缺點,這些都要我們花費時間去解決。對于需要處理大量數(shù)據(jù)的項目,特別是企業(yè)的系統(tǒng),使用這種方式是得不償失的。

      表現(xiàn)層的Session狀態(tài)

      當(dāng)Session狀態(tài)保存在服務(wù)器端時,它使用一個Session ID得到,并且會一直保持住,直到發(fā)生以下的情形:

      . 一個預(yù)定義的Session超時發(fā)生了

      . Session被手動設(shè)置為無效

      . 狀態(tài)由Session中移除

      要注意的是服務(wù)器關(guān)閉后,一些內(nèi)存中的Session管理機制可能不能恢復(fù)。

      很明顯,對于要保存大量Session狀態(tài)的應(yīng)用,將它們的Session狀態(tài)放在服務(wù)器是更好的。當(dāng)狀態(tài)被保存在服務(wù)器上時,你不會有客戶端Session管理的大小和類型限制。此外,還避免了由此帶來的安全問題,而且也不會遇到由于在每個請求間傳送Session狀態(tài)帶來的性能影響。

      使用該方式,你可以更加靈活地作處理,并且便于擴展和提高性能。

      如果你在服務(wù)器上保存Session狀態(tài),你必須要決定如何使該狀態(tài)信息被每個服務(wù)器得到,即你運行該應(yīng)用的服務(wù)器。如果群集的軟件是運行在負載均衡的硬件上,那么就要處理這個Session狀態(tài)的復(fù)制問題,這是一個多維的問題,不過,眾多的應(yīng)用服務(wù)器現(xiàn)在都提供了各種各樣的解決方案。也就是說,在應(yīng)用服務(wù)器的級別上有解決的方法。其中的一個方法是保證用戶只與一個服務(wù)器打交道,它在流量管理軟件上用得比較多,例如Resonate [Resonate]的軟件,在用戶的Session中,該用戶發(fā)出的每個請求都會被路由到同一個服務(wù)器處理。這種方式也被稱為server affinity。

      另一個可選的方式是在商業(yè)層或者資源層保存Session狀態(tài)。企業(yè)JavaBeans組件可用來在商業(yè)層保存Session的狀態(tài),而一個關(guān)系數(shù)據(jù)庫則可用在資源層。

      控制客戶

      有很多時候我們都要限制或者控制客戶端某些應(yīng)用資源。下面我們就來討論其中兩種這樣的情形。

      限制或者控制客戶的一個原因是防止一個視圖或者部分的視圖被一個客戶直接。這個問題會發(fā)生在以下情況,例如僅有注冊或者登陸后的用戶才可允許一個特別的視圖,或者是根據(jù)用戶的角色限制用戶部分的視圖。

      在描述過這個問題后,我們將討論第二種情況,它和控制應(yīng)用中一個用戶的流程有關(guān)。后者的討論和重復(fù)的form提交有關(guān),因為多次提交將會導(dǎo)致不必要的重復(fù)事務(wù)。

      控制視圖

      在一些情況下,資源被限制為完全不允許某些用戶。有幾個方法可以做到這一點。一個方法是加入應(yīng)用邏輯到處理控制器或者視圖的程序中,禁止某些用戶。另一個方案是設(shè)置運行時的系統(tǒng),對于一些資源,僅允許經(jīng)由另一個應(yīng)用資源內(nèi)部調(diào)用。在這種情形,對于這些資源的必須被通過另一個表現(xiàn)層的應(yīng)用資源進行,例如一個servlet控制器。對于這些受限制的資源不允許通過一個瀏覽器直接調(diào)用。

      處理這個問題的一個常見方法是使用一個控制器來作為該類控制的一個委托者。另一個常見的方式是在一個視圖中置入一個保護設(shè)置。我們這里主要討論基于視圖的控制策略。在考慮選擇何種方式來控制之前,我們首先來描述一下這些策略。

      在視圖中置入保護邏輯

      對于在一個視圖的處理中置入一個保護邏輯,有兩個常見的應(yīng)用。一個是防止整個的資源,而另一個是限制部分的資源。

      在每個視圖中包含一個All-or-Nothing保護

      在一些情況下,置入到視圖處理代碼中的邏輯以all-or-nothing的模式允許或者拒絕。也就是說,這個邏輯限制某個特別的用戶一個特別的視圖。通常這一類型的保護最好封裝到一個中央化的控制器中,這樣便于集中化管理。如果只有很少的頁面需要防護,那么可以使用這個策略。通常這個情形都是發(fā)生在一個非技術(shù)人員需要更新網(wǎng)站一小部分的靜態(tài)文件。如果客戶仍然需要登陸到網(wǎng)站來瀏覽這些頁面,那么只需要在每個頁面的頂部加入一個自定義的tag(標記)就可以做到控制。如3.1的例子所示。

      例子3.1 在每個視圖中包含一個All-or-Nothing保護

     。%@ taglib uri="/WEB-INF/corej2eetaglibrary.tld"
      prefix="corePatterns" %>
     。糲orePatterns:guard/>
     。糎TML>
      .
      .
      .
     。/HTML>

      給視圖的某些部分加入保護

      在其它情況下,置入到視圖處理代碼的邏輯可拒絕一個視圖的某些部分。這個策略可以和上面的all-or-nothing策略一起使用。為說明這一點,我們這里使用控制一個建筑物中的一個房間作類比。all-or-nothing的保護策略告訴用戶是否可以進入房間,而第二個保護策略則是告訴用戶在進入房間后,允許他們看到什么東西。以下就是一些你可以利用這個策略的例子。

      根據(jù)用戶的角色決定是否顯示視圖的某些部分

      根據(jù)用戶的角色,視圖的某部分可能不顯示。例如,一個經(jīng)理在收看管理信息時,他可以到其員工的子視圖,而作為一個員工,他只可以看到自己組織的信息,而不可以其它信息,如例子3.2所示。

      例子3.2 根據(jù)用戶的角色,部分的視圖不顯示

      <%@ taglib uri="/WEB-INF/corej2eetaglibrary.tld"
      prefix="corePatterns" %>
     。糎TML>
      <corePatterns:guard role="manager">
     。糱>This should be seen only by managers!</b>
     。糲orePatterns:guard/>
     。/HTML>

      This should be seen only by managers!

      根據(jù)系統(tǒng)的狀態(tài)或者錯誤情形不顯示部分的視圖

      根據(jù)系統(tǒng)的環(huán)境,顯示的規(guī)劃可以被修改。例如,如果用戶使用的是一個單CPU的硬件設(shè)備,那么使用多個CPU的部分設(shè)備就可以不顯示。

      根據(jù)配置控制資源

      要限制某個客戶直接一個特別的視圖,你可以配置表現(xiàn)層只有通過內(nèi)部的資源才可以到這些資源,例如一個使用RequestDispatcher的servlet控制器。此外,你還可以使用Web容器中內(nèi)置

      的安全技術(shù),根據(jù)servlet2.2或者以后的規(guī)范。安全限制被定義在稱為web.xml的配置描述文件中(deployment descriptor)。

      basic和form-based的認證方法在Servlet規(guī)范中也有描述。在此我們不打算重復(fù)這個規(guī)范,你可以到以下網(wǎng)址去查看當(dāng)前規(guī)范的細節(jié)(http://java.sun.com/products/servlet/)。

      你已經(jīng)明白了加入安全限制到你的應(yīng)用時會有什么用處,我們簡要討論了這個問題并且介紹了如何通過配置令它和all-or-nothing保護相關(guān)。最后,我們描述了一個簡單和常用的方法作為all-or-nothing保護,以限制一個資源的。

      通過安全限制保護資源

      應(yīng)用或許被配置在一個安全限制中,而這個安全限制允許使用編程的方法根據(jù)用戶的角色來控制。資源可以被某些角色的用戶,并且禁止其它的角色。另外,某個視圖的一部分也可以根據(jù)用戶的角色來限制。

    【J2EE表現(xiàn)層設(shè)計思考核心】相關(guān)文章:

    J2EE核心技術(shù)08-05

    J2EE的13種核心技術(shù)09-01

    J2EE架構(gòu)與設(shè)計培訓(xùn)08-30

    淺析躍層設(shè)計要點09-12

    企業(yè)核心競爭力的表現(xiàn)形式08-07

    J2EE設(shè)計模式圖書目錄06-17

    錯層餐廳如何裝修設(shè)計07-24

    設(shè)計素描表現(xiàn)方法09-28

    設(shè)計素描的表現(xiàn)方法08-12

    談?wù)勂矫嬖O(shè)計的核心-標志09-27