考虑我基本上是JSP的全新内容以及可能的内容。我正在开发一套4个webapp仪表板,每个仪表板都是独立的,具有单独的URL和index.(jsp|html)
页面。仪表板的后端用Java编写,可以构建成各种风格,并可以部署到各种环境中。通过一些魔法,.properties
中恰好有一个WEB-INF/classes
文件可用于获取系统信息,如构建风格和部署环境 - UI需要知道的事情。
将系统信息提供给用户界面的当前解决方案
在共享UI Javascript中,我们在主线程上对JSP进行阻塞,同步AJAX调用,JSP读取属性文件,并将JSON中的信息返回给调用者(下面的文件)。 我试图消除主线程上的这种同步AJAX调用,而只是在运行Javascript时已经可以使用该信息,没有AJAX 。 / p>
问题
如何使用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();
%>
非常感谢!对我这么轻松......我是新人。
答案 0 :(得分:1)
您可以将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>