从JavaScript调用Java,反之亦然?

时间:2014-04-28 19:39:57

标签: java javascript

我知道我们可以从JavaScript调用Java,反之亦然,但我想知道自己何时采取这种权力并以健康的方式使用它。我在谈论现实世界的应用,而不是"你好世界"。

正如许多开发人员通常我正在开发java和javascript但我没有足够的经验知道何时混合这些人是一个好主意。

如果有一些开发人员可以分享他的知识,了解如何使用这种混合构建真实世界的应用程序会很棒:)。

道歉,我没有以一种有价值的方式表达我的怀疑,所以,你听说过Narshorm吗?,例如你可以从Java类调用Javascript代码,但是我没看到一个商业案例,其中这些功能增加了我的服务器端应用程序的价值。

这是一个nashorn hello世界,在这个应用程序中有一个Java Main,其中包括#e;" eval"调用.js文件中函数的.js文件的内容。

nashorn hello world app

我主要怀疑的是这种力量何时真正有用

4 个答案:

答案 0 :(得分:1)

Javascript是一种客户端脚本语言。这用于与用户在网站上可以看到和执行的操作(html)进行交互。例如,当您单击按钮或将鼠标悬停在菜单项上时,可以使用javascript来实现某些操作。

Java是一种服务器端语言。这是在服务器上运行的编译代码,用户通常不知道这里发生了什么。使用服务器端代码(在您的情况下为Java)的良好实际应用程序是用于数据库查询和更新。

例如,如果您有一个要求用户注册帐户的网页,则可能会有一个带有用户名和密码文本框的表单。当用户点击"注册"此信息将存储在数据库中。

在此,您的javascript将具有按下按钮时执行的代码,该代码捕获此数据。然后它使用HTTP Post将其发送到服务器(ajax通常用于发送)服务器获取此数据并执行您编写的Java代码以将其插入数据库。

一个非常简单的网站,不需要存储用户数据可能根本不需要任何服务器端代码,但在大多数现实世界的场景中,有一些服务器代码与你的html和javascript一起工作

答案 1 :(得分:1)

Web应用程序开发(这是Java和JavaScript交互的常见场景)中:

有两个地方可以使服务器和客户端语言相互交互:

  1. 在渲染时,这是在向用户生成HTML输出时。

  2. 在运行时,这是在生成HTML并且在客户端(例如浏览器客户端)时。

  3. 对于第一种情况,假设我们有一个Servlet,它为请求添加一个属性并转发到一个新的(JSP)视图。这是servlet的一个例子:

    @WebServlet("/hello")
    public class HelloServlet extends HttpServlet {
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String name = request.getParameter("name");
            // Prepare messages.
            request.setAttribute("name", name);
            request.getRequestDispatcher("/WEB-INF/hello.jsp").forward(request, response);
        }
    }
    

    然后在您的视图(WEB-INF文件夹中的hello.jsp文件)中,您有一个这样的代码:

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <title>Servlet Hello World</title>
            <script>
                function changeName(var newName) {
                    document.getElementById('divName').innerHtml = 'Hello ' + newName;
                }
                window.onload = function () {
                    changeName('${name}');
                }
            </script>
        </head>
        <body>
            <div id="divName">
            </div>
            <form id="name" action="hello">
                Change name to: <input type="text" name="name" />
                <br />
                <input type="text" value="Change the name" />
            </form>
        </body>
    </html>
    

    通过使用这种方法,我们可以在渲染视图时将Java生成变量(NEVER SCRIPTLETS)直接传递给JavaScript。因此,在创建发送到客户端的HTML时,我们可以访问Java页面,请求,会话和上下文属性

    请注意,如果要重新执行此Java代码,则应该向服务器发出新请求以执行Java代码。这就是ajax派上用场的地方。

    Ajax允许您以异步方式与服务器端通信,服务器将为您的请求准备响应,然后在客户端,您将定义如何使用它。为此,最好使用通用格式进行通信。现在最受欢迎的格式是JSON。 Ajax与servlet的交互在这里被广泛讨论:How to use Servlets and Ajax?(不需要在这篇文章中重新发明轮子)。


    独立或移动应用

    Java将在客户端计算机上运行。请注意,Java可以通过JavaScript engineRhinonashorn执行JavaScript代码。当您已经使用javascript编写了许多功能(如外部库)并且不希望将所有代码迁移到Java时,这非常有用。您可以使用ScriptEngineManagerStringEngine类在Java应用程序中执行JavaScript代码。在Java应用程序中使用JavaScript的一个真实示例是Pentaho Kettle,用Java编写,允许通过JavaScript脚本将转换应用于您的代码。

    关于Nashorn的更多信息:

答案 2 :(得分:0)

这些技术共同使用的一个常见地方是AJAX。服务器端Web服务可能用Java编写,客户端Javascript调用Web服务。

值得指出的是,Java和Javascript实际上是完全不同的语言。 Web服务可以用任何语言编写。

答案 3 :(得分:0)

  

我在谈论现实世界的应用,而不是&#34;你好世界&#34;。

     

请问是否有一些开发人员可以分享他的知识   使用这种混合构建现实世界的应用程序会很棒。

以下是一些例子:

相关问题