Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;刷新“;更改时的JavaScript文件_Javascript_Jsp_Tomcat_Servlets - Fatal编程技术网

&引用;刷新“;更改时的JavaScript文件

&引用;刷新“;更改时的JavaScript文件,javascript,jsp,tomcat,servlets,Javascript,Jsp,Tomcat,Servlets,在我的JSP项目中,我有一个.JSP文件,其中包含以下脚本: <script type="text/javascript"> $(window).load(function() { ... options.items = items; ... }); </script> 现在,为this.jsp实现doGet的Servlet从数据库收集一些数据(每次数据都可能不同),并使用它在磁盘中写入上面提到的items

在我的JSP项目中,我有一个.JSP文件,其中包含以下脚本:

<script type="text/javascript">
    $(window).load(function() {
        ...
        options.items = items;
        ...
    });
</script>
现在,为this.jsp实现doGet的Servlet从数据库收集一些数据(每次数据都可能不同),并使用它在磁盘中写入上面提到的items.js文件

问题是服务器(tomcat7)在重新启动之前看不到items.js已更改,但我每次都需要生成该文件,因为要收集的数据并不总是相同的。因此,我想知道如何正确地提供我提到的第一个JavaScript函数,该函数包含项目上的数据,而不必重新启动服务器。当然,如果可能的话,我希望避免使用scriptlet

请注意,我不能仅仅删除这条消息开头包含的那段JavaScript,因为这段代码正在使用一个JavaScript库,我需要使用它来可视化我的数据


提前感谢您的帮助。

我在回答自己的问题,解释我是如何解决这个问题的

我并没有完全按照萨乔和克里斯托弗·舒尔茨的建议去做,但他们的话给了我一个想法

首先,在我的servlet上,我构建了一个包含所需数据的StringBuffer。起初,我想使用JSONArray,但这意味着要使用几个转换,以便我的js脚本能够读取(这是可行的,但不只是使用标准解析器,而是更复杂的东西)。然后,我将这个StringBuffer添加到请求参数中。这一切看起来是这样的:

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") %>;
options.items=;
我想避免使用Scriptlet,但我认为这段代码还可以,而且实现起来非常简单


谢谢你的帮助

对您自己的解决方案添加一些修改,如果您想避免使用scriptlet,您可以这样编写您的上述行:

而不是

options.items = <%= request.getAttribute("items") %>;

实现某种服务,将项目作为json返回,而不是将数据作为js文件包含。然后,您可以随时通过ajax访问它。看看您不需要再次启动服务器。只需删除/work/Catalina/localhost中的应用程序缓存文件夹即可。您还可以自己提供.js文件,而不必依赖DefaultServlet。不过,我建议不要为此目的滚动您自己的DefaultServlet。为什么需要将生成的文件持久保存到磁盘?Sacho,听起来不错,我试试。Braj,这不起作用,因为我的文件不是“静态”的,当我第一次启动服务器时,它无法读取我新创建的JavaScript脚本(直到下次服务器重新启动)@克里斯托弗·舒尔茨,我当然不需要把那个文件存储在任何地方,但我不知道如何才能提供那个文件,我不太清楚你的意思。谢谢你的回答!
options.items = <%= request.getAttribute("items") %>;
options.items = <%= request.getAttribute("items") %>;
options.items = ${requestScope.items}; or options.items = ${items};