網站struts.apache.org
實踐步驟:
1 搭建環境
(1)導入jar包
使用其中相關的類(可將所有jar全部導入)
(2)建立一個配置文件:struts-config.xml
作用:方便struts用戶使用
位置:一般放在WEB-INF下
(3)配置web.xml
注冊struts中心控制器-----ActionServlet
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>()Navigate下Open Type輸入actionServlet復制目錄
<init-param>//讀初始化文件的信息
<param-name>config</param-name>//參數名
<param-value>/WEB-INF/struts-config.xml</param-value>//文件名
</init-param>
<load-on-startup>0</load-on-startup>//服務啟起就實例化,0最早
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>//對所有的do請求都作處理
</servlet-mapping>
注意事項:
struts配置文件的位置
預先加載控制器
------------------------------------------------------------------
2 建立ActionForm
(1)建一個Bean類,繼承org.apache.struts.action.ActionForm
(2)注冊,修改配置文件struts-config.xml
<form-bean>
<form-beans>
<form-bean name="變理名" type="類全名"/>
</form-beans>
意注:struts-config.xml文件中<form-beans>和<action-mappings>的順序不能變,有DTD約束規定。
------------------------------------------------------------
3 建立Action
(1)建立一個類,繼承org.apache.struts.action.Action。重寫execute方法
需要強制轉型
LoginFrom lof=(LoginFrom)form;
調用其它模塊
跳轉(根據關鍵字,關鍵字參照該action中forward標簽中的name屬性)
mapping.findForward("name屬性");
(2)注冊,修改配置文件struts-config.xml
<action>
<action-mappings>
<action path="指明調用者(JSP)能通過中心控制器ActionServlet找到該Action"
type="指明該action類全名"
name="該action引用的form的名稱">
<forward name="loginSuccess" path="index.jsp"></forward>
</action>
</action-mappings>
4 頁面訪問
<form action="<%=request.getContextPath()%>/login.do">
-------------------------------------------------------------------
Struts framework的工作原理工科

1 讀敢配置 (初始化ModuleConfig對象)
Struts框架總控制器(ActionServlet)是一個Servlet,在web.xml中配置成自動啟動的Servlet。
讀取配置文件(struts-config.xml)的配置信息,為不同的Struts模塊初始化相應的ModuleConfig
對名:ActionConfig,
ControlConfig,
FormBeanConfig,
MessageResourcesConfig
2 發送請求
請求上傳WEB服務器(處理.do的請求)
3 填充FORM(實例化,復位,填充數據,校驗,保存)
(*.do請求)從ActionConfig中找出對應該請求的Action子類,如沒有對應的Action,控制器直接轉發給
JSP或靜態頁面。如有對應的Action且這個Action有一個相應的ActionForm.
ActionForm被實例化并用http請求的數據填充其屬性,并且保存在ServletContext中(request或session中),
這樣它們就可以被其它Action對象或者JSP調用。
4 派發請求
控制器根據配置信息ActionConfig將請求派發到具體的Action,相應的FormBean一并傳給這個Action的execute()方法.
5 處理業務
Action一般只包含一個execute方法,它負責執行相應的業務邏輯(調用其它業務模塊).完畢返回一個ActionForward對象,
控制器通過該ActionForward對象來進行轉發工作
6 返回響應
Action根據業務處理的不同結果返回一個目標響應對象給總控制器,該目標響應對象對應一個具體的JSP頁面或另一Action.
7 查找響應(可以是一個Action)
8 響應用戶
-----------------------------------------------------------------------------------------------------------
組件
ActionSerlet,Action Classes,Action Mapping(此處包括ActionForward),ActionForm Bean.
Struts中的MVC:
1 模型(Model):本質上來說在Struts中Model是一個商業邏輯類,開發者實現商業邏輯。
2 視圖(View):View是由與控制器Servlet配合工作的一整套JSP定制標簽庫構成,利用他們可以快速建立應用系統的界面。
3 控制器(Controller),前端控制器是一個Servlet,它將客戶端請求轉發到相應的后端控制器Action類。
注意:官方認為ActionForm Bean應為控制層(Controller)組件,自已寫的JavaBeans為模型(Model)
-----------------------------------------------------------------------------------
ActionServlet(中心控制器)
定義:繼承自javax.servlet.http.HttpServlet類,是中心控制器(總控制器)。它提供一個中心位置來處理全部的終端請求。
作用:接受請求,填充數據,派發請求,響應用戶。
配置:在web.xml文件聲明。
例子:
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
注意:struts-config.xml文件系統默主調用,可以不<init-param>配置
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
-------------------------------------------------------------------
Action
發出該action請求時初始化,不是在讀取配置時,并且只初始化一次。
Action是線程不安全的,因為所有的請求共享一個別action實例。
所以:不要用實例變量或者類變是共享只是針對某個請求的數據
注意資源操作的同步性。
應用:
統計一個action訪問次數
public class CountAction extends Action {
private Integer count=0;
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
synchronized(count){//加鎖
count++;
}
PrintWriter out=response.getWriter();
out.print("count="+count);
return null;
}
}

----------------------------------------------------
ActionMapping
是對struts-config.xml中action標簽中所有屬性的封裝類。
mapping.getName()(String)
mapping.getPath()(String)
mapping.getType()(String)
String[] forwardNames=mapping.findForwards();
for(String forward:forwardNames){
ActionForward forward=mapping.findForward(forward);
String forwardPath=forward.getPath();
}
相應的set方法不能使用。
-----------------------------------------------------
ActionForward(導航器)
ActionForward對象是配置對象。這些配置對象擁有獨一無二的標識以允許他們按照name屬性來檢索。
name:邏輯名稱
path:頁面或者模塊訪問路徑。
redirect:默認為false.設為true時為容器外跳轉,相當于response.sendRedirect();
在xml文件中的path中要寫絕對路徑。
--------------------------------------------------------------
ActionForm工作原理
步驟:
(1)檢查Action的映射,確定Action中已經配置了對ActionForm的映射
(2)根據name屬性,查找form bean中的配置信息
(3)檢查Action的form bean的使用范圍,確定在此范圍下(request,session),是否已經有些form bean的實例。
(4)假如當前范圍下,已經存在了些form bean的實例,而是對當前請求來說,是同一種類型的話,就重用。
(5)否則,就重新構建一個form bean的實例(調用構造方法),并且保存在一定作用范圍。
(6)form bean的reset()方法被調用
在作數據收集前被調用,是一個重置的方法.
(7)調用對應的setter方法,對狀態屬性賦值
(8)如果validatede的屬性設置為true,就調用form bean的validate()方法。
該方法進行表單的服務器端驗證.
(9)如果validate()方法沒有返回任何錯誤,控制器將ActionForm作為參數,傳給Action實例的execute()方法并執行。
注意:直接從ActionFrom類繼承的reset()和validate()方法,并不能實現什么處理功能,所以重新覆蓋。
注意:
1 無參構造方法必須有
2 Scope缺省值是session
3 調用setter方法,實質上是對應的標準set方法
分析:
4 從過程去查看
HttpSessionAttributeListener
ServletRequestAttributeListener
5 從結果去查看
---------------------------------------------------
ActionForm
reset()方法,用于恢復屬性,在重新復值前由controller調用。
valldate()方法,用于校驗屬性,返回ActionErrors,如果成功返回null,默認返回null.
關閉校驗功能設置struts-config.xml中<action>標簽的validate屬性為false.
validate
----------------------------------------------------------
struts-config.xml文件中的action標簽
1 attribute屬性
用來存取form的關鍵字,缺省值與name一樣,如果設了必須用該屬性。
2 validate屬性(action中的屬性)
用來控制是否校驗表單,缺省為false,false不校驗。
3 input屬性
當表單校驗失敗時將請求轉發的URL(或目標模塊,可以為另一個別action),結合validate屬性使用,為相對路徑。
在ActionForm類的validate方法中手動添加錯誤
public ActionErrors validate(ActionMapping mapping,HttpServletRequest request){
ActionErrors errors=new ActionErrors();
ActionMessage message=new ActionMessage("error");//應為鍵值對
errors.add("error",message);
return errors;
}
---------------------------------------------------------------------------
struts-config.xml文件中的<global-forwards>全局跳轉標簽
<global-forwards>
<forward name="error" path="Error.jsp"/>
</global-forwards>
使用方式同action中的forwar標簽
posted on 2009-11-29 22:59
junly 閱讀(2328)
評論(0) 編輯 收藏 所屬分類:
struts2/struts1.3/JSF