簡體   English   中英

從JavaScript調用Java,反之亦然?

[英]Calling Java from JavaScript and vice-versa why?

我知道我們可以從JavaScript調用Java,反之亦然,但是我想知道自己什么時候可以使用這種功能並以健康的方式使用它。 我說的是真實世界的應用程序,而不是“ hello world”。

由於許多開發人員通常會開發Java和javascript,但我沒有足夠的經驗來知道何時將這些人組合在一起是個好主意。

請問是否有一些開發人員可以分享他的知識,以了解如何使用這種組合構建真實的應用程序:)。

抱歉,我無法以有價值的方式表達我的懷疑,所以,您聽說過Narshorm嗎?例如,您可以從Java類中調用Javascript代碼,但是我看不到任何商業案例,這些功能為我增加了價值服務器端應用程序。

這是一個nashorn hello世界,在此應用程序中有一個Java Main,可“評估” .js文件的內容,並調用.js文件中的函數。

納斯霍恩你好世界應用程序

我主要懷疑的是,何時才能真正發揮作用

Web應用程序開發中 (這是Java和JavaScript交互的通常情況):

您可以在2個地方使服務器和客戶端語言相互交互:

  1. 在渲染時,即生成HTML輸出給用戶時。

  2. 在運行時,就是在生成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的交互在這里被廣泛介紹: 如何使用Servlet和Ajax? (無需在本文中重新發明輪子)。


獨立或移動應用程序中

Java將在客戶端計算機上運行。 請注意,此處Java可以通過Rhinonashorn之類的JavaScript引擎執行JavaScript代碼。 當您已經用JavaScript編寫了許多功能(例如外部庫)並且不想將所有代碼遷移到Java時,此功能很有用。 您可以只使用ScriptEngineManagerStringEngine類在Java應用程序中的JavaScript中執行代碼。 用Java編寫的Pentaho Kettle是在Java應用程序中使用JavaScript的真實示例,它允許通過JavaScript腳本對代碼進行轉換。

有關Nashorn的更多信息:

Javascript是一種客戶端腳本語言。 這用於與用戶在網站上可以看到和執行的操作進行交互(html)例如,當您單擊按鈕或將鼠標懸停在菜單項上時,可以使用JavaScript進行某些操作。

Java是服務器端語言。 這是在服務器上運行的已編譯代碼,用戶通常不知道此處會發生什么。 使用服務器端代碼(在您的情況下為Java)的一個好的實際應用程序是數據庫查詢和更新。

例如,如果您有一個網頁要求用戶注冊帳戶,則可能存在帶有用戶名和密碼的文本框的表單。 當用戶單擊“注冊”時,此信息將存儲在數據庫中。

這樣,您的javascript將具有按下按鈕時捕獲的數據所執行的代碼。 然后,它使用HTTP Post將其發送到服務器(通常使用ajax發送)。服務器獲取此數據並執行您編寫的Java代碼以將其插入數據庫。

一個非常簡單的網站,不需要存儲用戶數據,可能根本不需要任何服務器端代碼,但是在大多數實際情況下,有些服務器代碼與html和javascript一起使用

這些技術可以一起使用的一個常見地方是AJAX。 服務器端Web服務可能是用Java編寫的,而客戶端Javascript則調用了Web服務。

值得指出的是,Java和Javascript實際上是完全不同的語言。 Web服務可以用任何語言編寫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM