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

时间:2015-03-25 18:50:12

标签: java javascript ajax jsp scriplets

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

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

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

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

我想到了两个选项

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

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

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

我不确定哪两个更好,并在此欣赏你的想法。 或者有更好的方法吗?

感谢。

修改

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

3 个答案:

答案 0 :(得分:2)

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

对我而言,这完全取决于数据的性质。在您的情况下,如果没有服务器重新启动,该属性文件中的数据似乎不太可能改变。因此,保存额外的网络回调并将其嵌入到标记中感觉适合于全局变量。

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

答案 1 :(得分:1)

通过http请求公开将是最优雅的选项,并允许刷新。无论如何,你已经指望浏览器使用javascript。

另外,如果该值不是动态的,为什么不首先使用数组提供静态javascript文件?

答案 2 :(得分:0)

为什么不使用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);