對一個星期的 Struts1 進行筆記總結:
1 , what--> 什麼是 struts
struts 實質上就是一個 mvc 框架,用於 java web 的應用開發
2 , why--> 爲什麼要用 struts
1 ,是一種開源軟件
2 ,是 mvc 模式的一種很好的體現
3 ,提供了強大的自定義標籤庫( taglib )
4 ,支持國際化
5 ,擁有頁面導航
6 ,提供 Exception 處理機制
7 ,數據庫連接池管理
3how-->struts 的工作流程
1 讀取配置 -- 讀取 struts-config.xml 的配置信息,並把信息存放到各種配置對象
2 發送請求 --Actionservlet 接收客戶的請求,到 ActionMapping 檢索和客戶請求相匹配的路徑
3 填充 form-- 將客戶端提交的表單信息保存到 ActionForm ,根據配置信息決定是否需要表單驗證
4 派發請求 -- 會根據 ActionMapping 的路徑進行發送請求到某個 Action 類
5 處理業務 -- 調用 execute() 方法處理業務邏輯
6 返回響應 -- 再把客戶的請求轉發給 ActionForward 對象,指向 jsp 文件
7 處理響應 --jsp 組件生成動態網頁,返回給客戶端
4struts 的 7 大組件( 6 大核心類)
1ActionServlet :主控制器
2Action :完成業務邏輯
3ActionForm :將客戶提交的表單數據存儲起來
4ActionMapping :幫助 ActiongServlet 將請求的 url 映射到相對應的操作類
5ActionForward :用於頁面的轉向
6ActionError :用來存儲和回收錯誤信息
7struts 標籤庫: 可以減輕開發顯示層次的工作
5 Struts1有哪些常用的標籤庫?
1、HTML標籤庫:這個標籤庫的大部分標籤和HTML中的標籤一一對應的。html標籤庫的目的是將jsp頁面和Action通過ActionForm連接起來。
2、Bean標籤庫:Bean標籤庫中的定製標籤主要用來向客戶端輸出文本信息。一般我們會用<bean:write name="classes"
property="className" />
3、Logic標籤庫:進行邏輯判斷和循環操作.一般我們會用<logic:iterate
id="classes" name="list"
type="com.lxitedu.classes.pojo.Classes">id與Bean中bean:wirte 對應的name 必須是相同的。
4、Nested標籤庫:這個標籤庫中的標籤有來顯示form或對象中的“nested”屬性。
5、Tiles標籤庫:這個標籤庫的標籤允許我們爲視圖層建立佈局。
struts 標記庫由四類標記組成:
1(bean) Bean 標記:用來在JSP 頁中管理bean
<bean:message>
<bean:write> filter="false" 顯示含html 標籤的 輸出int 類型的時候加上format 屬性 format="#"
<bean:define>
2(logic) 邏輯標記:用來在JSP 頁中控制流程
logic:iterate 迭代標籤
<logic:notEmpty name="map">
<logic:iterate name="map" id="element">
<bean:write name="element" property="value"/><br>
</logic:iterate>
</logic:notEmpty>
logic:present logic:notPresent 作用域是否存在
<logic:present name="strTable">
<bean:write name="strTable" filter="false"/>
</logic:present>
logic:empty logic:notEmpty 集合元素爲空
logic:equals logic:notEquals
<logic:equal name="onlybean" property="name" value="xxx">
等於 xxx
</logic:equal >
<logic:notEqual name="onlybean" property="name" value="xxx">
<bean:write name="onlybean" property="name"/>
</logic:notEqual >
3(html) HTML 標記:用來生成HTML 標記,在表單中顯示數據,使用會話ID 對URL 進行編程
html:form html:text html:radio html:checkbox html:select html:option html:submit.....
<html:errors /> 顯示所有錯
<html:errors property=" 屬性名"/> 顯示對應的屬性錯誤
4(template) 模板標記:使用動態模板構造普通格式的頁面
6國際化 步驟
1建立中英文的資源文件,並配置好鍵值對
2在jsp頁面動態導入I18n文件,
3在i18n文件進行判斷
4在jsp頁面用<bean:message key="鍵值">
7全局轉發與局部轉發
<global-forwards>
<forward name="xxx" path="/global.jsp"></forward>
<forward name="success" path="/uuu.jsp"></forward>
</global-forwards>
全局轉發 所有的action共用 局部轉發 自己的action用 當兩者重名時,優先選擇局部轉發
8全局異常與局部異常(附件 struts1.x中的異常處理.txt)
<global-exceptions>
<exception key="資源文件中的key" type="包名.類名(如java.lang.ArithmeticException") path="/error.jsp"></exception>
</global-exceptions>
在error.jsp頁面 <html:errors/>獲取異常信息
全局異常 所有的action共用 局部異常 自己的action用 當兩者重名時,優先選擇局部異常
9 資源文件的使用(附件 資源文件設置.txt)
默認情況下,Struts默認的資源文件爲ApplicationResources.properties文件。
在src目錄下建立一個properties文件 一般爲ApplicationResource.properties 裏面寫着鍵值對信息
如
aaa=111
bbb=222
ccc=333
在 struts-config.xml中配置使用資源文件 與<action-mappings>同級別,一般在<action-mappings>後,
<message-resources parameter="文件名(不需要後綴名)"/> 如上的配置爲<message-resources parameter="ApplicationResource"/>
如果該資源文件不在src目錄下,而在其他包名下,則應加上包名,假設ApplicationResource.properties在com包下,則配置修改爲
<message-resources parameter="com/ApplicationResource"/>
在jsp頁面上通過bean標記 可輸出資源文件的內容
<bean:message key="aaa"/>
在頁面上將顯示111
10ActionError與ActionMessage
actionError 1.1版本 1.2版本推出actionMessage actionMessage是actionError的父類
actionError從語義上一般是指錯誤信息 actionMessage指的是一般信息
ActionError類與ActionErrors類
ActionError類從不獨立進行錯誤處理,它們總是被存儲在ActionErrors對象中。ActionErrors對象保存ActionError類的集合以及它們特定的屬性值,我們可以使用自己定義的屬性值,或是使用ActionErrors.GLOBAL_ERROR.
如下使用
ActionErrors errors = new ActionErrors();
ActionError error = new ActionError("資源文件中的key值",“要傳遞進去的參數值(一個或多個(字符串數組))");
errors.add(ActionErrors.GLOBAL_ERROR,error);//或者使用
errors.add("屬性名",error )
saveErrors(req,errors);
在頁面上通過
<html:errors /> 顯示所有錯誤
<html:errors property="屬性名"/> 顯示對應的屬性錯誤
ActionError類有兩個構造方法 分別有一個參數和兩個參數的
一個參數的 參數就是資源文件中的鍵值
兩個參數的 第一個參數是資源文件中的鍵值,第2個參數是我們可以傳進資源文件中的參數值
ActionMeaaage類與ActionMeaaages類
<html:messages id="aaa" property="屬性名" message="true">
<bean:write name="aaa"/>
</html:messages>
Action 是單例的,不是線程安全的
每當有一次用戶的請求, ActionFrom 就會被創建一次
18 struts缺點:
(1)struts的配置和結構過於複雜。
(2)因爲actionServlet依賴於web容器,所以測試不太方便。
(3)Struts1的Action類是單例模式,必須設計成線程安全的。
19 struts1的客戶端驗證於服務端驗證的區別?
答案:Struts中客戶端驗證跟服務器端驗證有區別:客戶端驗證直接寫一個action文件便可實現,而服務器端驗證必須通過客戶端程序去調用服務器端相 應的 WebServices,實現業務邏輯. 它們的本質區別是,就是客戶端數據校驗是在客戶端上進行的,而服務器端校驗是在服務器上進行的,在速度上客戶端要快很多,但也有缺陷,就是當有黑客攻擊的時候,他完全可以繞過客戶端直接和服務器交互。
20關於Struts框架中的注意點
1.do請求後綴可以被改變
2.action類必須繼承Action
3.execute方法是struts會自動調用的方法,不能隨意修改
4.execute方法中的form是struts自動創建並建立的聯繫
5.form類必須繼承ActionForm
6.頁面中的html標記中的property必須和form
java類中的屬性相對應
7.form
java類中的屬性名必須配置setter和getter方法,而這些方法都是自動被調用的
8.頁面中的<html:form
action="/login">action的值的映射必須在struts-config.xml文件中存在
9.標籤中的聲明是必須的,但是前綴的名稱是可以修改的
10.頁面中的標籤引用uri="http://struts.apache.org/tags-html",uri
的值是不能任意改變的