将服务器端数据传递给 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);
在服务器端的 属性 文件中,我维护了一个逗号分隔的单词列表。
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);