代码之家  ›  专栏  ›  技术社区  ›  Pranav

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

  •  6
  • Pranav  · 技术社区  · 14 年前

    我有会话密钥,它是一个javascript变量,我从RESTAPI调用中获得。我需要调用servlet中的Java代码,并将该键作为参数传递。我可以使用什么javascript函数来实现这一点?

    3 回复  |  直到 6 年前
        1
  •  12
  •   BalusC    6 年前

    几种方式:

    1. 使用 window.location 启动GET请求。警告是它是同步的(这样客户端将看到当前页面被更改)。

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

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

    2. 使用 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>
      

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

    3. 使用 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));
      
    4. 使用 jQuery 发送与CrossBrowser兼容的Ajax请求(上面 xhr 代码只在真正的浏览器中工作,为了与MSIE兼容,您需要添加一些混乱;)。

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

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

      请注意,jquery本身已经透明地对请求参数进行编码,因此您不需要 编码成分() 在这里。

    不管怎样, key 只在 request.getParameter("key") 在servlet中。

    参见:

        2
  •  1
  •   Quentin    14 年前

    本身没有javascript功能,但浏览器通常提供 XMLHttpRequest 对象,您可以 go through that .

    Libraries YUI jQuery 提供助手函数以简化其使用。

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

        3
  •  1
  •   SoSen    7 年前

    发送邮件时添加邮件头 setrequestheader(“内容类型”,“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"));
    }