GET與Post提交問(wèn)題: ---------------------------------------------- 運(yùn)行l(wèi)ogin.jsp點(diǎn)登陸時(shí)調(diào)用兩次toLoginAction /WEB-INF/jsp/main/main.jsp /WEB-INF/jsp/user/login_form.jsp 所以取得結(jié)果在toLoginAction的execute里運(yùn)行兩次 String pass = iuserDao.findPassWordByEmail(email); System.out.println(email); System.out.println(pass); 也輸出兩次:條件不同,輸出內(nèi)容不同 當(dāng)login_form.jsp里的表單 使用post方式提交時(shí),控制臺(tái)輸出如下: root@root.com root null null 當(dāng)login_form.jsp里的表單 使用get方式提交時(shí),控制臺(tái)輸出如下: root@root.com root root@root.com root 解決方案一:加struts的token攔截器,只讓表單提交一次。 解決方案二:轉(zhuǎn)一個(gè)action,就是把他自動(dòng)提交的那個(gè)請(qǐng)求通過(guò)action的轉(zhuǎn)發(fā)取消掉。 問(wèn)題: 為什么get和post的默認(rèn)請(qǐng)求后取到的值會(huì)不同? 為什么在window的電腦里沒(méi)有問(wèn)題? ---------------------------------------------- 在window下,正常輸出如下: root@root.com root ---------------------------------------------- 緩存問(wèn)題(服務(wù)器緩存或者瀏覽器緩存或者瀏覽器bug),導(dǎo)致提交兩次,與操作系統(tǒng)、程序、js提交是沒(méi)關(guān)系! get:通過(guò)URL路傳參,當(dāng)頁(yè)面再次提交,還會(huì)把URL中的值傳遞給action,所有屬性再次被填充就不出現(xiàn)null值 post:URL路徑?jīng)]有信息,當(dāng)再次提交,就出現(xiàn)屬性就出現(xiàn)null值 你在學(xué)生機(jī)器上,把在tomcat中work目錄刪除、在把\webapps 中項(xiàng)目刪除,把web容器緩存清空下! 或者把學(xué)生機(jī)器重新啟動(dòng)下,把服務(wù)器緩存徹底清除下! ---------------------------------------------- ---------------------------------------------- 圖片:struts-user.xml配置如下: ---------------------------------------------- ToLoginAction類如下 : ---------------------------------------------- 進(jìn)入主頁(yè)面的URL如: ---------------------------------------------- 登陸的URL如: ---------------------------------------------- 登陸界面: ---------------------------------------------- windwo系統(tǒng)下提交輸出如圖: ---------------------------------------------- Linux系統(tǒng)下,采用get提交時(shí) ---------------------------------------------- Linux系統(tǒng)下,采用post提交時(shí) ---------------------------------------------- 最后在學(xué)生電腦上又試了幾次,get方式提交正常和window系統(tǒng)下一樣了,post方式 提交還是沒(méi)改變,不知道為什么。 ---------------------------------------------- 郵件內(nèi)容如下: 發(fā)件人:賈東坡 發(fā)送時(shí)間: 2012-11-08 09:37 收件人:zhaozq 主題: dang_get_post 趙老師: 您好。學(xué)生的程序有點(diǎn)問(wèn)題,想聽(tīng)一下您的理解。問(wèn)題描述如下: 進(jìn)入當(dāng)當(dāng)網(wǎng)的main頁(yè)面,點(diǎn)登陸輸入用戶名,密碼后,點(diǎn)登陸會(huì)請(qǐng)求ToLoginAction, 進(jìn)入main頁(yè)面。在ToLoginAction里打印了email和pass,登陸之后輸出結(jié)果在linux 系統(tǒng)下與window下不同。window系統(tǒng)下正常輸出,而在linux系統(tǒng)下有輸出兩次,并且 login_form.jsp時(shí)表單提交方法為get時(shí),兩次都能正常輸出;當(dāng)提交方式為post里,第 二次為null。例如: 在window系統(tǒng)下: 我們?cè)谳斎肟颍斎胗脩裘簉oot@qq.com 密碼root,會(huì)輸出如下: root@qq.com root 在linux系統(tǒng)下 當(dāng)login_form.jsp的表單提交為get時(shí),輸出root@qq.comroot時(shí), 輸出如下: root@qq.com root root@qq.com root 當(dāng)login_form.jsp的表單提交為post時(shí),輸入root@qq.comroot時(shí), 輸出如下: root@qq.com root null null 原因分析:首先想的是submit按鈕在使用js時(shí),有自動(dòng)提交功能,可是也沒(méi)使用js啊, 還有在linux系統(tǒng)有自己的form機(jī)制。還有一個(gè)是程序有問(wèn)題。 解決方案:我給這個(gè)action加了個(gè)token表單攔截器就可以。說(shuō)明是表單提交兩次。 問(wèn)題是:1.為什么表單會(huì)提交兩次,而在window下只提交一個(gè)。 2.為什么在linux下用get和post提交方式第二次取到的值會(huì)不一樣。 3. form提交時(shí)在linux系統(tǒng)下與window有什么不一樣。 附件內(nèi)是程序源碼,謝謝您的寶貴時(shí)間。 祝: 身體健康,工作順利! 賈東坡北方區(qū) 北方基地項(xiàng)目部 項(xiàng)目經(jīng)理 E-mail: jiadp@tarena.com.cn Address: 北京市昌平區(qū)北七家鎮(zhèn)宏富創(chuàng)業(yè)園科技園綜合樓3層 Mobile: 18301442726 Fax: 86-10-82823773 Website: www.tarena.com.cn ---------------------------------------------- 發(fā)件人:zhaozq 發(fā)送時(shí)間: 2012-11-08 11:21 收件人:jiadp 主題: 回復(fù): dang_get_post 賈老師: 您好! 你們班的學(xué)生機(jī)器是不是采用的是云服務(wù)器? zhaozq ---------------------------------------------- 趙老師: 您好。我們班的機(jī)器都是普通主機(jī),linux系統(tǒng)的,不是用核的,也不是云服務(wù)器。 謝謝您的寶貴時(shí)間。 ---------------------------------------------- 賈老師: 您好! 緩存問(wèn)題(服務(wù)器緩存或者瀏覽器緩存或者瀏覽器bug),導(dǎo)致提交兩次,與操作系統(tǒng)、程序、js提交是沒(méi)關(guān)系! get:通過(guò)URL路傳參,當(dāng)頁(yè)面再次提交,還會(huì)把URL中的值傳遞給action,所有屬性再次被填充就不出現(xiàn)null值 post:URL路徑?jīng)]有信息,當(dāng)再次提交,就出現(xiàn)屬性就出現(xiàn)null值 你在學(xué)生機(jī)器上,把在tomcat中work目錄刪除、在把\webapps 中項(xiàng)目刪除,把web容器緩存清空下! 或者把學(xué)生機(jī)器重新啟動(dòng)下,把服務(wù)器緩存徹底清除下! zhaozq ---------------------------------------------- 趙老師: 您好。您的分析很有道理,可是我用另外幾臺(tái)電腦,試了也不行,所以不該是緩存問(wèn)題。 瀏覽器bug,這個(gè)還沒(méi)測(cè)試,因?yàn)樗袑W(xué)生的電腦都是同樣的系統(tǒng),同樣的瀏覽器,都是這個(gè) 情況。要是緩存問(wèn)題,怎么可能用token攔截了,攔截下的是緩存的,還是我自己提交的,以及 在哪地方緩存。還有個(gè)問(wèn)題就是,在web學(xué)習(xí)的時(shí)候也有表單提交,為什么就沒(méi)有這種情況,是 不是和struts有關(guān)。 謝謝,您的寶貴時(shí)間。 ---------------------------------------------- 趙老師回復(fù): 您好。您的分析很有道理,可是我用另外幾臺(tái)電腦,試了也不行,所以不該是緩存問(wèn)題。 瀏覽器bug,這個(gè)還沒(méi)測(cè)試,因?yàn)樗袑W(xué)生的電腦都是同樣的系統(tǒng),同樣的瀏覽器,都是這個(gè) 情況。要是緩存問(wèn)題,怎么可能用token攔截了,攔截下的是緩存的,還是我自己提交的,以及 token不是攔截了,而是令牌值相同不在提交,不是在window 系統(tǒng)提交沒(méi)問(wèn)題嗎?那就與程序無(wú)關(guān)了,那就是系統(tǒng) 緩存或者瀏覽器緩存中,正常當(dāng)瀏覽器關(guān)閉,緩存中數(shù)據(jù)就清除,但是如果機(jī)房比較熱、服務(wù)器處于長(zhǎng)期運(yùn)營(yíng)等情況都會(huì)導(dǎo)致緩存信息無(wú)法清空,而影響程序執(zhí)行 在哪地方緩存。還有個(gè)問(wèn)題就是,在web學(xué)習(xí)的時(shí)候也有表單提交,為什么就沒(méi)有這種情況,是 緩存 不是和struts有關(guān)。 和struts沒(méi)有關(guān)系,而是與計(jì)算機(jī)硬件設(shè)備有關(guān),這個(gè)影響具體什么時(shí)候會(huì)造成,這個(gè)都不能預(yù)計(jì),這種情況一般比較少見(jiàn)。 祝: 身體健康,工作順利! ---------------------------------------------- 趙老師: 您好。謝謝您的詳細(xì)解答,真是受益匪淺,這個(gè)問(wèn)題可以劃上句話了。同學(xué)們都很喜歡聽(tīng) 您講課,風(fēng)趣幽默、也易于接受,期待您更多的講解。 謝謝,您的精神講解。您辛苦了。 祝: 身體健康,工作順利! ---------------------------------------------- ---------------------------------------------- Debug linux系統(tǒng)下截圖如下: ---------------------------------------------- get方式時(shí):正常情況下:輸出和win一樣了。 root@root.com root ---------------------------------------------- post方式時(shí):輸出如下: root@root.com root null null -------------------------------------------------------------------------------------------

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

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

          Copyright © 志成中國(guó)

          主站蜘蛛池模板: 安庆市| 城市| 静安区| 枣阳市| 泸定县| 祁门县| 苗栗市| 神池县| 平舆县| 区。| 乳源| 铜陵市| 泰安市| 剑河县| 富源县| 绥阳县| 襄城县| 平顶山市| 元阳县| 开阳县| 莱阳市| 张家港市| 阳城县| 华宁县| 华安县| 芷江| 文山县| 漠河县| 宝兴县| 磴口县| 达孜县| 固安县| 宜昌市| 宁陕县| 集贤县| 修水县| 曲阜市| 桂东县| 仁化县| 龙川县| 新津县|