struts2 action中的execute方法只执行一次

我用ssh写了一个登陆系统
每次都是第一次登陆的时候execute才会执行 之后再登录显现的都是第一次登陆时的情况
而且 再execute方法里添加输出的信息 控制台也只是第一次执行的时候才会输出
只有重启tomcat刷新才能继续登录
请问这是什么原因呀

这个问题是spring 和struts2.0整合的问题 , 在
spring 的配置文件里的bean 默认是单例模式(Singleton)的, 所以只加载一次
可以将你配置action 的bean 加一个属性scope="prototype"

例子如下:
[code="xml"]

[/code]
这样每次调用loginaction是都是加载一个新的action新的实例。

我的补充代码可以帮助理解spring默认是单例, 加上 scope="prototype" 之后就是毎获取一次都是重新加载一次。
两个bean类
[code="java"]
package org.lyx.spring.life;

/**

  • @author 李亚希 版权所有 :天豪工作室 2009-10-9 / public class User { public static int i=0; public User(){ i++; System.out.println("user类第"+i+"次被加载"); } } package org.lyx.spring.life; /*
  • @author 李亚希 版权所有 :天豪工作室 2009-10-9 */ public class MyUser { public static int i=0; public MyUser() { i++; System.out.println("myuser类第"+i+"次被加载"); } }

[/code]
spring的配置文件
[code="xml"]


[/code]

测试代码:[code="java"]

package org.lyx.spring.life.test;

import org.lyx.spring.life.MyUser;
import org.lyx.spring.life.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**

  • @author 李亚希 版权所有 :天豪工作室 2009-10-9
    */
    public class SpringLifeTest {

    public SpringLifeTest() {

    }

    public static void main(String[] args) {
    ApplicationContext context = new ClassPathXmlApplicationContext(
    "applicationContext.xml");
    User u1 = (User) context.getBean("user");
    User u2 = (User) context.getBean("user");
    User u3 = (User) context.getBean("user");
    // 在不重写equals()方法时 自定义类的两个对象之间比较的是内存地址相同则返回true 否则返回FALSE String
    // 已经重写了equals()方法
    if (u1.equals(u2)) {
    System.out.println("u1 和 u2是同一个实例");
    } else {
    System.out.println("u1 和 u2不是同一个实例");
    }
    if (u2.equals(u3)) {
    System.out.println("u2 和 u3是同一个实例");
    } else {
    System.out.println("u2 和 u3是同一个实例");
    }

    MyUser mu1 = (MyUser) context.getBean("myuser");
    MyUser mu2 = (MyUser) context.getBean("myuser");
    MyUser mu3 = (MyUser) context.getBean("myuser");
    
    if (mu1.equals(mu2)) {
        System.out.println("mu1 和 mu2是同一个实例");
    } else {
        System.out.println("mu1 和mu2不是同一个实例");
    }
    if (mu2.equals(mu3)) {
        System.out.println("mu2 和 mu3是同一个实例");
    } else {
        System.out.println("mu2 和 mu3不是同一个实例");
    }
    

    }

}

[/code]
运行结果:
user类第1次被加载
u1 和 u2相等
u2 和 u3相等
myuser类第1次被加载
myuser类第2次被加载
myuser类第3次被加载
mu1 和m u2不相等
mu2 和 mu3不相等