Struts
學習隨筆
?
Struts
是基于
MVC
設計模式的框架技術,現在的流行使用是
struts1.1 and struts1.2,
使用開發框架可以更好地提高開發效率。
Struts
的工作流程
1.
????????
檢索和用戶請求匹配的
ActionMapping
實例,如果不存在,就返回用戶請求中路徑無效的信息。
2.
????????
如果
ActionForm
實例不存在,就創建一個
ActionForm
對象,把客戶提交的表單數據保存到
ActionForm
對象中。
3.
????????
根據配置信息決定是否需要表單驗證。如果需要驗證,就調用
ActionForm
的
validate()
方法。
4.
????????
如果
ActionForm
的
validate()
方法返回
null
或返回一個不包含
ActionMessage
的
ActionErrors
對象,就表示表單驗證成功。如果返回一個或多個
ActionMessage
的
ActionErrors
對象,就表示表單驗證失敗,此時
ActionServlet
將直接把請求轉發給包含用戶提交表單的
jsp
組件。在這種情況下,不會創建
Action
對象和調用
Action
的
execute()
方法。
5.
????????
ActionServlet
根據
ActionMapping
實例包含的映射信息決定將請求轉發給哪個
Action
。如果相應的
Action
實例不存在,就先創建這個實例,然后調用
Action
的
execute()
方法。
6.
????????
Action
的
execute()
方法返回一個
ActionForward
對象
,ActionServlet
再把客戶請求轉發給
ActionForward
對象指向的
jsp
組件
.
7.
????????
ActionForward
對象指向的
jsp
組件生成動態網頁,返回給客戶。
??????
如何用好
struts
框架技術呢?我們應該掌握如下的知識點:
?
????????
MVC
的兩種規范
?
????????
配置文件
(struts-config.xml,web.xml)
?
????????
ActionForm
類及其子類。
?
????????
ActionForward
類
?
????????
ActionServlet
類
?
????????
Action
類
?
????????
ActionMessages
類
?
????????
國際化的問題
?
????????
struts
驗證技術
?
????????
struts
標簽
?
????????
struts
擴展(略)
?
????????
struts
與
hibernate
結合使用
?
逐個擊破
?
MVC
的兩種規范
?
兩種
MVC
規范是
JSP Model1? and JSP Model2.
假設訪問我們分這么幾部分:瀏覽器,
WEB
服務器,應用服務器和數據庫,兩者不同的是
JSP Model1 WEB
服務器里面只有
JSP
頁面和
JavaBean
,
JSP
既充當
V
,又充當
C
的角色。而
JSP Model2
的
WEB
服務器里有
JSP
、
JavaBean
和
Servlet
。
配置文件
(struts-config.xml,web.xml)
?
web.xml
文件。
配置
ActionServlet(<servlet>,<servlet-mapping>)
初始化
ActionServlet
的初始化參數
(<init-param>
也就是加載
struts-config.xml)
配置歡迎文件
(<welcome-file-list>)
配置錯誤處理
<error-page>
?????? <error-code>404</error-code>
?????? <location>/common/404.jsp</location>
</error-page>
配置
struts
標簽庫
(<tablib>)
?
struts-config.xml
配置數據庫連接
(<data-sources>)
配置實體
(<form-beans>)
配置全局的異常處理
(<globel-exceptions>)
配置全局的轉發關系
(<globel-forwards>)
配置映射
(<action-mapping>)
配置本地化文件
(<message-resources>)
實際是為了完成國際化。
配置插件
(<plug-in>)(
略
)
?
ActionForm
類及其子類。
?
DTO
數據傳輸對象,生命周期有兩種
request and session,ActionForm
有
validate()
和
reset()
方法,主要說
reset()
方法,針對于
request
級的
ActionForm
類是沒有很大含義地,因為它只會被調用一次,里面封裝的數據也只是一次使用。主要是對于
session
級的作用是很大的,因為它涉及到多次用到。
DynaActionForm
是
ActionForm
子類
,
有
initialize()
方法
,
實現
DynaActionForm
的方法
:
<form-bean? name=”loginForm”? type=”org.apache.struts.action.DynaActionForm”>
?????? <form-property? initial=”alex”? name=”userName”? type=”java.lang.String”/>
</form-bean>
兩種
ActionForm
做比較
.
初始化:
DynaActionForm
是通過實現化,然后覆蓋其父類的方法
reset()
在這個方法中
調用
initilize()
進行初始化。
驗證:
DynaActionForm
采用動態的驗證方法,在(
struts
驗證技術中會說到)
使用:
DynaActionForm
的所有屬性保存在一個
Map
類中
,
通過
get()
,
set()
方法調用,
??????
?
如:
String email=(String)form.get(“email”);
?????????????
? form.set(“email”,”cssseek@163.com”);
?
ActionForward
類
?
(
略
)
ActionServlet
類
?
屬于
struts
控制器組件,包括:
ActionServlet,RequestProcessor and Action.
組件完成的任務:
接收用戶請求、根據用戶請求,調用合適的模型組件來執行相應的業務邏輯、獲取業務邏輯執行結果、根據當前狀態以及業務邏輯執行結果,選擇合適的視圖組件返回給用戶。
Struts
采用
ActionServlet
和
RequestProcessor
組件進行集中控制,并采用
Action
組件來處理單項業務。
ActionServlet
類在應用生命周期中只創建實例一次。
?
Action
類
?
Action
類是用戶請求和業務邏輯之間的橋梁。在
RequestProcessor
類預處理請求時,在創建了
Action
的實例后,就調用自身的
processActionPerform()
方法,該方法再調用
Action
類的
execute()
方法。
ActionMessages
類
?
ActionError
類是
ActionMessage
的子類,
struts1.2
放棄
ActionError.
國際化的問題
?
application_zh.properties
保存一些信息。
如
:error.loginFail=”
登錄失敗,請輸入正確的用戶名和密碼
”
ActionMessages errors=new ActionMessages();
Errors.add(“loginfail”,new ActionMessage(“error.loginFail”));
關于亂碼的問題:
1.
?
如果一些網站服務器例如
Tomcat 如果遇到中文亂碼問題,可以修改conf目錄下的server.xml
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100" debug="0"connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/>
URIENcoding 設成GBK或GB2312
?
2.?
表單中或傳遞字符串:本來輸入的漢字是正常的,但是提交后再顯示出來是亂碼,因為提交的一般是 ISO8859編碼,所以顯示的時候要轉成GB2312編碼: String S=new String(rs.getString("news").getBytes("gb2312"),"ISO8859_1");
//rs為待轉換的字符串
然后使用S字符串的值就可以了
?
3.?
?有的服務器端的語言環境如果設成簡體中文的也可以解決此類問題
?
4.?
?插入數據庫中的字符是亂碼
看看數據庫中支持的是何種編碼方式,用類似2中的方式作一下轉換即可。
?
5.?
總之,用jsp開發,碰到亂碼,你得分析是讀的時候發生亂碼,還是寫的時候發生亂碼,用2中的轉換,基本就能解決問題,有些時候寫的時候做一次轉換,例如:
String S=new String(rs.getString("news").getBytes("gb2312"),"ISO8859_1");
//讀的時候在轉換回來
String S=new String(rs.getString("news").getBytes("ISO8859_1"),"GB2312");
或者把ISO8859-1和GB2312 的位置換一下,自己多試試,就能找到解決問題的辦法。
?
struts
驗證技術
?
前面已講在
ActionForm
中
validate()
驗證。這里主要說在配置中驗證技術。所需文件
validation.xml? validator-rules.xml
優點:當相同的驗證邏輯時,可提高代碼的可重用性
struts
標簽
?
struts-bean.tld? struts-form.tld? struts-html.tld? struts-logic.tld? struts-nested.tld? struts-template.tld? struts-tiles.tld
七個標簽文件。
struts HTML
標簽
基本的標記
struts Bean
標簽
用于定義輸入輸出
javaBean
struts Login
標簽
邏輯運算、循環遍歷
struts Nested
標簽
定義
javaBean
嵌套關系。
?
?
?
?
?
?
?????????????
?????????????
?????????????
?????????????
?????????????
?????????????
?????????????
??????
曹水生
?????????????
?????????????
?????????????
?????????????
?????????????
?????????????
??????
?????? 2005
.
11
.
11
隨筆
posted on 2006-03-22 20:29
cssseek 閱讀(566)
評論(0) 編輯 收藏