问大家一个关于servlet的问题 i,j都是static变量,static是一个全局共享变量,i始终未有变化,故一直为1j则每次运行都会刷新 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这就是问题的所在呀,可能我没说清楚呀如果只运行一次,控制台输出dopost 1 3 dopost 1 3 页面输出dopost 1 3 可这样说也不对我想了又想可能是我在submit中用的onclick事件如下:document.myfrm.action="action";myfrm.onsubmit();如果这样能解释onclick提交一次,submit又提交一次的话,可我改成像上面这样写的这样还是出来两值,我用的tomcat,我把work文件夹删了,运行还是不对,至少和我想的不对换句话讲,他的dopost方法有时是两次,有时是一次,我没有发现规律,希望高人们有空能告诉到底是为什么,我只是想弄清楚问题 lz的这个输出让我很费解.刷新2次是在提交之后再刷新2次吗?这样好像第一次输出i=1,j=3就应该是对的.第二次就.......真的不理解. 为什么J=3呀,其实这个问题我也说不上,为了这个我重新解压tomcat就像上面的那样,可为什么出来的东西让人无法理解呢 不会吧 我测试了你的代码,没出错啊:控制台打印的信息:2007-12-8 15:15:40 org.apache.catalina.core.AprLifecycleListener lifecycleEvent信息: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:\Java\jre1.5.0\bin;.;C:\WINDOWS\system32;C:\WINDOWS;D:\Java\jre1.5.0\bin\client;D:\Java\jre1.5.0\bin;E:\oracle\ora90\bin;E:\oracle\ora90\Apache\Perl\5.00503\bin\mswin32-x86;C:\Program Files\Oracle\jre\1.1.8\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;D:\UltraEdit-32;E:\oracle\ora90\bin;E:\oracle\ora90\Apache\Perl\5.00503\bin\mswin32-x86;C:\Program Files\Oracle\jre\1.1.8\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;D:\UltraEdit-32;D:\Java\jdk1.5.0\bin;D:\tomcat\bin;.2007-12-8 15:15:41 org.apache.coyote.http11.Http11BaseProtocol init信息: Initializing Coyote HTTP/1.1 on http-81812007-12-8 15:15:41 org.apache.catalina.startup.Catalina load信息: Initialization processed in 4000 ms2007-12-8 15:15:41 org.apache.catalina.core.StandardService start信息: Starting service Catalina2007-12-8 15:15:41 org.apache.catalina.core.StandardEngine start信息: Starting Servlet Engine: Apache Tomcat/5.5.252007-12-8 15:15:41 org.apache.catalina.core.StandardHost start信息: XML validation disabledlog4j:WARN No appenders could be found for logger (org.apache.catalina.startup.TldConfig).log4j:WARN Please initialize the log4j system properly.2007-12-8 15:15:44 org.apache.coyote.http11.Http11BaseProtocol start信息: Starting Coyote HTTP/1.1 on http-81812007-12-8 15:15:44 org.apache.jk.common.ChannelSocket init信息: JK: ajp13 listening on /0.0.0.0:80092007-12-8 15:15:44 org.apache.jk.server.JkMain start信息: Jk running ID=0 time=0/78 config=null2007-12-8 15:15:44 org.apache.catalina.storeconfig.StoreLoader load信息: Find registry server-registry.xml at classpath resource2007-12-8 15:15:44 org.apache.catalina.startup.Catalina start信息: Server startup in 3234 msdopost 1 2dopost 1 3dopost 1 4dopost 1 5其实的你的代码是有缺陷的,有成员变量和static变量就必须考虑他的同步问题;你应该把j++,和i++加同步:写一个getNum()的方法同步:private synchornized int getI(){ i++; return i;}private synchornized int getJ(){ i++; return i;}然后在doGet()和doPost()方法中调用 private synchornized int getJ(){ j++; return j;}上面的写错了 还有一个是在别的Servlet里用i, j时即使同步也有可能出现问题i,j是可是全局变量.犹如ServletContext private static int i=1; private static int j=1; 其他问题没有,既然是计数的话.你不必用static 修饰.明显TOMCAT利用的单例模式.不用static也是一样 问题我不是要计数,我不是设计什么线程安全的servlet我发现调用我的一个servlet的时候控制台对同一句话输出了两次,用我的理解是这个方法执行了两次。而这是我不理解的所以我写出了这个servlet来问,新建的工程,新安装的tomcat没有过滤器,没有改任何配置干干净的tomcat5.5.25,jdk1.6.0_2 SSH框架整合问题 hibernate csv 我们做的开源项目simplejee【我们培训用的】 100分求解,一个hibernate多对一的条件查询(网上找了很久,没有答案!) struts和hibernate简单问题 关于使用poi向excel中添加图片的问题 spring mvc modelAndView ie无法取到其中的值 struts的标签问题? hibernate的问题 菜鸟问题:Struts中的标签能输出FormBean中数组元素吗? 向Mysql数据库插入数据.
如果只运行一次,控制台输出
dopost 1 3
dopost 1 3
页面输出
dopost 1 3
可这样说也不对
我想了又想可能是我在submit中用的onclick事件如下:
document.myfrm.action="action";
myfrm.onsubmit();
如果这样能解释
onclick提交一次,submit又提交一次的话,
可我改成像上面这样写的这样还是出来两值,我用的tomcat,我把work文件夹删了,运行还是不对,至少和我想的不对
换句话讲,他的dopost方法有时是两次,有时是一次,我没有发现规律,希望高人们有空能告诉到底是为什么,我只是想弄清楚问题
第二次就.......真的不理解.
我测试了你的代码,没出错啊:
控制台打印的信息:2007-12-8 15:15:40 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
信息: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:\Java\jre1.5.0\bin;.;C:\WINDOWS\system32;C:\WINDOWS;D:\Java\jre1.5.0\bin\client;D:\Java\jre1.5.0\bin;E:\oracle\ora90\bin;E:\oracle\ora90\Apache\Perl\5.00503\bin\mswin32-x86;C:\Program Files\Oracle\jre\1.1.8\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;D:\UltraEdit-32;E:\oracle\ora90\bin;E:\oracle\ora90\Apache\Perl\5.00503\bin\mswin32-x86;C:\Program Files\Oracle\jre\1.1.8\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;D:\UltraEdit-32;D:\Java\jdk1.5.0\bin;D:\tomcat\bin;.
2007-12-8 15:15:41 org.apache.coyote.http11.Http11BaseProtocol init
信息: Initializing Coyote HTTP/1.1 on http-8181
2007-12-8 15:15:41 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 4000 ms
2007-12-8 15:15:41 org.apache.catalina.core.StandardService start
信息: Starting service Catalina
2007-12-8 15:15:41 org.apache.catalina.core.StandardEngine start
信息: Starting Servlet Engine: Apache Tomcat/5.5.25
2007-12-8 15:15:41 org.apache.catalina.core.StandardHost start
信息: XML validation disabled
log4j:WARN No appenders could be found for logger (org.apache.catalina.startup.TldConfig).
log4j:WARN Please initialize the log4j system properly.
2007-12-8 15:15:44 org.apache.coyote.http11.Http11BaseProtocol start
信息: Starting Coyote HTTP/1.1 on http-8181
2007-12-8 15:15:44 org.apache.jk.common.ChannelSocket init
信息: JK: ajp13 listening on /0.0.0.0:8009
2007-12-8 15:15:44 org.apache.jk.server.JkMain start
信息: Jk running ID=0 time=0/78 config=null
2007-12-8 15:15:44 org.apache.catalina.storeconfig.StoreLoader load
信息: Find registry server-registry.xml at classpath resource
2007-12-8 15:15:44 org.apache.catalina.startup.Catalina start
信息: Server startup in 3234 ms
dopost 1 2
dopost 1 3
dopost 1 4
dopost 1 5其实的你的代码是有缺陷的,有成员变量和static变量就必须考虑他的同步问题;
你应该把j++,和i++
加同步:
写一个getNum()的方法同步:private synchornized int getI(){
i++;
return i;
}
private synchornized int getJ(){
i++;
return i;
}
然后在doGet()和doPost()方法中调用
private synchornized int getJ(){
j++;
return j;
}
上面的写错了
i,j是可是全局变量.犹如ServletContext
private static int j=1;
其他问题没有,既然是计数的话.你不必用static 修饰.明显TOMCAT利用的单例模式.不用static也是一样
我发现调用我的一个servlet的时候控制台对同一句话输出了两次,用我的理解是这个方法执行了两次。而这是我不理解的
所以我写出了这个servlet来问,新建的工程,新安装的tomcat没有过滤器,没有改任何配置干干净的
tomcat5.5.25,jdk1.6.0_2