zoukankan      html  css  js  c++  java
  • 【struts2】Action的生命周期

       Struts2的Action的生命周期是:Struts2为每个请求都重新初始化一个Action的实例。可以稍微改造一下代码来验证一下。

    • 给HelloWorldAction加上一个public无参的构造方法,在里面输出一句话。

      大家都知道,一个Java类如果没有写构造方法,那么会有一个默认的public无参的构造方法,这里只是把它明确的写出来了,因此这么做,并没有改变Action的任何功能,只是想看一下到底什么时候,Action会被初始化。示例代码如下:

    public HelloWorldAction(){  
        System.out.println("HelloWorldAction被初始化");  
    }  
    • 然后在execute方法上也加入一个打印Action自己这个对象实例的语句,示例代码如下:
    public String execute() throws Exception {  
        System.out.println(this);  
        this.businessExecute();  
        return "toWelcome";  
    }  

      注意:大家都知道在Java基础知识里面,“System.out.println(this);”这句话,在打印一个对象实例的时候,实际上是调用的这个类的toString方法,但是HelloWorldAction类没有实现toString方法,所以,会调用到Object的toString方法。Object的toString方法会打印出自己的全类名和Object的hashcode方法的返回值,这个hashcode方法返回一个数字,只要这个数字不同,则被打印的对象就绝不是同一个对象。

    • 修改做完之后,重新启动Tomcat,仔细察看后台的输出信息,你会发现启动的时候,并没有打印出来那句“HelloWorldAction被初始化”,这说明了Action的初始化并不是在Tomcat启动的时候进行的。

       接下来按照如下顺序操作:

      (1)访问http://localhost:9080/helloworld/s2impl/login.jsp,在页面上填写账号和密码,然后点击提交按钮,会跳转到欢迎页面。这个时候去察看后台的输出信息,如下:

    HelloWorldAction被初始化  
    cn.javass.action.action.HelloWorldAction@922804  
    用户输入的参数为===account=test,password=111111,submitFlag=login  

      (2)接下来,按F5来刷新这个欢迎页面,点击重试按钮,这样就相当于再次访问HelloWorldAction,再察看后台的输出信息,如下:

    HelloWorldAction被初始化  
    cn.javass.action.action.HelloWorldAction@922804  
    用户输入的参数为===account=test,password=111111,submitFlag=login  
    HelloWorldAction被初始化  
    cn.javass.action.action.HelloWorldAction@18e8541  
    用户输入的参数为===account=test,password=111111,submitFlag=login 

      “HelloWorldAction被初始化”这句话被打印了两次,说明HelloWorldAction对象的构造方法被调用了两次。而且两次打印的toString分别是“cn.javass.action.action.HelloWorldAction@922804”和“cn.javass.action.action.HelloWorldAction@18e8541”,这说明了为两次web请求服务的HelloWorldAction对象不是同一个。

      因此,Struts2中的Action在每一次web请求的时候都要新建一个实例。

      参考资料:http://www.iteye.com/topic/1124526

  • 相关阅读:
    神经网络和深度学习之——前馈神经网络
    神经网络和深度学习之感知器工作原理
    神经网络和深度学习之神经元和感知器
    基于keras的BiLstm与CRF实现命名实体标注
    基于双向BiLstm神经网络的中文分词详解及源码
    Net Core中数据库事务隔离详解——以Dapper和Mysql为例
    利用卷积神经网络(VGG19)实现火灾分类(附tensorflow代码及训练集)
    AlexNet 网络详解及Tensorflow实现源码
    ASP.NET Core MVC I/O编程模型
    Tensorflow开发环境配置及其基本概念
  • 原文地址:https://www.cnblogs.com/ningvsban/p/3734581.html
Copyright © 2011-2022 走看看