"刷新"更改时的JavaScript文件

时间:2014-05-18 20:16:57

标签: javascript jsp tomcat servlets

在我的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库。

提前感谢您的帮助。

2 个答案:

答案 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,但我认为这段代码没问题,而且实现起来非常简单。

感谢您的帮助!