重點研究:struts2-core-2.x.x.jar\org.apache.struts2\defautl.properties文件。
重寫default.properties文件中的內容。
在src目錄下創建名為struts.properties文件。主要是設置一些常量。
struts-default.xml文件也一樣很重要
1、重寫默認struts.i18n.encoding=UTF-8這一行為:
struts.i18n.encoding=gbk。也可以改變提交中文是亂碼的問題。與在struts.xml文件中寫上<constant></constant>標簽 的效果是一樣的。
2、改寫提交的時候action的后綴名
默認:struts.action.extension=action
可以改成自己想要的后綴名:struts.action.extension=do
3、自動被struts2加載的默認配置文件名:
默認:struts.configuration.files=struts-default.xml,struts-plugin.xml,struts.xml
當然也可以自己改變它。
研究struts.xml文件.需要先重點研究struts2-core-2.x.x.jar\struts-default.xml文件。
1、struts.xml中的<package namespace=”/hello”></package>標簽對中的namespace屬性命名空間概念。它主要是用來將不同的路徑分隔開。還需要在jsp頁面的form表單的action屬性值加上/hello/xxx.action .
2、struts.xml文件宜采用模塊化的方式來創建多個struts*.xml文件,然后在struts.xml文件中通過<include file=”struts*.xml”></include>方式來加載其它的struts.xml文件。在大型的項目中,這種情況是很常用的。
總結:struts2中的MVC模型中,C指的是控制器層,即web.xml中的FilterDispatcher,也稱核心控制器;M指的是模型層(業務邏輯層),即是action的類進行調用業務羅輯的dao;V指的是表現層,即Jsp頁面展現組用戶的視圖。
下面研究一下模型驅動情況:以前表單的屬性字段都是直接寫在action類中的(也叫屬性驅動)。現在改變一下模型,將屬性字段全部寫在一個類(javaBean)中(模型驅動),然后在整個mvc的流程中,始終由該類的對象來進行傳遞。步驟如下:
1、 先創建一個Bean,用來封裝表單的字段。User.java
publicclass User{
private Stringusername;
private Stringpassword;
private intage;
private Datebirthday;
private Dategraduation;
//生成set(),get()方法,在此略
}
2、 創建一個action,繼承ActionSupport并且實現ModelDriver<User>.泛型。
publicclass RegisterAction extends ActionSupport implements ModelDriver<User> {
//創建一個javaBean對象
private User user = new User();
//需要實現ModelDriver接口中的方法
public UsergetModel(){
//返回user對象
return user;
}
//重寫ActionSupport中的方法
public String execute() throws Exception{
return SUCCESS;
}
}
3、 在struts.xml中配置action.這與之前的配置方法一樣
但是更多的程序員,還是更喜歡使用屬性驅動的方式來進行開發。
struts2中防止表單重復提交(即提交后,點刷新時,應該返回到最初頁面):用struts2標簽
1、需要在<form></form>標簽對中加入:
<s:form>
<s:token></s:token>
</s:form>
2、需要在struts.xml中的相應的action中配置相應的攔截器。并且需要把默認的攔截器也寫上。
<action name=”…” class=”…”>
<result name=”success”>/success.jsp</result>
<result name=”input”>/register.jsp</result>
//當出現重復提交時,反回到的頁面
<result name=”invalid.token”>/register.jsp</result>
//配置對表單重復提交的攔截器
<interceptor-ref name=”token”></interceptor-ref>
//既然手動配置了一個重復提交的攔截器,就需要配置一個默認的攔截器
<interceptor-ref name=”defaultStack”></interceptor-ref>
</action>
如果需要在頁面上提示用記重復提交表單的相關信息,需要在含有表單的jsp頁面里加上
<s:actionerror/> 即可。這是struts2內部定義好的信息,如果想顯示息定義的提示信息,需要在資源文件中添加相應的內容。
struts.messages.invalid.token=\u8bf7\u4e0d\u8981\u91cd\u590d\u63d0\u4ea4\u8868\u5355
上面一串unicode是“請不要重復提交表單”通過native2ascii轉換過去的。
struts2與servlet進行耦合