如果我們寫的東西如下:發送POST請求JSP
<a href="MyServlet">Link</a>
它會調用這個servlet的GET方法。我可以通過點擊a
標籤發送郵寄請求嗎?可能嗎?
我知道如何用Javascript做到這一點,但想知道這是否可以在沒有JavaScript的情況下完成。
如果我們寫的東西如下:發送POST請求JSP
<a href="MyServlet">Link</a>
它會調用這個servlet的GET方法。我可以通過點擊a
標籤發送郵寄請求嗎?可能嗎?
我知道如何用Javascript做到這一點,但想知道這是否可以在沒有JavaScript的情況下完成。
解決方案是圍繞在一個形式,其中有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的鏈接,做一個不可撤銷的事情,通常被認爲是一個壞主意。
使用一個按鈕,它的語義標籤,然後你的用戶知道點擊這個做什麼。
第二編輯
我真的需要強調的是,這是不是在所有一個好主意。
這打破了互聯網。
只有使用javascript:創建一個<form action="MyServlet">
與form.submit()
提交您也可以使用Ajax發送POST
(使用jQuery:$.post("MyServlet", {param:param})
)
但想想語義。用POST
你應該後數據。而鏈接通常只是獲取資源。 (如果你的鏈接實際上是一個僞裝的按鈕,這是另一回事)
代碼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);
}
}
好!別忘了創建將由HREF調用的javascript方法 – dellasavia
@dellasavia被稱爲'document.submitForm.submit()'的javascript方法實際上是附加到名爲submitForm的表單的提交函數。它是由DOM爲您創建的。 –
僅在最新版本的Chrome瀏覽器 – Pascalius