首頁 >Java >java教程 >Struts使用者與開髮指南(前言之二)

Struts使用者與開髮指南(前言之二)

黄舟
黄舟原創
2016-12-17 10:55:141087瀏覽

 0.6 屬性(PRoperties)檔案和資源綁定(Resourse Bundles)
  很多java應用程式(包括Web應用程式在內)經常透過 屬性檔案進行一些設定。屬性檔是Struts框架用來提供應用程式訊息資源資源綁定的基礎所在。
    關於屬性文件更多,請參考:
  
  .The Java Tutorial中的Using Properties to Manage Program Attributes
  支持。 Struts從一建立開始就對應用程式的在地化有很好的支援。
  
  關於在地化和資源綁定的更多,請參考:
  
  .The Java Tutorial 中的About the ResourceBundle Java T〟〜、 let平台就把HTTP強製造型(或構造)為物件導向的形式。這個策略使得Java開發人員省下更多的時間去處理自己的應用程式的功能上,而不是放在HTTP的機制處理上。
  
  HTTP提供了一套擴充伺服器的基本機制,即公共網關介面(Common Gateway Interface,CGI)。伺服器可以傳遞一個請求給CGI程序,然後CGI程序回傳一個回應。同樣,一個Java伺服器傳遞一個請求給一個Servlet容器,容器可以對請求作一些處理,也可以把這個請求直接回還給HTTP伺服器,容器檢查它的Servlet列表來決定是否要對這個請求進行處理,假如請求註冊了一個Servlert,那麼容器就把這個請求轉交給這個Servlet。
  
  當一個請求進入時,容器檢查該請求是否註冊​​了Servlet,假如找到一個匹配的Servlet,容器就把這個請求傳給這個Servlet,假如沒有,請求就被返還給HTTP伺服器。
  
  容器的職責就是治理Servlet的生命週期,創建Servlet,呼叫Servlet,最後釋放Servlet。
  
  一般情況下一個Servlet是[javax.servlet.http.HttpServlet]的一個子類,一個Servlet必須實作容器需要呼叫的四個方法:
  let。ServSamp.public void次被建立時和執行所有請求之前Servlet容器呼叫這個方法;
  .public void doGet(HttpServletRequest request,HttpServletResponse response)此方法用於處理一個使用HTTP GET 協定的請求,並產生一個對應的動態回應; public void doPost(HttpServletRequest request HttpServletResponse response)此方法用於處理一個使用HTTP POST協定的請求,並產生一個對應的動態回應;
  .public void destroy() 當Servlet服務時暫停這個實例服務時,當容器呼叫這個實例時,當容器時諸如暫停這個實例服務時,當容器時調用這個實例時,當容器時沒有調用這個實例服務時,諸如活動時中止Web應用程式正在被undeploy或當整個容器被shut down時;
  
  Struts框架已為我們的應用程式提供一個現成Servlet[org.apache.struts.action.ActionServlet]。身為一個Struts應用程式開發人員,在使用Struts框架的ActionServlet實例的同時,了解Servlet的基礎知識和明白它在Web應用程式中所扮演的角色也是相當重要。
  
  關於Servlet的更多知識,請參考:
  
  .java.sun.com中的The Java Servlet Technology;
  .java.sun.com中的The Java Servlet Technology;
  .java.sun.com中的The Java Servlet Technology;
  .java.sun.com的的Java Servlet Technology;
  .The Java Web Service Tutorial的Web applications;
  
  0.7.1 Servlet和Thread
  『  》容器。一個特定的Servlet只能建立一個實例,透過同一個物件為註冊了這個Servlet的每個請求服務。這個策略可以讓容器充分利用系統資源,同時也必須考慮Servlet的doGet和doPost方法編碼的執行緒安全問題。
  
  關於Servlet與執行緒安全的更多資料,請參考:
  
  .The Java Web Service Tutorial中的Controlling Concurrent access to Shared Resourceshttp://javasun.com/webservices/t.com/doc Servlets5.Html#64386;
  
  0.7.2 Servlet上下文(Context)
  
  ServletContext介面[javax.servlet.ServletContext]所提供的上下文Servlet可以透過getServletConfig()方法訪問,而jsp頁面可以透過隱含變數application變數獲得。 Servlet上下文提供的幾個API在創建Struts Web應用程式時是相當有用的。
  
  .存取Web應用程式資源:Servlet可以透過getResource()和getResourceAsStream()方法存取Web應用程式內的靜態資源檔案;
.Servlet上下文屬性:上下文可以用來儲存Java對象,透過字串值的key來識別對象,這些屬性對整個Web應用程式都是全域的,Servlet可以透過getAttribute(),getAttributeNames(),removeAtrribute()和setAttribute()方法進行存取。對JSP頁面來說,Servlet上下文屬性相當於「應用程式作用域Bean」;
  
  關於Servlet上下文的更多信息,請參考:
  
  .The Java Web Services Tutorial中的Accessing the Webtext http://text java.sun.com/webservices/docs/1.0/tutorial/doc/Servlets10.html#64724;
  
  0.7.3 Servlet請求
  
  0.7.3 Servlet請求
  
  貝servlet.http.HttpServletRequest]。這個請求介面提供了一套存取包含在底層HTTP請求內的所有資訊的物件導向機制,包含:
  
  .Cookie:透過getCookie()方法取得包含在請求中的有效Cookie集;
  .頭:可以透過包含在請求中的有效Cookie集;
  。名稱存取包含在請求中的HTTP頭。你可以列舉包含的所有的HTTP頭的名稱;
  .參數:請求參數,可以透過名稱存取包含在URL的查詢字串中(doGet)或包含在請求內容中(doPost)的請求參數;
  .請求特徵:輸入HTTP請求的一些其他特徵,諸如GET或POST方法使用的協議規格("http" 或"https"),等等;
  .請求URI資訊:透過getRequestURI()方法可以獲得原始的請求URL 。另外,Servlet容器把請求URL解析為一些可以單獨存取的組成部分(contextPath、 servletPath和pathInfo);
  .用戶資訊:假如你使用了用戶治理的安全,那麼你就可以找到一個已認證用戶名,獲得一個代表目前使用者的Principal對象,還有目前使用者是否被授權為一個特定角色;
  
  另外,Servlet請求也支援請求屬性(在JSP中,就是請求作用域Bean),類似前面講到的Servlet上下文屬性。請求屬性常用於業務邏輯層和視圖層之間狀態資訊通信,業務邏輯層產生這些狀態訊息,視圖層使用這些資訊產生相應的回應。
  
  Servlet容器會確保一個特定的請求被一個單獨線程的Servlet處理,所以你就不必擔心在訪問Servlet請求的屬性時有關線程安全的問題。
  
  關於Servlet請求的更多,請參考:
  
  .The Java Web Tutorial中的Getting Information from Requestshttp://java.sun.com/webservices/docs/1.03/2721.03 月;
  
  0.7.4 Servlet回應
  
  一個Servlet的主要目的就是處理一個輸入的Servlet請求[javax.servlet.http.HttpServletRequest],並產生對應的回應。產生回應的過程是透過呼叫Servlet回應介面[javax.servlet.http.HttpServletResponse]對應的方法來完成的,可用的方法如下:
  
  .設定HTTP頭:你可以設定包含在回應中的HTTP頭資訊。最重要的HTTP頭資訊就是Content-Type,它告訴你的客戶端包含在回應體中資訊是哪種類型的,一般情況下,設為text/html類型就是HTML頁面,或設為text/xml類型就是XML文檔;
  .設定Cookies:你可以向當前的回應中增加Cookie;
  .發送錯誤回應:你可以使用sendErro()發送一個HTTP錯誤狀態資訊(代替一般的頁面內容);
   .其他資源:你可以使用sendRedirect()方法重新導向客戶端到你指定的其他URL資源上去;
  
  使用Servlet回應API的一個重要原則就是呼叫維護頭資訊和Cookies所有方法都必須在快取的全部回應內容第一次被更新給客戶端之前完成。原因是因為這些訊息都是作為HTTP回應最開始部分被傳遞的,因此試圖在頭訊息已被送出之後再加入頭訊息,必然是徒勞無功的。
  
  使用Model 2模式的應用程式的表現層,你可能不會直接使用Servlet 回應APIs來產生回應。一般是使用JSP頁面來完成,在Servlet容器中JSP頁面將被JSP編譯器轉換為Servlet,由這個JSP Servlet產生回應,其中可能包含一些JSP標籤產生的動態資訊。
  
  其他的表現系統,諸如Struts工具Velocity框架,可能把生成響應的任務代理給一個專門的Servlet來完成,但是原理是相同的。你建立一個模板,然後動態的回應由模板動態產生。
  
  關於Servlet回應的更多,請參考:
  
  .The Java Web Tutorial中的ConstrUCting Responseshttp://java.sun.com/vls/docs/1.0/tuialting Responseshttp://java.sun.com/vls/docs/1.0/36/2/1375375357; 0.7.5 過濾器(Filtering)
  🎜  假如你使用2.3版或更新規格的Servlet容器(如Tomcat4.x),你可以使用新的過濾器APIs[javax.servlet.Filter]組合一些元件來處理請求和產生回應。過濾器其實是一個過濾器鏈的集合,每個過濾器都可以處理請求和產生回應,然後把處理權交給下一個過濾器,最後呼叫Servlet。
  
  Struts 1.x系列(1.0,1.1版本等)僅支援2.2版本或更早的Servlet規範的Servlet容器,所以Struts本身並沒有使用過濾器。下一代的Struts(2.x系列)是基於Servlet2.3或更新規範的。 Struts 2.x版可能會使用到過濾器。
    關於過濾器更多,請參考:
  
  .Filtering Requests and Responseshttp://java.sun.com/webf.會話( session 

 以上是Struts使用者與開髮指南(前言之二)的內容,更多相關文章請關注PHP中文網(www.php.cn)!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn