首页 > 趣闻 > 正文内容

JS如何调用Java对象方法?前端与后端交互实战

趣闻2025-05-19 11:27:52

你是不是遇到过这样的问题???前端写好了页面,但有些功能必须让后端Java来处理??,比如验证用户权限、读取数据库数据。这时候,??JS怎么才能调用Java的方法呢??? 别急,今天咱们就来彻底搞懂这个事儿!


一、JS调用Java方法的几种常见方式

首先,咱们得明白,??JS和Java运行的环境不一样??。JS在浏览器里跑,Java一般在服务器或者本地程序里跑。所以,它们不能直接“对话”,得找个中间人帮忙传话。目前常见的方法有:

  1. ??通过HTTP接口(RESTful API)?? —— 最主流的方式,JS发请求,Java返回数据
  2. ??WebView里的JSBridge?? —— 移动端Hybrid开发常用,比如安卓的addJavascriptInterface
  3. ??WebSocket实时通信?? —— 适合需要长连接的场景
  4. ??Java Applet(已淘汰)?? —— 老技术,现在基本没人用了

咱们重点聊聊??前两种??,因为这才是你现在最可能用到的!


二、方法1:JS通过HTTP接口调用Java后端

怎么操作?

简单来说,就是??JS发个请求,Java接收并处理,再把结果返回给JS??。比如用fetch或者axios

javascript复制
// 前端JS代码
fetch('https://你的服务器/api/getUserInfo', {
  method: 'POST',
  body: JSON.stringify({ userId: 123 }),
  headers: { 'Content-Type': 'application/json' }
})
.then(response => response.json())
.then(data => {
  console.log("Java返回的数据:", data);
});

对应的??Java后端(Spring Boot示例)??:

java复制
@RestController
@RequestMapping("/api")
public class UserController {
  
  @PostMapping("/getUserInfo")
  public Map getUserInfo(@RequestBody Map request) {
    int userId = (int) request.get("userId");
    // 假装查了个数据库
    Map response = new HashMap<>();
    response.put("name", "张三");
    response.put("age", 25);
    return response;
  }
}

适用场景

? 常规网页开发
? 前后端分离项目
? 需要安全校验的场景(比如加Token)

个人吐槽

这种方式虽然有点“绕”,但??胜在稳定、通用??。几乎所有现代Web项目都这么干,学它准没错!


三、方法2:WebView里JS直接调Java方法(移动端专属)

如果你在做??安卓混合开发??(比如用WebView嵌入H5页面),那可以用更直接的方式——??JSBridge??。

安卓代码示例

  1. ??Java端?? 暴露一个方法给JS调用:
java复制
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JavaBridge(), "javaBridge");

public class JavaBridge {
  @JavascriptInterface
  public void showToast(String message) {
    Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
  }
}
  1. ??JS端?? 直接调用:
javascript复制
// 调用Java的showToast方法
window.javaBridge.showToast("你好,我是JS调过来的!");

适用场景

? 安卓Hybrid App(比如H5+原生混合开发)
? 需要JS和原生代码高频交互的情况

坑点警告

? ??安全性问题??:别随便暴露敏感方法,小心被恶意JS调用!
? ??只能在主线程跑??:耗时的Java操作记得开子线程


四、到底选哪种方式?

方式适用场景学习成本安全性
??HTTP接口??普通网页/前后端分离
??WebView JSBridge??安卓混合开发
??WebSocket??实时通信(如聊天室)

??个人建议??:

  • 如果是普通网页开发,??无脑选HTTP接口??
  • 如果是安卓App内嵌H5,??JSBridge更方便??

五、常见问题QA

??Q:为什么JS不能直接调用Java???
A:因为JS在浏览器沙箱里运行,而Java在服务器/本地环境,??两者根本不在一个世界??!必须通过“传话机制”(比如HTTP)沟通。

??Q:哪种方式性能最好???
A:??WebSocket??最快(长连接),但复杂度高;普通需求用HTTP就够了。

??Q:会跨域问题吗???
A:HTTP接口可能会,记得让后端配置CORS;JSBridge不存在跨域。


写在最后

其实技术没有绝对的好坏,??关键看场景??。刚开始学的时候,可能会觉得“为什么搞这么麻烦”,但用多了就会发现——??这些设计都是有道理的??。

如果你今天只记住一件事,那就是:??普通Web项目用HTTP接口,安卓混合开发用JSBridge??。搞定!

搜索