系统XP,tomcat5.5,jdk1.5.0.javabean中用的都是基本是这样的
public class SearchBean{
public ing sortFlag;
public void setSortFlag(int sortFlag){
this.sortFlag=sortFlag;
}
public int getSortFlag(){
return this.sortFlag;
}
}
在网页中是这样使用的
<jsp:useBean scope="session"/>
<%myBean.setSortFlag(一个int类型的变量);%>
<%=myBean.getSortFlag();%>
整个结构大体是这样的
问题:单个用户访问的时候都没问题,当有两个以上用户同时访问的时候返回来的值有时候就乱了(比如用户A,setSortFlag(2);用户BsetSortFlag(3),正常情况用户A应该得到2,用户B应该得到3,当同时访问的时候出现的结果是不可预料的用户A有时候得到的值是3,用户B情况类似).
问题解决中......
-------------------------------------------------------------------------------------------------
终于明白是怎么回事了:servlet线程安全问题.jsp的核心是servlet,所以也会出现这个问题.
引起servlet线程安全问题的原因:实例变量,类变量(static定义的)都会引起线程安全问题,本地变量则总是线程安全的.
解决方法1:jsp默认isThreadSafe是true,这样就允许多个客户访问,将它改为false就不会出现这个问题了,不过降低了效率(只有当一个客户线程访问完后才能执行另一个客户线程).
解决方法2:将涉及到线程安全的方法加上同步(synchronized),效果与法1类似,降低了效率.
解决方法3:将实例变,类变量该为本地变量.