`
qilixiang012
  • 浏览: 203109 次
文章分类
社区版块
存档分类
最新评论

struts2 Action生命周期

 
阅读更多

我们知道,Struts2结合了WebWork和Struts1的优点,并且,Struts2和Struts1之间有很大的不同,其中原因是因为大部分都是继承自WebWork框架。

在编写Struts2框架的过程中,Action和ActionForm合二为一。Action从Web容器中解放出来,大大降低了耦合度。因为它大可不必继承自Action类,

并且不存在现成安全。

下面简单测试下Struts2中Action的生命周期:

(1) 首先是最简单的Action(简单类型的变量)

首先是一个页面表单:

		<form action="verify.action" method="post">
			姓名:<input type="text" name="username" /> <br/>
			密码:<input type="password" name="password" /><br/>
			<input type="submit" value="登录" />
		</form>


然后是一个Action类:

package zjut.tsw;  
  
  
public class LoginAction {  
      
    /* 
     * 两个实例变量 
     */  
    private String username;  
    private String password;  
  
    //构造方法  
    public LoginAction() {  
        System.out.println("Invoke LoginAction->constructor");  
    }  
      
    //Getter and Setter Methods  
    public String getUsername() {  
        System.out.println("Invoke getUsername()");  
        return username;  
    }  
  
    public void setUsername(String username) {  
        System.out.println("Invoke setUsername()");  
        this.username = username;  
    }  
  
    public String getPassword() {  
        System.out.println("Invoke getPassword()");  
        return password;  
    }  
  
    public void setPassword(String password) {  
        System.out.println("Invoke setPassword()");  
        this.password = password;  
    }  
  
    public String execute() {  
        System.out.println("LoginAction->execute()");  
        if(username.equals(password))   
            return "success";  
        else   
            return "fail";  
          
    }  
          
}  

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">  
<struts>  
    <package name="struts2" extends="struts-default">  
        <action name="verify" class="zjut.tsw.LoginAction">  
            <result name="success">/loginSuccess.jsp</result>  
            <result name="fail">/loginFail.jsp</result>  
        </action>  
    </package>  
</struts>    

loginSuccess.jsp 和 loginFail.jsp分别显示“登录成功”和“登录失败”,代码就不贴了。


输出结果为:

Invoke LoginAction->constructor  
Invoke setPassword()  
Invoke setUsername()  
LoginAction->execute()  
Invoke LoginAction->constructor  
Invoke setPassword()  
Invoke setUsername()  
LoginAction->execute()  
Invoke LoginAction->constructor  
Invoke setPassword()  
Invoke setUsername()  
LoginAction->execute()  
...  
...  

(2)Action类里包含Bean:

表单内容:

<form action="verify.action" method="post">  
    姓名:<input type="text" name="user.username" /> <br/>  
    密码:<input type="password" name="user.password" /><br/>  
    <input type="submit" value="登录" />  
</form>  

User.java:

package zjut.tsw;  
  
public class User {  
  
    public User() {  
        System.out.println("User->Constructor");  
    }  
    private String username;  
    public String getUsername() {  
        System.out.println("Invoke getUsername()");  
        return username;  
    }  
    public void setUsername(String username) {  
        System.out.println("Invoke setUsername()");  
        this.username = username;  
    }  
    public String getPassword() {  
        System.out.println("Invoke getPassword()");  
        return password;  
    }  
    public void setPassword(String password) {  
        System.out.println("Invoke setPassword()");  
        this.password = password;  
    }  
    private String password;  
}  

LoginAction.java:

package zjut.tsw;  
  
public class LoginAction {  
  
    public LoginAction() {  
        System.out.println("LoginAction->Constructor");  
    }  
    private User user;  
  
    public User getUser() {  
        System.out.println("Invoke GetUser()");  
        return user;  
    }  
  
    public void setUser(User user) {  
        System.out.println("Invoke setUser()");  
        this.user = user;  
    }  
  
    public String execute() {  
        System.out.println("Invoke execute()");  
        System.out.println("LoginAction->execute()");  
        if (user.getUsername().equals(user.getPassword()))  
            return "success";  
        else  
            return "fail";  
  
    }  
  
}  

输出:

LoginAction->Constructor  
Invoke GetUser()  
User->Constructor  
Invoke setUser()  
Invoke setPassword()  
Invoke GetUser()  
Invoke setUsername()  
Invoke execute()  
LoginAction->execute()  
Invoke getUsername()  
Invoke getPassword()  
LoginAction->Constructor  
Invoke GetUser()  
User->Constructor  
Invoke setUser()  
Invoke setPassword()  
Invoke GetUser()  
Invoke setUsername()  
Invoke execute()  
LoginAction->execute()  
Invoke getUsername()  
Invoke getPassword()  
...  
...  




从输出结果我们可以看出,框架首先会创建一个LoginAction对象,然后调用Setter方法将表单里的值赋值给相应的变量。赋值完后再调用execute方法,然后通过struts.xml中的配置定位到相应的处理页面。

不存在线程安全问题:对于struts1框架,对于每一次请求,都会用同一个线程来处理,这样如果存在一些共享变量,会引起线程安全问题,而struts2则不存在,因为每一次请求都会新建一个对象。

另外表单里的name属性值和相应的Setter和Getter方法对应,和具体的变量名没有关系。

比如: 对于表单里的这样一个输入框 :

<input type="text" name="weight" />  

在Action类里可以这样写:

private String w;  
  
public void setWeight(String w) {  
    this.w = w;  
}  
public String getWeight() {  
    return w;  
}  

总之,setXXX() 和 getXXX() 中的XXX名要和表单里的name属性名相同,(在方法里的名字首字母要大写)

转载自:http://blog.csdn.net/tounaobun/article/details/8065766

struts2与spring后生命周期:http://blog.csdn.net/wxy_g/article/details/2071662

分享到:
评论

相关推荐

    Struts in Action中文版(PDF)

    我们假定阅读此书的读者熟知 Java 语法,应用开发生命周期,以及面向对象设计概念。 关于关系数据库的基础,加上JDBC技术,我们建议掌握,但不是必需。 那么我们的注意力将着眼于Web应用和Struts框架。 技术之间...

    低清版 大型门户网站是这样炼成的.pdf

    6.2.4 bean的作用域与生命周期 374 6.2.5 基于xml方式的bean装配 376 6.2.6 基于annotation方式的bean装配 381 6.2.7 基于xml方式的aop实现 386 6.2.8 基于annotation方式的aop实现 391 6.3 spring 2.5事务管理...

    structs程序设计从入门到精通word文档

    9.4 StrutsAction单态陷阱,请谨慎使用全局变量 13 9.5 Struts异常处理 13 第10章 struts中使用国际化(i18n) 13 10.1 struts国际化程序尝试 13 10.1 Java对i18n的支持 14 10.1 struts框架中对国际化的支持 14 第11...

    图书管理系统(struts+hibernate+spring+ext).rar

    Spring作为IoC容器,负责管理对象的生命周期和依赖关系,降低了系统各模块之间的耦合度。Ext作为前端框架,提供了丰富的界面组件和交互效果,使得系统界面美观且易于使用。这个资料包包含了系统的全部源代码,包括...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    3.7.1 application的生命周期 3.7.2 application中数据的操作 3.7.3 Web应用初始化参数的配置 3.7.4 application对象应用示例 3.8 其他内置对象的应用 3.8.1 应答与请求的page对象 3.8.2 页面上下文的page Context...

    达内java培训目录

    Struts2 Struts2核心控制流程、Ognl、Action、Interceptor、Result、FreeMarker、Struts2标记库、Struts2扩展、Struts2应用技巧(输入验证、消息国际化、文件上传和下载、防止重复提交等)。 熟练掌握Struts2核心...

    从J2SE到J2EE知识点介绍

    3. 生命周期及状态转换 84 4. 线程调度 85 5. 线程同步 92 三. Jsp 101 (一) myeclipse上配置Tomcat服务器 101 (二) Jsp+servlet+bean版HelloWorld概览 105 (三) Jsp基本页面标签 116 1. 标签 116 2. contentType...

    J2EE应用开发详解

    105 8.1 Web应用的发展 105 8.2 Struts2的起源和体系结构 106 8.3 Struts2核心部分详解 108 8.3.1 核心控制器FilterDispatcher 108 8.3.2 业务逻辑控制器Action 111 8.3.3 业务逻辑组件 116 8.3.4 Struts2表示层 ...

    Java Web程序设计教程

    3.3.3servlet的生命周期 49 3.3.4load-on-startupservlet 50 3.4自定义标签库 51 3.5预处理用户请求:filter 53 3.6使用listener 56 3.7项目实战——用户登录 59 本章小结 62 课后练习 63 第4章sql与jdbc ...

    Java学习笔记-个人整理的

    \contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...

    从Java走向Java+EE+.rar

    5.1 Servlet的概念和生命周期 65 5.2 如何编写Servlet 67 5.3 使用Eclipse和Tomcat开发Servlet实例——输出字符串响应 72 5.4 小结 77 第6章 JSP——前后台更好地分离 79 6.1 JSP的概念 79 6.2 JSP页面...

    JAVA程序开发大全---上半部分

    11.1.2 JSF框架的请求处理生命周期 201 11.1.3 JSF应用程序结构 202 11.2 MyEclipse创建基于JSF框架的项目 202 11.2.1 创建JSF项目 202 11.2.2 JSF配置文件编辑器 203 11.2.3 创建Managed Bean 204 11.2.4 创建JSP...

    java WEB开发合集

    ajax手册 ajax介绍 ...四、持久化对象的状态和生命周期 五、Hibernate查询 六、Hibernate最佳实践 javaStript源码大全1.0版 全新java初学者实践教 Struts快速学习指南.pdf Spring+in+Action中文版.chm

    Java语言基础下载

    Servlet的生命周期 557 Java Servlet API 560 Web上使用的HTTP Servlet 560 处理HTTP Servlet的关键方法 560 其它相关接口的说明 561 HTTP协议基本概念及其特点 563 获取Cookie 565 HTTP响应报头--Response 566 会话...

    java web 开发详解

     优点: 对覆盖绑定(overriding binding)、验证(validation)等提供生命周期管理 与许多表示层技术/框架无缝集成:JSP/JSTL、Tiles、Velocity、FreeMarker、Excel、XSL、PDF 等 便于测试——归功于IoC 缺点: ...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

     国内知名的高端IT技术作家,已出版《Spring 2.0宝典》、《基于J2EE的Ajax宝典》、《轻量级J2EE企业应用实战》、《Struts 2权威指南》、《Ruby On Rails敏捷开发最佳实践》等著作。 目录: 第0章 学习Java...

    李兴华Java Web开发实战经典(高清版) Part2

    9.4、Servlet生命周期 9.5、取得初始化配置信息 9.6、取得其他内置对象 9.6.1、取得HttpSession实例 9.6.2、取得ServletContext实例 9.7、Servlet跳转 9.7.1、客户端跳转 9.7.2、服务器端跳转 9.8、...

    java面试题

    55.2. servlet的生命周期 38 55.3. Servlet执行时一般实现哪几个方法? 38 56. 会话跟踪 39 56.1. Cookie 39 56.2. session 39 56.2.1. Session 生命周期 39 57. EJB的几种类型 39 58. 排序都有哪几种方法?请列举。...

Global site tag (gtag.js) - Google Analytics