javascript - 从 Javascript/HTML 调用 Java
问题描述
我想在 HTML 文件中调用我的 Java 方法,但我没有。
这是Java类:
package GET;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.collections4.MultiValuedMap;
import org.apache.commons.collections4.multimap.ArrayListValuedHashMap;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.*;
import java.util.*;
public class ProductController {
public MultiValuedMap<String, MultiValuedMap<String, String>> fahrradlenker= new ArrayListValuedHashMap<>();
public MultiValuedMap<String, String> flatbarlenker= new ArrayListValuedHashMap<>();
public MultiValuedMap<String, String> rennradlenker= new ArrayListValuedHashMap<>();
public MultiValuedMap<String, String> bullhornlenker= new ArrayListValuedHashMap<>();
@SuppressWarnings("Duplicates")
public void lenkertyp() throws IOException {
ObjectMapper mapper = new ObjectMapper();
URL urlForGetRequest = new URL("https://www.maripavi.at/produkt/lenkertyp");
String readLine = null;
HttpURLConnection connection = (HttpURLConnection) urlForGetRequest.openConnection();
connection.setRequestMethod("GET");
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader in = new BufferedReader(
new InputStreamReader(connection.getInputStream()));
StringBuffer response = new StringBuffer();
while ((readLine = in .readLine()) != null) {
response.append(readLine);
} in .close();
String lenker =response.toString();
List<String> list = mapper.readValue(lenker, new TypeReference<List<String >>() {});
for (int i=0; i<list.size();i++){
String s = list.get(i);
if (s.contains("Flatbarlenker")){
fahrradlenker.put("Flatbarlenker", flatbarlenker);
}else if (s.contains("Bullhornlenker")){
fahrradlenker.put("Bullhornlenker", bullhornlenker);
}else{
fahrradlenker.put("Rennradlenker", rennradlenker);
}
}
} else {
System.out.println("GET NOT WORKED");
}
}
这是 HTML 文件,我想从上面调用 Java 方法:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Home</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p>Configure your handlebar <a href="../js/call.js" >here</a></p>
<More-sharebar><a href="../js/call.js" onclick="javascript:f()">More options</a></More-sharebar>
</body>
</html>
我创建了一个 JavaScript 文件来调用 Java 方法,但这也不起作用:
function f() {
var lenkertyps = new Packages.GET.ProductController.lenkertyp();
}
这是我的项目的结构:
解决方案
您无法直接在 JavaScript 中使用在 Java 中声明的类和函数。
鉴于此,您有 3 个主要选项:
- 用 JavaScript 重写 Java 类和函数。这可能是可能的,除非您需要任何 DB/FS 操作或存储机密信息(如 API 机密)。
- 将您的 Java 功能拆分为可重用的一次性操作(例如:将字符串写入 DB 表),将这些功能公开为 API,从前端与 JS 一起使用。这个选项很难从头开始正确实现,所以如果你需要它,你很可能想要使用一些框架。
- 根据您的目的,您可能还想使用WebAssembly。
推荐阅读
- java - 对同一字段使用 @Column 和 @JoinColumn 的最佳实践
- python - 我正在尝试引用 Target 网站上的一个元素,但在抓取它时遇到问题
- c# - SSIS 脚本转换错误远程服务器返回错误:(407) 需要代理身份验证
- flutter - Flutter listview 加载更多和刷新 web 支持
- python - 将对象添加到二维列表时抛出错误?
- r - 闪亮的应用程序情节相关问题 - 反应式
- mysql - 用 node-red 连接 Ec2 Instance mysql
- javascript - 变量没有定义,但它是
- web3 - ethers js 退出并出现此错误=> 无效的 BigNumber 值(argument="value",value=undefined,code=INVALID_ARGUMENT,version=bignumber/5.5.0)
- jquery - 如何在 JQuery Mobile 的列表视图中垂直对齐文本?