从JavaScript调用Servlet

从JavaScript调用Servlet,java,javascript,jsp,servlets,Java,Javascript,Jsp,Servlets,我打算在JavaScript中调用一个函数,该函数在单击后调用Servlet JSP: <head> <script type="text/javascript"> function callServlet() { document.location.href="test-servlet.jsp"; } </script> </head> <body> &

我打算在JavaScript中调用一个函数,该函数在单击
后调用Servlet

JSP:

<head>
    <script type="text/javascript">
        function callServlet() {
            document.location.href="test-servlet.jsp";
        }
    </script>
</head>

<body>
    <form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
    ...
    <input type="image" name="submit"
        src="https://www.paypalobjects.com/webstatic/en_US/btn/btn_buynow_pp_142x27.png"
        onclick="callServlet()" alt="PayPal - The safer, easier way to pay online!">
    </form>
</body>
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");

    PrintWriter out = response.getWriter();

    out.println("<h1>TestServlet called successfully!</h1>");
}
上下文根目录:
http://localhost:8080/mysite/test-jsp


但是,当我单击图像按钮时,什么也没有发生。我是JavaScript新手。

试试这段代码

<a href="#" onclick="callServlet()"><img
    src="https://www.paypalobjects.com/webstatic/en_US/btn/btn_buynow_pp_142x27.png"
    alt="PayPal - The safer, easier way to pay online!"></a>

编辑:


最后,我们发现servlet应该在没有扩展的情况下映射,并且使用
doGet
方法从javascript获取请求。

我可以在jsp中看到多个错误

首先,

<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
现在使用JavaScript

您不能使用
window.location.href
发出
POST
请求。检查


函数callServlet(){
document.forms[0]。提交;
}

您可以使用jquery而不是javascript。是否有任何特定要求限制您仅使用javascript?@Rockstar jQuery对以下问题有何帮助:)?你的意图是什么?表单正在PayPal上提交,当单击提交时,您试图修改位置(竞争条件)。更改位置也会生成GET请求,但您的servlet正在处理POST。。。因此,您所展示的代码存在多个问题。那么为什么不@PavelHoral?。我想OP想要在单击时进行servlet调用。如果我以错误的方式进行了调用,我很抱歉。可能是我对OP的意图理解不足。我猜他是想访问url
testservlet
而不是动作中的那个attribute@SanKrish他想要一个图像按钮转到jsp页面,但他的标题建议从JavaScript调用Servlet:(@RomanC下一行我是JavaScript新手。即使是它也不会接受post请求,因为它试图在post中传递请求。您应该映射一个servlet,不带扩展,并使用
doGet
方法。您好,
https://www.sandbox.paypal.com/cgi-bin/webscr
重定向到所需的PayPal沙箱站点。我想注册的原因是l另一个测试servlet用于设置布尔值
isPaypalButtonClicked
。这可能吗?因此您希望它保持在同一页面上?如果是这样,请使用ajax为您完成工作。遗憾的是,我们目前还不允许接触ajax。允许使用jQuery和JS(但最低限度)。因此,您可以调用servlet,将值设置为请求,然后重新定向回jsp。
<form action="./test-servlet" method="post">
<script type="text/javascript">
    function callServlet() {
        document.forms[0].submit;
    }
</script>