在加载Javascript之前,如何将属性文件中的系统信息加载到JSP中?

时间:2016-12-13 13:08:35

标签: javascript java ajax jsp servlets

考虑我基本上是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();
%>

非常感谢!对我这么轻松......我是新人。

1 个答案:

答案 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>