屬性(Properties)文件和資源綁定(Resourse Bundles) 很多Java應用程序(包括Web應用程序在內)經常通過 屬性文件進行一些配置
屬性文件是Struts框架用於給應用程序提供消息資源資源綁定的基礎所在
關於屬性文件更多
請參考
The Java Tutorial中的Using Properties to Manage Program Attributes
Java資源綁定是根據用戶 區域(Locale)通過一個或多個屬性文件為用戶提供國際化支持
Struts從一建立開始就對應用程序的本地化有很好的支持
關於本地化和資源綁定的更多
請參考
The Java Tutorial 中的About the ResourceBundle Class
Java Servlet 由於Java是一種面向對象的編程語言
所以Java Servlet平台就把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必須實現容器需要調用的四個方法
public void init(ServletConfig config)
當Servlet實例第一次被創建時和執行所有請求之前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的更多知識
請參考
中的The Java Servlet Technology
中的The Servlet
and
Specifications
The Java Web Service Tutorial的Java Servlet Technology
The Java Web Service Tutorial的Web Applications
Servlet和Thread
為了提高性能
容器支持多線程Servlet
一個具體的Servlet只能創建一個實例
通過同一個對象為注冊了這個Servlet的每個請求服務
這一個策略可以使容器充分利用系統資源
與此同時也就必須考慮Servlet的doGet和doPost方法編碼的線程安全問題
關於Servlet與線程安全的更多資料
請參考
The Java Web Service Tutorial中的Controlling Concurrent Access to Shared Resources#
Servlet上下文(Context)
ServletContext接口[javax
servlet
ServletContext]提供正在運行的Servlet所處的Web應用程序的上下文(或環境)的視圖
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 Web Context #
Servlet請求
每個Servlet處理的請求用一個Java接口代表
一般是HttpServletRequest接口 [javax
servlet
http
HttpServletRequest]
這個請求接口提供了一套訪問包含在底層HTTP請求內的所有信息的面向對象機制
包含
Cookie
通過getCookie()方法獲得包含在請求中的有效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 Requests#
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
模式的應用程序的表現層
你可能不直接使用Servlet 響應APIs來生成響應
一般是使用JSP頁面來完成
在Servlet容器中JSP頁面將被JSP編譯器轉換為Servlet
由這個JSP Servlet生成響應
其中可能包含一些JSP標簽生成的動態信息
其他的表現系統
諸如Struts工具Velocity框架
可能把生成響應的任務代理給一個專門的Servlet來完成
但是原理是相同的
你創建一個模板
然後動態的響應由模板動態生成
關於Servlet響應的更多
請參考
The Java Web Tutorial中的Constructing Responses#
過濾器(Filtering)
如果你使用
版或更新規范的Servlet容器(如Tomcat
x)
你可以使用新的過濾器APIs[javax
servlet
Filter]組合一些組件來處理請求和生成響應
過濾器其實是一個過濾器鏈的集合
每個過濾器都可以處理請求和生成響應
然後把處理權交給下一個過濾器
最後調用Servlet
Struts
x系列(
版本等)僅支持
版本或更早的Servlet規范的Servlet容器
所以Struts自身並沒有使用過濾器
下一代的Struts(
x系列)是基於Servlet
或更新規范的
Struts
x版可能會使用到過濾器
關於過濾器更多
請參考
Filtering Requests and Responses#
會話(Session
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28078.html