form表單action提交問題詳解

來源:互聯網
上載者:User

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()"/>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.