将服务器端数据传递给 JavaScript - Scriplet 或 AJAX 调用 - 哪个更好?

Passing server side data to JavaScript - Scriplet or AJAX call - which is better?

在服务器端的 属性 文件中,我维护了一个逗号分隔的单词列表。

words.for.js=some,comma,separated,words

我想用这些词创建一个 JavaScript 数组。

var words = [some,comma,separated,words];

我想到了两个方案

1.Using一个JSP scriplet,创建一个全局变量

<%  
    out.print("<script> var words = [");
    out.print( PropertyLoader.getAsCommaSeparated("words.for.js") );
    out.print(" ] </script>");
%>

2.Expose 服务/操作(即 /getWords.do )并使用 AJAX 调用它并构造数组。

我不确定两者中哪一个更好,在此感谢您的想法。 或者有更好的方法吗?

谢谢。

编辑:

这也是全局 JS 变量(在选项 1 的情况下)与附加 http 请求(在选项 2 的情况下)的比较 - 哪个更差。我也想从这个角度了解大家的想法。

我更喜欢将服务器端数据嵌入到 JSP 的标记中 - #1。它更快,不需要回调。

对我来说,一切都与数据的性质有关。在您的情况下,如果不重新启动服务器,该属性文件中的数据似乎不太可能更改。因此,保存一个额外的网络回调并将其嵌入到标记中感觉适合全局变量。

如果您要处理某种动态数据,ajax 回调 onload 会更好。

通过 http 请求公开将是最优雅的选择,并且允许刷新。无论如何,您已经指望浏览器具有 javascript。

此外,如果该值不是动态的,为什么不首先提供一个带有数组的静态 javascript 文件?

你为什么不使用 JSON?因为您所需要的只是将一些字符串发送到前端。像这样:

String [] s = {"test","test1"};
JSONArray array = new JSONArray();
array.put(s);
request.setAttribute("test", array);

JSP

<script>
  var array='${test}'
</script>

更新

您应该将您的配置放在 servlet 上下文中,因为它会在整个 Web 应用程序(包括 jsp 文件中访问)并且在您重新启动应用程序之前不会更改。

ServletContext context = getServletContext();
Properties prop= new Properties();
prop.load(context.getResourceAsStream("/WEB-INF/filename.properties"));
String[]configArray= prop.get("words.for.js").toString().split(",");
context.setAttribute("configArray", myConfigArray);

或者如果您使用 ServletContextListener

ServletContext ctx = servletContextEvent.getServletContext();
ctx.setAttribute("configArray", myConfigArray);