对于 JSP 和可能的情况,我基本上是一个全新的人。我正在开发一套包含 4 个 Web 应用程序仪表板的套件,每个仪表板都是独立的,具有单独的 URL 和 index.(jsp|html)
页。仪表板的后端用 Java 编写,可以以各种风格构建,并且可以部署到各种环境。通过一些魔法,恰好有一个 .properties
文件在 WEB-INF/classes
我可以用它来获取系统信息,例如构建风格和部署环境——UI 需要知道的事情。
当前将系统信息获取到 UI 的解决方案
在共享 UI Javascript 中,我们在主线程上对 JSP 进行阻塞、同步 AJAX 调用,该调用读取属性文件,并将 JSON 中的信息返回给调用者(下面的文件)。 我试图消除主线程上的同步 AJAX 调用,而只是让 Javascript 在运行时就可以使用该信息,无需 AJAX。
问题
如何使用 JSP 和 servlet 来让页面上已有的信息可供 Javascript 访问,而无需进行 AJAX 调用来获取它?我怎样才能使该解决方案在所有仪表板之间共享,并且最好不需要在所有 index.jsp 文件之间复制 JSP 代码?
作为引用,我们当前使用的 JSP 如下。我们再次对此 JSP 进行 AJAX 调用,然后将来自其 JSON 响应的信息存储在全局状态变量中,以供仪表板访问。
<%@page language="java" contentType="application/json; charset=UTF-8" pageEncoding="UTF-8" %>
<%@page import="java.io.InputStream" %>
<%@page import="java.util.*" %>
<%@page import="com.google.gson.Gson" %>
<%
// Read properties file
Properties p = new Properties();
p.load(application.getResourceAsStream("/WEB-INF/classes/system.properties"));
Map<String, String> m = new HashMap<~>();
m.put("id", p.getProperty("system.id", "unknown"));
m.put("type", p.getProperty("system.type", "unknown"));
// Write JSON response
out.write(new Gson().toJson(m));
out.flush();
%>
非常感谢!对我宽容一点...我是新人。
最佳答案
您可以将 java 属性值分配给 java 脚本变量并使用该 java 脚本变量,
在要使用属性值的 jsp 文件中尝试以下代码
在 Jsp 中,Java 代码总是先运行,然后是 javascript 代码,因为 java 代码在服务器上执行,而 javascript 在浏览器上运行
<%@page language="java" contentType="application/json; charset=UTF-8" pageEncoding="UTF-8" %>
<%@page import="java.io.InputStream" %>
<%@page import="java.util.*" %>
// javascript block
<script language="javascript">
<%
// Read properties file
Properties p = new Properties();
p.load(application.getResourceAsStream("/WEB-INF/classes/system.properties"));
%>
var sysId="<%=p.getProperty("system.id", "unknown")%>";
var sysType="<%=p.getProperty("system.type", "unknown")%>";
// user javascript variable sysId, sysType where you want
</script>
关于javascript - 在 Javascript 加载之前,如何将系统信息从属性文件加载到 JSP 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41121959/