dispatcher:用於頁面轉發,頁面跳轉過程一直是同一個線程,Action中的數據一直保存在。
redirect:可用於返回一個頁面、一個action、鏈接到一個網址。
缺點:redirect把一個http返回碼(SUCCESS)以及返回的頁面位置一起重新發給web服務器,容納后由web服務器產生一個新的HTTP請求,就會產生一個新的線程,保存在原來Action執行的線程中的數據就無法訪問。
所以,result需要包含Action的數據,那么redirect不是一個可行的辦法。因為新的HTTP請求時在Servlet容器的新的線程中處理的,ActionContext中的所有狀態都不會存在。
chain:功能與redirect的action轉發類似,不過與redirectaction轉發功能不同的是它可以將Action中的數據一直保存在同一個HTTP請求中。
關於struts2的其他事兒
===============
<package>
===============
struts.xml 中的package的name可以隨意定義,只做繼承時使用。
===============
<constent>
===============
struts.xml 中
用<constent name="" value=""/>
來改變default.proerties 中key對應的值
==============================================
覆蓋默認的資源文件 -- default.properties
==============================================
也可以在clasess(/src)下建立struts.properties的方式,覆蓋默認的配置文件default.proerties
內容如:
struts.i18n.encoding=gbk 設置字符集
struts.action.extension=do 設置請求后綴名
struts.configuration.files=struts-default.xml,struts-plugin.xml,struts.xml Struts2自動加載的配置文件
==============
抽象包
==============
<package name="..." abstract="true">
表示該包中不能有action定義,只能通過包來繼承來定義
=============
命名空間
=============
<package name="..." namespace="">
將不同的應用分割開
如果不配置,表示當前包在一個默認的命名空間里
namespace="/hello"
請求路徑就改變為 /hello/register
需要更改表單路徑 並且一定要手工加.action
<s:form action="/hello/register.action">
尋找方式,如果namespace為默認,而表單路徑為/hello/register.action
當struts沒有找到該命名空間是,自動到默認的命名空間找
=============================
<include> 模塊化的配置
=============================
<include file="struts_1.xml"></include>
<include file="struts_2.xml"></include>
struts_1.xml和struts_2.xml都是標准的strust的xml配置文件
include后,struts會在啟動后將struts_1.xml和struts_2.xml的配置信息一同加載到內存中。
===============
Struts2 MVC
===============
FilterDispatcher ----- 核心控制器
每個action ------- 業務控制器
--------- 調用業務邏輯組件 ---- 調用DAO ---- 數據庫交互
=================
分模塊開發
=================
src下建立
struts1.xml
struts2.xml
不同的開發人員,只需要寫自己的xml配置文件
只需要加入到struts.xml中
<include file="struts1.xml"/>
<include file="struts2.xml"/>
----------------
struts1.xml
xml聲明,DTD信息... 結構與struts.xml相同
<struts>
<package name="" ...>
...
...
...
----------------
struts2.xml
xml聲明,DTD信息... 結構與struts.xml相同
<struts>
<package name="" ...>
...
...
...
================
模型驅動
================
**屬性驅動**:表單的字段都作為Action的屬性存在
**模型驅動**:用一個JavaBean來裝載對象 類似於ActionForm
模型Bean
public class User {
private String username;
private String password;
private String repassword;
private int age;
private Date date;
// setter... getter...
}
### ValueStack ### --值棧
ModelDriven<T> 該接口使用的泛型,
模型是什么類型那個的泛型就是什么類型
------ T getModel()
Action 需要實現 ModelDriven接口
public class RigesterAction extends ActionSupport
implements ModelDriven<User> {
private User user = new User();
public User getModel() {
return user;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
====================
Preparable 接口
====================
Preparable接口中有一個void prepare() throws Exception方法,實現該接口的Action類,將在執行這個action所以方法之前執行prepare(),稱為action准備方法。
=========================
顯示特定的出錯信息
=========================
<s:fielderror cssStyle="color:red">
<s:param>username</s:param>
</s:fielderror>
去掉前面的“原點”
需要自己修改 fielderror.ftl模板
去掉前面的點代碼
