<%@ page language="java" contentType="text/html; charset=gbk" %>
<%@ page import="com.jin.ch09.sportsreading.TestBean" %><jsp:useBean id="t" scope="session" class="com.jin.ch09.sportsreading.TestBean"/><html>
<head>
<title>测试多访问</title>
</head>
<body><%
request.setCharacterEncoding("gbk");
String action = request.getParameter("action");
if("kd".equals(action)) {
t.kd();
}
%><a href="test.jsp?action=kd">减减</a>
<%
out.println(t.getK());
%></body>
</html>
package com.jin.ch09.sportsreading;import java.io.Serializable;public class TestBean implements Serializable { private int k  = 0;

public TestBean() {
k = 200;
} public int kd() {
return --k;
}

public int getK() {
return k;
}
}打开浏览器访问test.jsp,多次点击减减令数字变为190. 然后不关闭当前浏览器,重新去访问test.jsp后,发现
数字竟然变回了200, 接着再点一下减减数字变为189.
这说明session是起作用的,可是为什么每次访问test.jsp(没关闭过当前浏览器)时,都显示200呢?非要点一下减减才会有效果?

解决方案 »

  1.   

    usebean是不是不会把bean放到scope去,是不是还要调用setbean
      

  2.   

    仔细检查下你的逻辑,,
    根据代码,<a href="test.jsp?action=kd">减减</a>
    应该是本页面把<%
    request.setCharacterEncoding("gbk");
    String action = request.getParameter("action");
    if("kd".equals(action)) {
        t.kd();
    }
    %>
    代码段的request.getParameter("action");request范围是本页面

    从本页面跳到本页面,<jsp:useBean id="t" scope="session" class="com.jin.ch09.sportsreading.TestBean"/>
    这句是创建一个TestBean对象,相当于new一个对象,并调用初始化方法:
    public TestBean() {
            k = 200;
        }所以每一次执行都是200,然后往下减,
    解决办法:
    要使每次打开后显示的K是上次的K值,只有把K值保存在一个文件里或者存储在数据库中,每打开一个网页便读一次
    文件或者读一次数据库,,
      

  3.   


    可是session中已经存在t了,就不会再new了,而是应该直接使用啊.怎么会再去调用初始化方法?
      

  4.   

    说起来确实奇怪,有时可以,有时不可以楼主不用jsp标签,用<%%>代码试试
      

  5.   

    要看你是在什么浏览器 下,不同 浏览器session是不一样的阿 ,
      

  6.   

    jsp标签的这种问题确实很奇怪...
    用其他的方法吧
      

  7.   

    1.重新去访问test.jsp,这个重新访问是否是新打开了1个IE,如果是就正常,因为新开的IE SESSION不一样2.跟楼上一样,可能是缓存的原因,你重新访问test.jsp后按F5刷新一下看看。