第一種方式:不繼承於任何類的Action 。
這種方式的好處是,我們寫的Action類完全不和struts2框架發生耦合,代碼不依賴struts2的類庫。
/**
* 第一種寫法:普通的java對象(pojo)
* 這是一個struts2處理類
* @author benxi
* 處理原則:
* public String XX無參方法
* get set方法
*/
public class loginAction {
private String name;
private String password;
public String login(){
if("zhangsan".equals(name)&&"123".equals(password)){
return "success";
}else
return "error";
}
、、get/set方法省略
對應的struts.xml文件寫法:
<!-- 配置Action
先定義一個包標籤(管理Action)
package標籤
name:包名
extends:繼承其它包(struts-default系統包-必須)
action標籤
name:訪問Action路徑名
class:Action全路徑名
method:方法名
result標籤
name:視圖名
標籤內容:頁面路徑
-->
<package name="demo" extends="struts-default">
<!-- 指定方法名 -->
<action name="loginaction" class="com.action.loginAction" method="login">
<!-- 其中success.jsp前面不加/是相對於本命名空間的路徑,加上/代表項目根目錄 -->
<result name="success">success.jsp</result>
<result name="error">error.jsp</result>
</action>
</package>
</struts>
元素告訴了我們調用完Action後下一步做什麼。一般作爲的子元素
第二種寫法:實現Action接口
Struts2的Action接口中只定義了execute方法和幾個預定義的常量。
/**
* 第二種寫法:實現Action接口)
*/
public class LoginAction implements Action{
private String name;
private String password;
@Override
public String execute() throws Exception {
if("zhangsan".equals(name)&&"123".equals(password)){
//使用Action接口自帶的常量
return this.SUCCESS;
}else
return this.ERROR;
}
下面對於name和password的get/set方法省略
對應的struts.xml文件寫法:
<!-- 不需要指定方法名 -->
<action name="loginaction" class="com.action.LoginAction">
<result name="success">success.jsp</result>
<result name="error">error.jsp</result>
</action>
第三種寫法:繼承ActionSupport類
ActionSupport類實現了Action接口,我們自定義的Action類一般都採用繼承ActionSupport類的方式。使用ActionSupport的好處是我們可以直接使用這個類中已經定義好的方法。
/**
* 第三種寫法:繼承ActionSupport類
*/
public class LoginAction extends ActionSupport{
private String name;
private String password;
private String message;
@Override
public String execute() throws Exception {
if("zhangsan".equals(name)&&"123".equals(password)){
//可以在jsp頁面直接使用EL表達式讀取出這個數據,三種設置action方式都可以使用這個
message = "您好! ["+name+"]";
//在jsp頁面使用特定的表達式讀取
this.addActionMessage("您好! ["+name+"]");
return this.SUCCESS;
}else{
message = "用戶名或者密碼錯誤!";
this.addActionError("用戶名或者密碼錯誤!");
return this.ERROR;
}
}
public String login(){
if("zhangsan".equals(name)&&"123".equals(password)){
this.addActionMessage("您好! ["+name+"]");
return this.SUCCESS;
}else{
this.addActionError("用戶名或者密碼錯誤!");
return this.ERROR;
}
}
struts.xml文件;
<!-- 採用通配符*來簡化配置
*:表示任意字符
{1}:表示使用第一個*的具體字符
例如:user_login 則調用login方法
-->
<action name="user_*" class="com.action.LoginAction" method="{1}">
<result name="success">success.jsp</result>
<result name="error">error.jsp</result>
</action>