我在后台启动时给一个static的List放入一个对象
static List list = new ArrayList();
list.add(new Job())
那么现在list的size就是1了。然后我在jsp里面得到list,并企图得到
Job job = (Job)list.get(0);
可是不对,因为现在的list又为空了,
我想他既然是静态的list,那么我在后台给他的值应该还在啊?我是用的嵌入式服务器,在后台运行时也启动了服务器,
所以可以访问jsp页面。请大家告诉我原因?以及怎么才能在jsp中得到后台给list的对象?

解决方案 »

  1.   

    response.setAttribute();
    request.getAttribute();
      

  2.   

    static跟这个没有关系,static指的是什么时候创建,也就是生命期,而不是作用域!
      

  3.   


    我是直接用jsp操作后台的类,没用servlet,所以不能response.setAttribute()。
      

  4.   


    static不是在内存中共享吗,在任何地方都能访问,所以我用static,
    除了response.setAttribute(),怎么才能在前台用后台的变量呢?
      

  5.   

    是不是在前台得到的list跟后台压根不是一个啊?前台访问后台的东西是不是必须得用response啊?那位高手来解惑,我都茫然了...
      

  6.   

    必须要setAttribute,否则前台取不到,你可以用EL表达式来取!
      

  7.   

    你可以在后台设置setAttribute 
    jsp页面用el表达式取
    也可以在页面用<%%>取
      

  8.   

    static是指在使用这个类的时候创建 public定义的是作用域 你这个static除非在创建的时候就给他一个值 否则无论哪里调用都是没有使用过的 你可以这样
    public static List list = getList(); //这里是个静态的 获得List的方法public static List getList(){
      //具体代码
    }
      

  9.   

    这样我是可以在getList()中赋值取到,可问题是:
    我要在启动服务器(运行main函数)的时候就得给list值,
    这个值只能启动服务器时得到,在启动完以后是得不到的,
    也就是我想要保持list中的值,直至在jsp中只用,而不是
    在jsp中重新做赋值操作。
    你能明白我的意思吗?
    现在主要问题是我在main中的list和我在jsp中的list不是同一个,
    谁能解释一下为什么?
      

  10.   

    真的不行啊,在jsp中取list是空的
      

  11.   

    Class A{
         public static ArrayList list = new ArrayList();
    }
    //...
    //程序启动时
    A.list.add(new Job());
    //jsp页面
    Job job = (Job)A.list.get(0);
      

  12.   

    对啊,就是这个形式,我觉得应该能得到,
    可事实上得不到,因为
    在jsp页面:Job job= (Job)A.list.get(0);
    a.list不再是原来add过的list的了,
    这是一个新的!
      

  13.   

    不应该呀,A.list因为是个静态成员,在内存中只能初始化一次,以后不会再有新的呀。
      

  14.   

    我刚才测试了,可以直接调用,首先进入index.jsp页面,执行一次list.add,然后从index.jsp页面点超链接进入test.jsp页面,打印处list.get(0),可以打印出来。
    Test类
    public class Test {
    public static ArrayList list = new ArrayList();
    }index页面
    <%
    String a ="mmmmmm";
    Test.list.add(a);
    %>
    <body>
        index JSP page. <br>
        <a href="test.jsp">test.jsp</a>
    </body>
    test.jsp页面
    <%
    String a = (String)Test.list.get(0);
    %>
    <body>
        Test JSP page. <br>
        <%=a %>
    测试结果:test.jsp页面显示:
    Test JSP page. 
    mmmmmm 
      

  15.   

    调用是调用了 但是调用的LIST本来就是空的 因为在使用那个类的同时 的确初始化了那个类属性 但是初始化的时候里面是没有任何参数的 所以我用了个方法将参数同时放进去 不行的话LZ加个static块吧
      

  16.   

    to:kuailelxl  辛苦你了。
    你测试的代码是jsp之间的值共享,这个的确可以。
    但我的意思这样:
    我用main函数执行了以下操作(注意是main):public static void main(String args[]){
    Job job = new Job();//job的实例化会启动web服务器
    List list = Test.list.add(job);//在这添加到list中
    }下面就是在jsp中取了:Test.list.get(0);//这句话会报错,因为list为空list在test中的声明:public class Test {
    public static List list = new ArrayList();
    .....
    }
    整体就是这个意思,但死活从jsp中取不到...
      

  17.   

    你确定你访问jsp页面的时候main方法已经执行过了吗
      

  18.   

    这是肯定的啊,因为不启动main函数是没法访问jsp页面的。
      

  19.   

    说下你的操作的流程吧。不知道你这个main方法是什么作用,web程序中是不需要main函数的
      

  20.   

    我用的是嵌入式服务器,就是编码启动服务器,
    main函数的作用就是启动服务器使程序能访问jsp,
    启动服务器会相应生成一个服务器对象,
    由于将来需要在页面上停止服务要用到这个对象,
    所以我需要在jsp得到这个对象(就是main中启动的这个)
    要知道这个对象只能在启动服务器(运行main)时得到,
    所以我必须要保证这个对象不能消失,
    不管把他保存在哪(静态list中也好,静态对象也好),
    它要在jsp访问中还能存在,那就达到要求了。
      

  21.   

    假如我用一个类代码一个jsppublic class Test {
    public static void main(String args[]) {
    System.out.print(TestDemo.list.size());
    }
    }
    ublic class TestDemo{ 
    public static List<Object> list=getList();
    public TestDemo(){

    }
         public static List<Object> getList(){
          list=new ArrayList<Object>();
      list.add(new Object());
      return list;
         }
    }怎么可能不行呢!
    注意你如果你使用类名调用list的时候,初始化的时候一定不能在构造函数中初始化。
      

  22.   

    to:closewbq 
    "假如我用一个类代码一个jsp "什么意思?
    第一段代码放哪?
    第二段代码放哪?
    好像您没明白我的意思...