从JavaScript调用Java,反之亦然,为什么?

从JavaScript调用Java,反之亦然,为什么?,java,javascript,Java,Javascript,我知道,我们可以从JavaScript调用Java,反之亦然,但我想知道,什么时候才能获得这种能力并以健康的方式使用它。我说的是真实世界的应用程序,而不是“hello world” 正如许多开发人员通常所做的那样,我正在开发java和javascript,但我没有足够的经验知道什么时候混合使用这些东西是个好主意 如果有开发人员可以分享他关于如何使用此混合构建真实世界应用程序的知识,请联系:) 很抱歉,我没有以一种值得的方式表达我的怀疑,那么,你听说过吗?例如,你可以从Java类调用Javascr

我知道,我们可以从JavaScript调用Java,反之亦然,但我想知道,什么时候才能获得这种能力并以健康的方式使用它。我说的是真实世界的应用程序,而不是“hello world”

正如许多开发人员通常所做的那样,我正在开发java和javascript,但我没有足够的经验知道什么时候混合使用这些东西是个好主意

如果有开发人员可以分享他关于如何使用此混合构建真实世界应用程序的知识,请联系:)


很抱歉,我没有以一种值得的方式表达我的怀疑,那么,你听说过吗?例如,你可以从Java类调用Javascript代码,但我没有看到这样一个商业案例:这些功能增加了我的服务器端应用程序的价值

这是一个nashorn hello world,在这个应用程序中有一个Java Main,它“eval”调用.js文件中函数的.js文件的内容


我主要怀疑的是,这种功能什么时候会真正有用呢?

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


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

Javascript是一种客户端脚本语言。这用于与用户在网站上看到的内容和做的事情(html)进行交互。例如,当您单击按钮或将鼠标悬停在菜单项上时,您可以使用javascript使事情发生


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

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

在这种情况下,当按下捕获此数据的按钮时,javascript将执行代码。然后通过HTTP Post将其发送到服务器(通常使用ajax发送此消息)。服务器获取此数据并执行您编写的Java代码以将其插入数据库


一个不需要存储用户数据的非常简单的网站可能根本不需要任何服务器端代码,但在大多数真实场景中,在web应用程序开发中,有一些服务器代码与html和javascript一起工作(这是Java和javascript交互的常见场景):

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

  • 在呈现时,也就是向用户生成HTML输出时

  • 在运行时,即HTML已生成且位于客户端(例如浏览器客户端)时

  • 对于第一种情况,假设我们有一个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文件)中,您有如下代码:

    
    Servlet Hello World
    函数changeName(var newName){
    document.getElementById('divName')。innerHtml='Hello'+newName;
    }
    window.onload=函数(){
    changeName('${name}');
    }
    将名称更改为:
    
    通过使用这种方法,我们可以在呈现视图时将Java生成的变量()直接传递给JavaScript。因此,在创建要发送到客户端的HTML时,我们只能访问Java页面、请求、会话和上下文属性

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

    Ajax允许您与服务器端异步通信,服务器将为您的请求准备响应,然后在客户端定义如何使用它。为此,最好使用通用的通信格式。现在最受欢迎的格式是。这里广泛介绍了Ajax与servlet的交互:(无需在本文中重新发明轮子)


    在独立或移动应用程序中

    Java将在客户机上运行。请注意,这里Java可以通过一个类似或。当您已经用javascript编写了很多功能(如外部库)并且不想将所有代码迁移到Java时,这非常有用。您可以使用
    ScriptEngineManager
    StringEngine
    类在Java应用程序中以JavaScript执行代码。在Java应用程序中使用JavaScript的一个真实示例是,用Java编写,它允许通过JavaScript脚本对代码应用转换

    关于纳肖恩的更多信息:


    查询数据库就是一个很好的例子。Javascript本身无法做到这一点,因此您可以通过AJAX调用服务器端Java来为您做到这一点,然后获取结果并将其输出。我假设您谈论的是在服务器上运行的浏览器Javascript和Java。您也可以用另一种方式使用它,浏览器中有Java小程序,Node.js作为服务器系统。。。并不是说使用小程序是个好主意,但仍然是::-)很抱歉,我没有以一种值得的方式表达我的怀疑,那么,你听说过吗?例如,你可以从Java类调用Javascript代码,但我没有看到这样一个商业案例:这些功能增加了我的服务器端应用程序的价值