form 提交action中參數無效
頁面通過表單(form)想伺服器提交資料的時候有兩種形式,一個是POST,另一個是GET。兩種的一個區別是GET會直接把資料附加在url的後面,而POST發送的資料放置在http包中。form的action屬性就是提交資料的url地址,method屬性可以指定是GET或POST。
需要注意的是如果採用GET方式,那麼action url中參數都會被丟棄,提交時候只會把form中的資料拼接在url向伺服器提交;但是POST的方式則不會這樣,它會按照action指定的url進行提交資料,包含url後面跟著的參數和參數值
action提交路徑問題
我遇到的是Form表單提交到servelet處理時遇到的問題:
(1)<form name="form1" action="①?" method=“②?”>
//表單的內容
</form>
(2)對應的處理使用者請求的servlet類為HelloServlet.java;
(3)配置web.xml檔案:
| 代碼如下 |
複製代碼 |
<servlet> <servlet-name>③servlet</servlet-name> <servlet-class>/HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>③servlet</servlet-name> <url-pattern>/①welcome</url-pattern> </servlet-mapping> |
然後在login.jsp中應該是:
<form action="①welcome" method="②?">
這樣的話login.jsp的url是http://localhost:8080/jsp/login.jsp
而HelloServlet.java的url是http://localhost:8080/jsp/welcome
注:web.xml中③對應的兩個servlet-name要一致;①中的url-pattern要與form表單中的action屬性值一致。
form表單action重複提交
在做一個jsp提交頁面時,資料莫名其妙提交2次,資料庫資料插入2次,開始只把注意力集中在提交到Servlet裡,做了很多測試,折騰半天,才測試出來:根本不是Servlet的問題!問題出在jsp頁面上。jsp頁面的提交事件導致自動認可了2次。
form表單的js判斷函數只返回false,忘記寫返回true,真是鬱悶死。就像下面這樣:
| 代碼如下 |
複製代碼 |
function check() { if(""==document.myform.name.value) {//作業名稱 window.alert("請先填寫作業名稱!"); document.myform.name.focus(); $(".name").next().show(); return false; //離開函數 } }
|
提交按鈕 onclick="javascript:return(checkform());"
上面的check()函數由於缺少return true,導致form表單action重複提交2次。
搜尋一下,網上很多人遇到form表單action重複提交2次的問題,原因都是大同小異:
如下
1.
| 代碼如下 |
複製代碼 |
(1)<input type="submit" value="tijiao" onclick="return checkField();"/>或者圖片<input type="image" src="../images/btn-login.gif" alt="Login" class="btn-login" onclick="return checkField();"/> (2)if(usernameValue !== "" && passwordValue !== ""){ //document.getElementById("loginForm").submit(); 如果寫了這行就提交了2次。 return true; } |
2.jsp頁面有些連結地址是""
如:
| 代碼如下 |
複製代碼 |
<img src="" /> <link type="text/css" href=""/>" rel="stylesheet" />
|
主要就是串連不可為空。
3.
最近在做一個JAVA項目,發現在登陸頁面點擊登陸之後都會執行2次ACTION的代碼,跟蹤了2天終於找到問題的根源:
在登陸頁面LOGIN.JSP中,如果提交按鈕寫成如下的方式則會提交兩次:
| 代碼如下 |
複製代碼 |
<script type="text/JavaScript"> function loginFunc() { var form = document.getElementById("form1"); form.submit(); } </script> <form action="processLogin.action" method="post" id="form1"> <s:textfield name="username" cssClass="input" style="width:150px;" value=""></s:textfield> <s:password name="password" cssClass="input" style="width:150px;" value=""></s:password> <input type="submit" onclick="loginSystem()"/>//問題出在這一行 </form> |
submit類型本身就會提交到ACTION類;onclick方法中又調用了一次submit提交方法,所以導致執行了兩次ACTION的代碼。
解決方式:
| 代碼如下 |
複製代碼 |
| <input type="button" onclick="loginSystem()"/> |