在我的JSP项目中,我有一个.jsp文件,其中包含以下脚本:
<script type="text/javascript">
$(window).load(function() {
...
options.items = items;
...
});
</script>
变量项包含在另一个JavaScript脚本中,该脚本也包含在同一个.jsp文件中:
<script type="text/javascript" src="<c:url value="/js/items.js"/>"></script>
items.js具有以下结构:
var items = [{...}, {...}, {...}];
现在,为此.jsp实现 doGet 的Servlet从数据库中收集一些数据(这些数据每次都可以不同)并使用它在磁盘中写入文件items.js如上所述。
问题是服务器(tomcat7)在重新启动之前没有看到items.js发生了变化,但我每次都需要生成该文件,因为要收集的数据并不总是相同。所以我想知道如何正确地提供我提到的第一个JavaScript函数与 items 上的数据,而不必重新启动服务器。当然,如果可能的话,我想避免使用 scriptlets 。
请注意,我不能删除此消息开头所包含的那段JavaScript,因为该段代码正在使用我需要用来可视化我的数据的JavaScript库。
提前感谢您的帮助。
答案 0 :(得分:1)
在您自己的解决方案中添加一些修改,如果您想避免使用scriptlet,可以像这样编写上面的代码:
而不是
options.items = <%= request.getAttribute("items") %>;
写
options.items = ${requestScope.items}; or options.items = ${items};
答案 1 :(得分:0)
我正在回答我自己的问题,以解释我是如何解决这个问题的。
我没有完全按照Sacho和Christopher Schultz的建议去做,但他们所说的话给了我一个想法。
首先,在我的servlet上,我构建了一个包含我想要的数据的StringBuffer。最初我想使用JSONArray,但这意味着使用几个转换,以便我的js脚本可以读取(它是可行的,但它不仅仅包括使用标准解析器,而是更复杂的东西)。然后,我将此StringBuffer添加到request参数中。这就是它的样子:
protected void doGet(HttpServletRequest request,
HttpServletResponse response) {
StringBuffer sb = new StringBuffer();
// Fill the StringBuffer
request.setAttribute("items", sb);
request.getRequestDispatcher("/WEB-INF/myjsp.jsp").forward(
request, response);
}
最后,我从我的jsp文件中访问了这个属性,如下所示:
options.items = <%= request.getAttribute("items") %>;
我想避免使用scriptlet,但我认为这段代码没问题,而且实现起来非常简单。
感谢您的帮助!