序
猜想
HTTP
HTML
User Agents
HTTP 請求/響應周期
Java語言和應用框架
JavaBeans
屬性文件和資源綁定
JavaServlet
介紹
Struts的歷史
MVC模式
Struts控制流程
創建模型組件
概述
JavaBean和作用域
ActionForm Bean
系統狀態Bean
商業邏輯Bean
創建視圖組件
概述
國際化信息
Forms 和 FormBeans的交互
其他表示層技術
創建控制(Controller)組件
概述
ActionServlet
ActionForm類
Action類
異常處理器
插件類
ActionMapping的實現
編寫Action Mappings
在頁面中使用ActionMapping
在ActionMapping中使用通配符
公共的Log 接口
配置應用
概述
Struts配置文件
為應用配置模塊
WEB應用部署描述符
序
猜想
本手冊適合於有創建Java Web 應用經驗的Web 開發人員
在開始學習Struts之前你應該了解如下的技術:
HTTP
HTML
User Agents
HTTP 請求/響應生命周期
Java語言和應用框架
JavaBeans
屬性文件和資源綁定
Java Servlets
Java Server Pages
JSP Tag Librariy
XML
HTTP
HTML
User Agents
WWW是基於超文本傳輸協議和超文本標識語言建立的
用戶代理
比如浏覽器
他們使用HTTP去請求一個文檔然後格式化顯示
HTTP 請求/響應周期
對於Web開發者來說
理解HTTP的請求和響應周期是很重要的
你要使用HTTP發送一個請求
然後服務器給你一個響應
當你創建WEB應用時
你需要返回一個響應對象來回應請求
Java語言和應用框架
Struts是用JAVA編寫的
JAVA是面向對象的語言
而Struts充分利用了面向對象的技術
除此而外JAVA支持線程
如果你很好的掌握了JAVA
特別是面向對象編程和線程
這將會有益於最有效的使用Struts和這個手冊
JavaBeans
象大多數JAVA應用一樣
大多數Struts對象都是JavaBean
遵循JavaBean設計模式使得Struts更容易被開發者和JAVA開發工具使用
盡管JavaBean的最初是用來開發可視元素的
但它對開發可重用組件也非常有益
反射和內省
反射是決定什麼樣的函數或域存在某對象中的方法
內省是反射的特殊形式
使用內省就可以知道哪些方法將會被其他對象使用(如getter
setter)
Struts框架使用內省來轉換HTTP參數到JAVABEAN的屬性中和把JAVABEAN中的屬性數據組裝到HTML的域
MAP
JAVABEAN把數據存在屬性中
JAVABEAN雖然是靈活而功能強的對象
但它並不是編程者存儲數據的唯一對象
另一個熟為人知的對象是java
util
Map
Map它是一個名字/值對的數據集合
它經常用來存儲動態數據
DynaBeans
DynaBeans集成了JAVABEAN 的擴展性和MAP的靈活性
編寫JAVABEAN要創建一個新類
並且要為每個屬性編寫方法
DynaBeans則將屬性放在XML中配置
在Struts應用中
你可以使用DynaBeans來描述你的HTML Form
這個策略可以避免編寫普通的JAVABEAN來存儲很簡單的屬性
屬性文件和資源綁定
JAVA應用包括WEB應用的配置經常使用屬性文件來完成
Struts的消息資源都是通過資源綁定和屬性文件實現的
JAVA資源綁定使用一個或多個屬性文件來實現應用的國際化
JavaServlet
由於JAVA是面向對象的語言
因此JAVA平台已經將HTTP轉換成對象的形式
這將會使JAVA 程序員關注於應用本身而不是HTTP
HTTP提供了一個標准的機制來擴展服務器的功能
我們稱之為CGI
服務器將請求發送到CGI程序
CGI程序則返回一個響應
同樣的任何JAVA服務器則會接收請求
然後轉發到Servlet
Servelt 是javax
servlet
http
HttpServlet的子類
每個Servlet必須完成四個方法
* public void init(ServletConfig config)
* public void doGet(HttpServletRequest request
HttpServletResponse response)
* public void doPost(HttpServletRequest request
HttpServletResponse response)
* public void destroy()
Struts提供了一個可用的Servlet
org
apache
struts
action
ActionServlet
作為一個Struts開發者
你只需要編寫對象供ActionServlet調用就行了
但是
理解Servlet並熟悉他在JAVA WEB應用中扮演的角色那是最好不過了
Servlets 和多線程
為了提高性能
Servlet設計程多線程
每個Servlet僅創建一個實例
每一個請求都傳遞到同一個對象
這將有利於Servlet容器充分的利用資源
因此doGet
doPos在編程時必須保證他是線程安全的
Servlet Context
ServletContext(javax
servlet
ServletContext)定義了Web 應用中Servlet的視圖
在Servlet中通過getServletConfig()可以訪問得到
在JSP中則通過隱式對象application得到
ServletContext提供了幾個對於創建Struts應用來說非常有用的幾個方法:
訪問WEB應用資源 Servlet通過getResource()
getResourceAsStream()可以訪問WEB應用中的靜態資源文件
Servlet Context屬性 Servlet上下文可以存儲JAVA對象到屬性中
這些屬性對整個WEB應用都可見
Servlet請求
Servlet請求就是javax
servlet
http
HttpServletRequest
通過它可以訪問HTTP請求的所有信息:
Cookies 通過getCookies()可以得到當前請求的所有cookie
HTTP頭 HTTP請求的頭可以通過對應的名字來訪問
你當然可以通過枚舉來列出所有的頭
參數 你可以通過參數來訪問HTTP請求的URL的參數或表單中的內容
請求特性 HTTP請求表單的提交方式(GET/POST)
用的是什麼協議(HTTP/HTTPS)
請求URI信息 通過getRequestURI()可以得到最初的請求URI
除此之外
我們還可以得到contextPath
servletPath
pathInfo
用戶信息 如果你正使用容器來進行安全管理
你可以得到一個Principal對象來代表當前用戶
並確認該用戶是否擁有某叫角色的權限
Servlet請求擁有請求級別的屬性
與前面提到的應用級別屬性類似
請求級別的屬性經常用來傳遞狀態信息到可視化組件(如JSP)
Servlet容器保證被Servlet處理的請求處於單線程內
因此你不必擔心在訪問request對象的屬性時會有多線程的問題
Servlet響應
Servlet的功能就是接收請求
然後生成相應的響應
這是通過調用javax
servlet
http
HttpServletResponse的方法實現的
設置頭 你可以設置包含在響應中的頭
最重要的頭就是Content
Type
它用來告訴客戶端內容的格式
比如:text/html代表html
text/xml代表XML
設置Cookies 你可以加入cookie到當前的響應中
發送錯誤響應 你可以使用sendError()發送一個HTTP錯誤編號
重定向到其他資源 你可以使用sendRedirect()定向到另外一個URL
使用Response API的一個最重要的原則就是:操作Header
Cookie的任何方法必須在第一次輸出緩沖區滿且發送到客戶端前調用
過濾
如果你的Servlet容器是基於Servlet規范
或更高
那麼你就可以使用javax
servlet
Filter來對請求和響應作些處理
許多filter聚合在一起
每一個filter都有機會來對請求和響應做處理
Struts
只需要Servlet規范
因此這些版本的Struts並不支持filter
Struts從
開始就需要Servlet規范
的容器了
Session
HTTP的一個關鍵特性就是無狀態
因此我們不知道某個請求是否是來自同一用戶的請求
這將會使跨請求的會話變得很艱難
為了解決這個問題
Servelet實現了一個javax
servlet
容器將采用Cookie或URL Rewriting來保證接鄰近的請求包含session id來標識該請求是同一個session
因此保存在session中的屬性可以被多個請求共享
為了不浪費資源
Session有一個可配置的超時時間設置
如果兩個請求間的時間差超過了超時時間間隔
那麼session中的數據會失效
你可以定義一個默認的超時時
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28032.html