【问题标题】:How to call a method javaservlet in function javascript?如何在函数javascript中调用方法javaservlet?
【发布时间】:2013-11-07 02:05:18
【问题描述】:
function ShowMessage() {
    var url = '/primes/PrimesServlet';
    var result = CQ.HTTP.eval(url);
    var i = Number(document.getElementById("input").value);
    var str = document.getElementById("test");
    // if(result.checkPrimes(i)) // Want to call here
    str.innerHTML = i + " là số nguyên tố";
    // else str.innerHTML = i + " là hợp số";
    document.getElementById("output").style.display="block";
}

public class PrimesServlet extends HttpServlet {
    public boolean checkPrimes(long n) {
        boolean _return;
        MillerRabin obj = new MillerRabin();
        _return = obj.checkPrimes(n);
        return _return;
    }
 }

我想从我的函数ShowMessage() 中调用方法checkPrimes(long n),但我不能。

【问题讨论】:

  • 您需要通过 AJAX 请求调用它,因为您的 java 代码在您的服务器上运行,并且您的 JavaScript 在客户端执行。将 Java 方法公开为 Web 服务,从您的 JS 中创建一个 XMLHttpRequest,并使您的 Java 方法的返回类型可以序列化并在前端解析。

标签: java javascript servlets


【解决方案1】:

我想从函数 javascript "ShowMessage()" 中调用方法 checkPrimes(long n) 但我不能。

是的,你不能。

Java 在服务器端播放,javascript 在客户端播放。

Java 需要编译后的代码,而 Javascript 只是一种由浏览器解释的脚本语言。

您需要的只是向服务器发出请求。

该请求可能是

  1. 表单提交

  2. Ajax

除了所有的 javascript 你可以检查 Prime like。

function isPrime1(n) {
    if (isNaN(n) || !isFinite(n) || n%1 || n<2) return false; 
    var m=Math.sqrt(n);
    for (var i=2;i<=m;i++) if (n%i==0) return false;
    return true;
}

Just found here.

如果您想使用 JavaScript 发出请求,Ajax 是您的朋友。

一个很好的例子:How to use Servlets and Ajax?

【讨论】:

【解决方案2】:

您不能使用 javascript 调用方法,因为 javascript 在客户端运行,而 javacodes 在服务器端。

调用方法checkPrimes可以使用ajax。

【讨论】:

    【解决方案3】:

    您可以使用 AJAX-Calls 或编写一个控制器并通过来自 JavaScript 的请求来调用它。

    问题是(正如其他人所说),javascript 在客户端的浏览器中运行,而您的业务逻辑在网络服务器上运行。

    使用 AJAX 可以触发服务器执行代码。

    【讨论】:

      【解决方案4】:

      你不能这样打电话。您应该对doGetdoPost 方法进行操作,而不是写入结果on PrintWriter.write 方法。

      public class PrimesServlet extends HttpServlet {
      
       protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                                 throws ServletException, IOException{
       boolean _return;
       MillerRabin obj = new MillerRabin();
       _return = obj.checkPrimes(n);
       resp.getWriter().write(_return);
      
       }
      }
      

      【讨论】:

      • 如果我使用“resp.getWriter().write(_return);”,浏览器将打开新网站。我想保留我的旧网站。 p.s: 我的英文不好。
      猜你喜欢
      • 2018-07-30
      • 1970-01-01
      • 2017-11-04
      • 1970-01-01
      • 2021-12-15
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      相关资源
      最近更新 更多