在JSP中单击href发送发布请求

时间:2011-07-22 14:06:54

标签: html jsp

如果我们写下如下内容:

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

它将调用该servlet的GET方法。我可以点击a标签发送帖​​子请求吗?有可能吗?

我知道如何使用Javascript执行此操作,但想知道是否可以在没有JavaScript的情况下完成此操作。

3 个答案:

答案 0 :(得分:26)

解决方案是以一种形式包围锚点,该形式具有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的链接,做一个不可挽回的事情,通常被认为是一个坏主意。

使用按钮,在语义上标记,然后您的用户知道点击此会做某事


第二次修改

我真的需要强调,这根本不是一个好主意

打破互联网。

答案 1 :(得分:0)

仅限javascript:创建<form action="MyServlet">并使用form.submit()

提交

您也可以使用ajax发送POST(使用jQuery:$.post("MyServlet", {param:param})

但想想语义。使用POST,您应发布数据。链接通常只是获取资源。 (如果你的链接实际上是一个伪装的按钮,这是另一个故事)

答案 2 :(得分: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);
    }
}