我知道我们可以从JavaScript调用Java,反之亦然,但我想知道自己何时采取这种权力并以健康的方式使用它。我在谈论现实世界的应用,而不是"你好世界"。
正如许多开发人员通常我正在开发java和javascript但我没有足够的经验知道何时混合这些人是一个好主意。
如果有一些开发人员可以分享他的知识,了解如何使用这种混合构建真实世界的应用程序会很棒:)。
道歉,我没有以一种有价值的方式表达我的怀疑,所以,你听说过Narshorm吗?,例如你可以从Java类调用Javascript代码,但是我没看到一个商业案例,其中这些功能增加了我的服务器端应用程序的价值。这是一个nashorn hello世界,在这个应用程序中有一个Java Main,其中包括#e;" eval"调用.js文件中函数的.js文件的内容。
我主要怀疑的是这种力量何时真正有用
答案 0 :(得分:1)
Javascript是一种客户端脚本语言。这用于与用户在网站上可以看到和执行的操作(html)进行交互。例如,当您单击按钮或将鼠标悬停在菜单项上时,可以使用javascript来实现某些操作。
Java是一种服务器端语言。这是在服务器上运行的编译代码,用户通常不知道这里发生了什么。使用服务器端代码(在您的情况下为Java)的良好实际应用程序是用于数据库查询和更新。
例如,如果您有一个要求用户注册帐户的网页,则可能会有一个带有用户名和密码文本框的表单。当用户点击"注册"此信息将存储在数据库中。
在此,您的javascript将具有按下按钮时执行的代码,该代码捕获此数据。然后它使用HTTP Post将其发送到服务器(ajax通常用于发送)服务器获取此数据并执行您编写的Java代码以将其插入数据库。
一个非常简单的网站,不需要存储用户数据可能根本不需要任何服务器端代码,但在大多数现实世界的场景中,有一些服务器代码与你的html和javascript一起工作
答案 1 :(得分:1)
在 Web应用程序开发(这是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文件)中,您有一个这样的代码:
<!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 engine或Rhino等nashorn执行JavaScript代码。当您已经使用javascript编写了许多功能(如外部库)并且不希望将所有代码迁移到Java时,这非常有用。您可以使用ScriptEngineManager
和StringEngine
类在Java应用程序中执行JavaScript代码。在Java应用程序中使用JavaScript的一个真实示例是Pentaho Kettle,用Java编写,允许通过JavaScript脚本将转换应用于您的代码。
关于Nashorn的更多信息:
答案 2 :(得分:0)
这些技术共同使用的一个常见地方是AJAX。服务器端Web服务可能用Java编写,客户端Javascript调用Web服务。
值得指出的是,Java和Javascript实际上是完全不同的语言。 Web服务可以用任何语言编写。
答案 3 :(得分:0)
我在谈论现实世界的应用,而不是&#34;你好世界&#34;。
请问是否有一些开发人员可以分享他的知识 使用这种混合构建现实世界的应用程序会很棒。
以下是一些例子: