调用Servlet并从JavaScript调用Java代码以及参数

我有一个会话密钥,它是从REST API调用中获得的JavaScript变量。 我需要在servlet中调用我的Java代码并将该密钥作为参数传递。 我可以用什么JavaScript函数来做到这一点?


几种方法:

  • 使用window.location来激发GET请求。 警戒是它是同步的(所以客户端会看到当前页面被改变)。

    window.location = "http://example.com/servlet?key=" + encodeURIComponent(key);
    

    请注意内置的encodeURIComponent()函数在传递它之前对请求参数进行编码的重要性。

  • 使用form.submit()来触发GET或POST请求。 警告还在于它是同步的。

    document.formname.key.value = key;
    document.formname.submit();
    

    <form name="formname" action="servlet" method="post">
        <input type="hidden" name="key">
    </form>
    

    或者,您也可以只设置现有表单的隐藏字段,并等待用户提交。

  • 使用XMLHttpRequest#send()在后台触发异步请求(也称为Ajax)。 下面的例子将调用servlet的doGet()

    var xhr = new XMLHttpRequest();
    xhr.open("GET", "http://example.com/servlet?key=" + encodeURIComponent(key));
    xhr.send(null);
    

    下面的例子将调用servlet的doPost()

    var xhr = new XMLHttpRequest();
    xhr.open("POST", "http://example.com/servlet");
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xhr.send("key=" + encodeURIComponent(key));
    
  • 使用jQuery发送兼容Ajax的交叉浏览器请求(上面的xhr代码仅在真实浏览器中工作,为了MSIE兼容性,您需要添加一些混乱;))。

    $.get("http://example.com/servlet", { "key": key });
    

    $.post("http://example.com/servlet", { "key": key });
    

    请注意,jQuery已经自己对请求参数进行透明编码,因此您不需要encodeURIComponent()

  • 无论采用哪种方式,该key都可以通过servlet中的request.getParameter("key")获得。

    也可以看看:

  • 如何使用Servlets和Ajax?
  • 在JavaScript中访问Java / Servlet / JSP / JSTL / EL变量

  • 本身没有JavaScript函数,但浏览器通常*提供XMLHttpRequest对象,您可以通过它。

    像YUI和jQuery这样的库提供了辅助函数来简化它的使用。

    *为“通常”的值,包括几乎所有支持JavaScript的浏览器,并且自从Netscape 4死后发布


    当发送POST添加头文件xhttp.setRequestHeader(“Content-type”,“application / x-www-form-urlencoded”);

    代码看起来像客户端:

        function executeRequest(req) {
            var xhttp = new XMLHttpRequest();
            xhttp.onreadystatechange = function() {
                if (this.readyState == 4 && this.status == 200) {
                   // Typical action to be performed when the document is ready:
                   document.getElementById("response").value = xhttp.responseText;
                }
            };
            xhttp.open("POST", "execute/cardbrowser", true);
            xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xhttp.send("lorem=ipsum&name=binny");
        }
    

    服务器:

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println(req.getParameter("lorem"));
    }
    
    链接地址: http://www.djcxy.com/p/46053.html

    上一篇: Call Servlet and invoke Java code from JavaScript along with parameters

    下一篇: Uncaught ReferenceError: $ is not defined?