第一种方式:不继承于任何类的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>