Struts2 Action(1)

通过第二节中的helloworld实例,会发现Struts2中的Action会比Struts1.x中的Action简练了许多,只需要在熟悉的JavaBean中加入execute方法即可,这样做的好处是省掉了Struts1.x中的FormBean,并且可以方便使用Junit进行单元测试。

Struts2中将Struts1.x中的FormBean和Action合二为一,进行接受参数、调用程序逻辑、将数据返回到页面的工作。

虽然使用现在的Action可以进行一系列的工作,但是想要更快更方便的进行开发,可以使Action类继承com.opensymphony.xwork2.ActionSupport类,这个类可以使Action方便的进行数据验证、国际化等工作,在实际开发中大多数情况下是要让Action类继承自ActionSupport类的。

通过查看源代码或API的方式,知道ActionSupport类实现了一个名为Action的接口,该接口源代码如下:

   1: package com.opensymphony.xwork2;
   2: public interface Action {
   3:     public static final String SUCCESS = "success";
   4:     public static final String NONE = "none";
   5:     public static final String ERROR = "error";
   6:     public static final String INPUT = "input";
   7:     public static final String LOGIN = "login";
   8:     public String execute() throws Exception;
   9: }

Action接口的源代码很简单,接口中定义了五个常量,一个execute方法,这五个常量就是在日常开发中业务逻辑方法中返回的字符串,execute方法则是Action接口定义的一个默认的业务逻辑方法,该方法在ActionSupport类中的实现如下:

   1: public String execute() throws Exception {
   2:         return SUCCESS;
   3: }

那么在我们自定义的Action类中只需要重写该方法即可。Struts2会默认的调用execute方法。

那么如何去定义自己的业务逻辑方法,只需要遵守Struts2中对业务逻辑方法的约定即可(必须返回String类型,并且要无参数列表,还要抛出Exception异常)。

来看一个登陆的实例,该实例需要以下元素:

1. Action类:LoginAction.java

2. jsp页面:login.jsp suc.jsp error.jsp

3. 在struts.xml中配置

创建LoginAction并继承自ActionSupport类:

   1: package com.kay.action;
   2:  
   3: import com.opensymphony.xwork2.ActionSupport;
   4:  
   5: public class LoginAction extends ActionSupport {
   6:  
   7:     private String userName;
   8:     private String userPwd;
   9:     public String getUserName() {
  10:         return userName;
  11:     }
  12:     public void setUserName(String userName) {
  13:         this.userName = userName;
  14:     }
  15:     public String getUserPwd() {
  16:         return userPwd;
  17:     }
  18:     public void setUserPwd(String userPwd) {
  19:         this.userPwd = userPwd;
  20:     }
  21:     /**
  22:      * 登陆的业务逻辑方法
  23:      * @return 
  24:      * @throws Exception
  25:      */
  26:     public String login()throws Exception{
  27:         if(userName.equals("Tom") && userPwd.equals("123456")){
  28:             return SUCCESS;
  29:         }
  30:         return LOGIN;
  31:     }
  32: }

login页面:

   1: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
   2: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
   3: <html>
   4:   <head>
   5:     <title>登陆页面</title>
   6:   </head>
   7:   <body>
   8:         <form action="loginAction.action" method="post">
   9:             用户名:<input type="text" name="userName"/><br>
  10:             密码:<input type="password" name="userPwd"/>
  11:             <input type="submit" value="登录"/>
  12:         </form>
  13:   </body>
  14: </html>

suc.jsp

   1: <body>
   2:     用户名:${userName }<br>
   3:     密码:${userPwd }
   4:   </body>

error.jsp:

   1: <body>
   2:        对不起,出错了!
   3: </body>

在struts.xml中配置LoginAction:

   1: <action name="loginAction" class="com.kay.action.LoginAction" method="login">
   2:             <result name="success">/suc.jsp</result>
   3:             <result name="login">/error.jsp</result>
   4: </action>

在action节点中这次多了个method属性,该属性用于指定调用Action中的哪个方法。

在Tomcat中部署程序,浏览器的地址栏中输入http://localhost:8080/s2/login.jsp,:

clip_image002

成功后:

clip_image004

失败:

clip_image006

Struts2也支持在代码中指定调用Action中的哪个方法:

   1: <form action="loginAction!login.action" method="post">
   2: </form>

通过!号后面跟方法名称也可以,当然这样就不用在struts.xml中添加method属性了。

posted @ 2009-02-07 11:34  樊凯  阅读(4095)  评论(0编辑  收藏  举报