2011-07-22 78 views
9

如果我們寫的東西如下:發送POST請求JSP

<a href="MyServlet">Link</a> 

它會調用這個servlet的GET方法。我可以通過點擊a標籤發送郵寄請求嗎?可能嗎?

我知道如何用Javascript做到這一點,但想知道這是否可以在沒有JavaScript的情況下完成。

回答

24

解決方案是圍繞在一個形式,其中有post方法和你想要執行的動作的錨點。在錨把JavaScript提交表單

<form name="submitForm" method="POST" action="/servlet/ServletName"> 
    <input type="hidden" name="param1" value="param1Value"> 
    <A HREF="javascript:document.submitForm.submit()">Click Me</A> 
</form> 

編輯

我想我應該指出,這不是一個好主意。

鏈接帶你到頁面,這是用戶理解他們要做的。要打破用戶的假設並導致POST的鏈接,做一個不可撤銷的事情,通常被認爲是一個壞主意。

使用一個按鈕,它的語義標籤,然後你的用戶知道點擊這個做什麼


第二編輯

我真的需要強調的是,這是不是在所有一個好主意

這打破了互聯網。

+0

好!別忘了創建將由HREF調用的javascript方法 – dellasavia

+0

@dellasavia被稱爲'document.submitForm.submit()'的javascript方法實際上是附加到名爲submitForm的表單的提交函數。它是由DOM爲您創建的。 –

+0

僅在最新版本的Chrome瀏覽器 – Pascalius

0

只有使用javascript:創建一個<form action="MyServlet">form.submit()

提交您也可以使用Ajax發送POST(使用jQuery:$.post("MyServlet", {param:param})

但想想語義。用POST你應該數據。而鏈接通常只是獲取資源。 (如果你的鏈接實際上是一個僞裝的按鈕,這是另一回事)

+0

我知道這種方式,但我想知道如果我能做到這一點不帶Java scirpt和。 –

+0

我怎麼知道你知道它? :)不,沒有其他辦法 – Bozho

+0

我的錯誤,我應該在我的問題中提到它。 –

0

代碼login.jsp頁面:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Login Page</title> 
</head> 
<body> 
    <form action="LoginServlet" method="post" name="credential"> 

    Please enter userName : 
    <input type="text" name="un"><br> 

    Please enter PassWord : 
    <input type="text" name="pw"><br> 

    <input type="submit" value="Submit"> 
    </form> 
    <form action="registerUser" name="registerUserForm" method="post"> 
    If no user name and password then get a new one by <a href="registerUser">clicking</a> here 
    </form> 
</body> 
</html> 



code for registerUser servlet:: 
package examplePackage; 

import java.io.IOException; 
import java.io.PrintWriter; 

import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

@WebServlet("/registerUser") 
public class registerUser extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    public registerUser() { 
     super(); 
    } 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     PrintWriter out = response.getWriter(); 
     out.println("registerUser"); 
    } 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     doGet(request,response); 
    } 
}