在服务器端的属性文件中,我维护一个以逗号分隔的单词列表。
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的情况下)的比较 - 哪一个更糟糕。我也想从这个角度了解你的想法。
答案 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);
ServletContext ctx = servletContextEvent.getServletContext();
ctx.setAttribute("configArray", myConfigArray);