Struts2框架中的Action接口和ActionSupport类
1、Action接口
Action是Struts2框架的核心,因为它们适用于任何MVC(Model View Controller)框架。 每个URL映射到特定的action,其提供处理来自用户的请求所需的处理逻辑。
但action还有另外两个重要的功能。 首先,action在将数据从请求传递到视图(无论是JSP还是其他类型的结果)方面起着重要作用。 第二,action必须协助框架确定哪个结果应该呈现在响应请求的视图中。
Struts2中actions的唯一要求是必须有一个无参数方法返回String或Result对象,并且必须是POJO。如果没有指定no-argument方法,则默认是使用execute()方法。com.opensymphony.xwork2.Action接口源码如下:
public interface Action {
public static final String SUCCESS = "success";
public static final String NONE = "none";
public static final String ERROR = "error";
public static final String INPUT = "input";
public static final String LOGIN = "login";
public String execute() throws Exception;
}
Action接口只提供了一些常量和唯一的一个execute()方法。
2、ActionSupport类
除了实现Action接口之外,控制器action还可以扩展ActionSupport类。com.opensymphony.xwork2.ActionSupport类的部分源码如下:
可以看到该类是已经实现了Action接口的,除此之外还实现了许多其他接口。
execute()方法和validate()方法是用的比较多的。
3、登录案例
下面写一个登录的demo。pom和web.xml的配置就直接跳过了,从页面开始。
3.1、页面
在webapp下新建login.jsp和success.jsp页面。
login.jsp页面如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录页</title>
</head>
<body>
<form action="login.action" method="post">
<div>
<label>用户名:</label>
<input type="text" name="username" />
</div>
<div>
<label>密码:</label>
<input type="password" name="password" />
</div>
<div>
<input type="submit" value="登录" />
</div>
</form>
</body>
</html>
success.jsp页面如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>主页面</title>
</head>
<body>
<h1>【<s:property value="username"/>】</h1>
</body>
</html>
3.2、控制器
创建新的控制器LoginAction,如下:
public class LoginAction implements Action {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String execute() throws Exception {
if(username.equals("admin") && password.equals("123456") ) {
return SUCCESS;
}
return ERROR;
}
}
3.3、struts.xml配置
这里就直接在上面的struts.xml中修改了:
<struts>
<package name="default" extends="struts-default" namespace="/">
<action name="hello" class="com.ycz.struts01.action.HelloAction">
<result name="success">/show.jsp</result>
</action>
<!-- 登录action -->
<action name="login" class="com.ycz.struts01.action.LoginAction">
<result name="success">/success.jsp</result>
<result name="error">/login.jsp</result>
</action>
</package>
</struts>
登录成功会跳到主页面,失败则继续留在登录页。
3.4、测试
启动Tomcat容器,部署项目,访问http://localhost:8081/struts01/login.jsp。
输入正确的用户名和密码登录:
登录成功,正确的跳到了success.jsp页面,并且上面的url发生了改变,说明请求已经由控制器处理过了。