亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

J2EE培訓

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

時間:2024-08-01 21:11:15 J2EE培訓 我要投稿
  • 相關推薦

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

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

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

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

  Session管理

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

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

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

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

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

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

  此外,這個策略還消除了跨越多個服務器復制狀態(tài)的問題,例如多個服務器間實現(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ā)出請求和響應時,都需要在網絡中傳送這些狀態(tài)信息。

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

  HTTP Cookies

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

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

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

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

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

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

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

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

  . Session被手動設置為無效

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

  要注意的是服務器關閉后,一些內存中的Session管理機制可能不能恢復。

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

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

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

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

  控制客戶

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

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

  在描述過這個問題后,我們將討論第二種情況,它和控制應用中一個用戶的流程有關。后者的討論和重復的form提交有關,因為多次提交將會導致不必要的重復事務。

  控制視圖

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

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

  在視圖中置入保護邏輯

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

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

  在一些情況下,置入到視圖處理代碼中的邏輯以all-or-nothing的模式允許或者拒絕。也就是說,這個邏輯限制某個特別的用戶一個特別的視圖。通常這一類型的保護最好封裝到一個中央化的控制器中,這樣便于集中化管理。如果只有很少的頁面需要防護,那么可以使用這個策略。通常這個情形都是發(fā)生在一個非技術人員需要更新網站一小部分的靜態(tài)文件。如果客戶仍然需要登陸到網站來瀏覽這些頁面,那么只需要在每個頁面的頂部加入一個自定義的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的保護策略告訴用戶是否可以進入房間,而第二個保護策略則是告訴用戶在進入房間后,允許他們看到什么東西。以下就是一些你可以利用這個策略的例子。

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

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

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

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

  This should be seen only by managers!

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

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

  根據配置控制資源

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

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

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

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

  通過安全限制保護資源

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

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

工程設計企業(yè)核心競爭力的提升04-06

J2EE經典面試試題及答案09-06

J2EE筆試面試題及答案09-06

核心素養(yǎng)與素質教育02-03

資本運營的核心是什么08-04

二層組播的配置09-26

企業(yè)核心競爭力的含義03-15

大學英語常用翻譯核心句型02-04

企業(yè)的核心競爭力分析02-07

企業(yè)核心競爭力的分析03-07