Struts 2的Action实现

Action被称为业务控制器,Struts 2框架负责将用户的请求与相应的Action匹配,如果成功,则调用该Action类对用户请求进行处理。

Struts 2 框架下实现Action类的三种方式:

  • 普通的POJO类,必包含一个无参数的返回值为String类型的execute()方法(方法名可变)
  • 实现Action接口
  • 继承ActionSupport接口

 

登录页面

<form method='post' action='login'>
    用户登录:<input type='text' name='userName'/><br>
    输入密码:<input type='password' name='pwd'/><br>
    <input type='submit' value='登录'>
</form>

 


 

实现Action类

 

POJO的实现

POJO实质上可以理解为简单的实体类,顾名思义POJO类的作用是方便程序员使用数据库中的数据表,可以很方便的将POJO类当做对象来进行使用,也可以调用其get,set方法。


 

 

 

在POJO中要有一个无参数的execute()方法,一个公共的无参数构造方法(默认的构造方法即可)。

 1 public class POJOAction {
 2     private String userName;
 3     private String pwd;
 4     public void setUserName(String userName){
 5         this.userName =userName;
 6     }
 7     public String getUserName(){
 8         return this.userName;
 9     }
10     public void setPwd(String pwd){
11         this.pwd =pwd;
12     }
13     public String getPwd(){
14         return this.pwd;
15     }
16     public String execute() throws Exception {
17         if ("admin".equals(userName) && "1234".equals(pwd))
18             return "success";//需要自己写一个字符串作为返回值
19         else
20             return "input";
21     }
22 }

 

 

实现Action接口

struts 2提供了一个Action接口——ActionSupport,用于定义Action类应该实现的通用规范。

事先已经在lib包下引入了9个常用的Struts的包。

 1 import com.opensymphony.xwork2.Action;
 2 
 3 public class ImpAction implements Action {
 4     private String userName;
 5     private String pwd;
 6     
 7     public void setUserName(String userName){
 8         this.userName =userName;
 9     }
10     public String getUserName(){
11         return this.userName;
12     }
13     public void setPwd(String pwd){
14         this.pwd =pwd;
15     }
16     public String getPwd(){
17         return this.pwd;
18     }
19     public String execute() throws Exception {
20         if ("admin1".equals(userName) && "1234".equals(pwd))
21             return SUCCESS;
22         else
23             return "input";
24     }
25 }

 


 

继承ActionSupport

Struts 2 框架为Action接口提供了一个实现类ActionSupport。其是struts 2 默认的Action处理类。

事先已经在lib包下引入了9个常用的Struts的包。

 1 import com.opensymphony.xwork2.ActionSupport;
 2 
 3 public class LoginAction extends ActionSupport Exception{
 4     private String userName;
 5     private String pwd;
 6     
 7     public void setUserName(String userName){
 8         this.userName =userName;
 9     }
10     public String getUserName(){
11         return this.userName;
12     }
13     public void setPwd(String pwd){
14         this.pwd =pwd;
15     }
16     public String getPwd(){
17         return this.pwd;
18     }
19     public String execute() throws Exception {
20         if ("admin".equals(userName) && "1234".equals(pwd))
21             return SUCCESS;//ActionSupport接口里面定义了5个常量
22         else
23             return "input";//同时,也可以自己使用字符串的方式
24     }
25 }

在struts.xml中,如果<action>元素没有写class属性,则默认ActionSupport类作为action的处理类。


 

struts.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
          "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
    <package name="pack1" namespace="/" extends="struts-default">
        <action name="login" class="pack1.LoginAction">
            <result name="success">/index.jsp</result>
            <result name="input">/login.jsp</result>
        </action>

        <action name="impLogin" class="pack1.ImpAction">
            <result name="success">/index.jsp</result>
            <result name="input">/login.jsp</result>
        </action>
        
        <action name="POJOLogin" class="pack1.POJOAction">
            <result name="success">/index.jsp</result>
            <result name="input">/login.jsp</result>
        </action>
    </package>
</struts>

<package>中: name:包的名称。

namespace:包所在的位置。struts.xml在src的根目录下,一般都表示为"/",代表文件所在的根目录。

extends:struts-default为默认内容,可在struts-default.xml里找到。

<action>中:  name:是视图表单中action的值,struts根据此值,让请求与Action配对。

class:src文件下相关Action类的相对路径,定义了该Action所对应的实现类。

<result>中:   name:其值与Action类的execute()方法返回值字符串相等,表示逻辑视图。

/xx.jsp:表示物理视图。



上一篇:Python 大文件处理


下一篇:js逆向之中关村在线pwd