当当网问题get_post问题

Posted on 2012-11-09 15:49 志成中国 阅读(1191) 评论(0)  编辑  收藏
GET与Post提交问题: ---------------------------------------------- 运行login.jsp点登陆时调用两次toLoginAction /WEB-INF/jsp/main/main.jsp /WEB-INF/jsp/user/login_form.jsp 所以取得结果在toLoginAction的execute里运行两次 String pass = iuserDao.findPassWordByEmail(email); System.out.println(email); System.out.println(pass); 也输出两次:条件不同,输出内容不同 当login_form.jsp里的表单 使用post方式提交时,控制台输出如下: root@root.com root null null 当login_form.jsp里的表单 使用get方式提交时,控制台输出如下: root@root.com root root@root.com root 解决方案一:加struts的token拦截器,只让表单提交一次。 解决方案二:转一个action,就是把他自动提交的那个请求通过action的转发取消掉。 问题: 为什么get和post的默认请求后取到的值会不同? 为什么在window的电脑里没有问题? ---------------------------------------------- 在window下,正常输出如下: root@root.com root ---------------------------------------------- 缓存问题(服务器缓存或者浏览器缓存或者浏览器bug),导致提交两次,与操作系统、程序、js提交是没关系! get:通过URL路传参,当页面再次提交,还会把URL中的值传递给action,所有属性再次被填充就不出现null值 post:URL路径没有信息,当再次提交,就出现属性就出现null值 你在学生机器上,把在tomcat中work目录删除、在把\webapps 中项目删除,把web容器缓存清空下! 或者把学生机器重新启动下,把服务器缓存彻底清除下! ---------------------------------------------- ---------------------------------------------- 图片:struts-user.xml配置如下: ---------------------------------------------- ToLoginAction类如下 : ---------------------------------------------- 进入主页面的URL如: ---------------------------------------------- 登陆的URL如: ---------------------------------------------- 登陆界面: ---------------------------------------------- windwo系统下提交输出如图: ---------------------------------------------- Linux系统下,采用get提交时 ---------------------------------------------- Linux系统下,采用post提交时 ---------------------------------------------- 最后在学生电脑上又试了几次,get方式提交正常和window系统下一样了,post方式 提交还是没改变,不知道为什么。 ---------------------------------------------- 邮件内容如下: 发件人:贾东坡 发送时间: 2012-11-08 09:37 收件人:zhaozq 主题: dang_get_post 赵老师: 您好。学生的程序有点问题,想听一下您的理解。问题描述如下: 进入当当网的main页面,点登陆输入用户名,密码后,点登陆会请求ToLoginAction, 进入main页面。在ToLoginAction里打印了email和pass,登陆之后输出结果在linux 系统下与window下不同。window系统下正常输出,而在linux系统下有输出两次,并且 login_form.jsp时表单提交方法为get时,两次都能正常输出;当提交方式为post里,第 二次为null。例如: 在window系统下: 我们在输入框,输入用户名:root@qq.com 密码root,会输出如下: root@qq.com root 在linux系统下 当login_form.jsp的表单提交为get时,输出root@qq.comroot时, 输出如下: root@qq.com root root@qq.com root 当login_form.jsp的表单提交为post时,输入root@qq.comroot时, 输出如下: root@qq.com root null null 原因分析:首先想的是submit按钮在使用js时,有自动提交功能,可是也没使用js啊, 还有在linux系统有自己的form机制。还有一个是程序有问题。 解决方案:我给这个action加了个token表单拦截器就可以。说明是表单提交两次。 问题是:1.为什么表单会提交两次,而在window下只提交一个。 2.为什么在linux下用get和post提交方式第二次取到的值会不一样。 3. form提交时在linux系统下与window有什么不一样。 附件内是程序源码,谢谢您的宝贵时间。 祝: 身体健康,工作顺利! 贾东坡北方区 北方基地项目部 项目经理 E-mail: jiadp@tarena.com.cn Address: 北京市昌平区北七家镇宏富创业园科技园综合楼3层 Mobile: 18301442726 Fax: 86-10-82823773 Website: www.tarena.com.cn ---------------------------------------------- 发件人:zhaozq 发送时间: 2012-11-08 11:21 收件人:jiadp 主题: 回复: dang_get_post 贾老师: 您好! 你们班的学生机器是不是采用的是云服务器? zhaozq ---------------------------------------------- 赵老师: 您好。我们班的机器都是普通主机,linux系统的,不是用核的,也不是云服务器。 谢谢您的宝贵时间。 ---------------------------------------------- 贾老师: 您好! 缓存问题(服务器缓存或者浏览器缓存或者浏览器bug),导致提交两次,与操作系统、程序、js提交是没关系! get:通过URL路传参,当页面再次提交,还会把URL中的值传递给action,所有属性再次被填充就不出现null值 post:URL路径没有信息,当再次提交,就出现属性就出现null值 你在学生机器上,把在tomcat中work目录删除、在把\webapps 中项目删除,把web容器缓存清空下! 或者把学生机器重新启动下,把服务器缓存彻底清除下! zhaozq ---------------------------------------------- 赵老师: 您好。您的分析很有道理,可是我用另外几台电脑,试了也不行,所以不该是缓存问题。 浏览器bug,这个还没测试,因为所有学生的电脑都是同样的系统,同样的浏览器,都是这个 情况。要是缓存问题,怎么可能用token拦截了,拦截下的是缓存的,还是我自己提交的,以及 在哪地方缓存。还有个问题就是,在web学习的时候也有表单提交,为什么就没有这种情况,是 不是和struts有关。 谢谢,您的宝贵时间。 ---------------------------------------------- 赵老师回复: 您好。您的分析很有道理,可是我用另外几台电脑,试了也不行,所以不该是缓存问题。 浏览器bug,这个还没测试,因为所有学生的电脑都是同样的系统,同样的浏览器,都是这个 情况。要是缓存问题,怎么可能用token拦截了,拦截下的是缓存的,还是我自己提交的,以及 token不是拦截了,而是令牌值相同不在提交,不是在window 系统提交没问题吗?那就与程序无关了,那就是系统 缓存或者浏览器缓存中,正常当浏览器关闭,缓存中数据就清除,但是如果机房比较热、服务器处于长期运营等情况都会导致缓存信息无法清空,而影响程序执行 在哪地方缓存。还有个问题就是,在web学习的时候也有表单提交,为什么就没有这种情况,是 缓存 不是和struts有关。 和struts没有关系,而是与计算机硬件设备有关,这个影响具体什么时候会造成,这个都不能预计,这种情况一般比较少见。 祝: 身体健康,工作顺利! ---------------------------------------------- 赵老师: 您好。谢谢您的详细解答,真是受益匪浅,这个问题可以划上句话了。同学们都很喜欢听 您讲课,风趣幽默、也易于接受,期待您更多的讲解。 谢谢,您的精神讲解。您辛苦了。 祝: 身体健康,工作顺利! ---------------------------------------------- ---------------------------------------------- Debug linux系统下截图如下: ---------------------------------------------- get方式时:正常情况下:输出和win一样了。 root@root.com root ---------------------------------------------- post方式时:输出如下: root@root.com root null null -------------------------------------------------------------------------------------------

只有注册用户登录后才能发表评论。


网站导航:
 

posts - 9, comments - 5, trackbacks - 0, articles - 0

Copyright © 志成中国