引言
上一篇博客,我們講解了struts開發程序的步驟,這次我們來詳細聊聊每個struts組件的功能吧~~
首先,我們先回顧一下,struts的組件都有什麼:
ActionServlet
Acation Classes
Action Mapping
ActionForward
ActionForm Bean
1、 ActionServlet(中心控制器)
1) 定義: 繼承自javax.servelt.http.HttpServlet類,是中心控制器(總控制器)。它提供了一箇中心位置來處理全部的終端請求
2) 作用:接受請求,填充數據,派發請求,響應用戶
3) 配置:在web配置文件(web.xml)聲明:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<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>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<!-- 大於等於0 的時候表示一啓動就new好了servlet 。初始化的時候new
struts-config.xml文件-,將struts的action標籤內容放到了actionmapping裏
-->
<load-on-startup>2</load-on-startup>
</servlet>
<!-- Standard Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
2、 Action(一個請求與業務邏輯的適配器)
1)初始化時間:第一次請求的時候初始化(不是在讀取配置的時候初始化)
2)初始化次數:每個Action只被初始化一次(多個請求共享一個Action)
3)安全問題:Action是線程不安全的,因爲所有的請求共享一個Action實例
4)配置:在struts-config.xml文件中:
<action path="/login"
type="com.bjpowernode.struts.LoginAction"
name="loginForm"
scope="request"
>
<forward name="success" path="/login_success.jsp"/>
<forward name="error" path="/login_error.jsp"/>
</action>
3、 ActionMapping
1) 一個實例對應了struts-config.xml文件中的一個<action>標籤
2) 當我們建立一個Action類單純爲了頁面轉向時,可以通過在<forward>屬性裏轉向,就可以省去一個Action類
3) unknown屬性:當請求的一個*.do不存在的時候,就會找<action>中的unknown屬性爲true的,如果有就轉向到這個頁面上。是一種容錯處理。
4) input屬性:與異常有關,當出現問題,會跑到這個屬性所指的頁面上
5) 數據保持:使用el表達式或者是struts標籤
<action-mappings>
<action path="/login"
type="com.bjpowernode.struts.LoginAction"
name="loginForm"
scope="request"
>
<forward name="success" path="/login_success.jsp"/>
<forward name="error" path="/login_error.jsp"/>
</action>
</action-mappings>
4、 ActionForward
ActionForward對象是配置對象,封裝了向前進的Url路徑且被請求處理期用於識別的目標視圖。就是一個導航器。
name:邏輯名稱
path:頁面或者模塊的訪問路徑
redirect:控制轉發還是重定向。默認值是false,就是轉發(RequestDispatch.forward),當爲true的時候表示是重定向(HttpServletResponse.sendRedirects)
<forward name="success" path="/login_success.jsp"/>
<forward name="error" path="/login_error.jsp"/>
5、 ActionForm Bean
處理anctionForm的一般步驟:
1)檢查Action的映射,確定Action中已經配置了對ActionForm的映射
2)根據name屬性,查找formbean的配置信息
3)檢查Action的formbean的使用範圍確定在此範圍下(request,session),是否已經有此formbean的實例<actionscope=”request”>,默認是session
4)假如當前範圍下,已經存在了此form bean的實例,而且對於當請求來說,是同一種類型的話,那麼就重用
5)否則,就重新構建一個formbean的實例(調用構造方法),並且保存在一定的作用範圍
6)formbean的reset()方法被調用
7)調用對應的setter方法,對狀態屬性賦值
8)如果validate的屬性設置爲true,那麼就調用formbean的validate()方法
9)如果validate()方法沒有返回任何的錯誤,控制器將ActionForm作爲參數,傳給Action實例的execute()方法並執行
注意:直接從ActionForm類繼承的reset()和validate()方法,並不能實現什麼處理功能,所以有必要自己重新覆蓋
<form-beans>
<form-bean name="loginForm" type="com.bjpowernode.struts.LoginActionForm"/>
</form-beans>
總結