0

我正在开发一个 Web 项目,在该项目中我调用一个更新 XML 文件的 Java 类,然后将请求重定向到一个 JSP,该 JSP 显示更新的 XML 文件的内容。但是在我手动刷新包含该 XML 文件的文件夹之前,不会显示更新的 XML 值。

我的代码模板是..

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    String instanceName=request.getParameter("instanceName");
    int no_of_days=Integer.parseInt(request.getParameter("days"));

               CopyOfUpdateXmlLicenses obj2=new CopyOfUpdateXmlLicenses(instanceName,     new_free_lic);
    obj2.updateXML_Licesnes();
               long time=new Date().getTime();
    response.sendRedirect("Licenses.jsp?ms="+time); 
}
4

3 回答 3

4

你犯了一个重大的设计错误。webapp 不应在运行时写入 deploy 文件夹,原因如下:

  • 每当您重新部署 WAR 或重新启动服务器时,所有更改都会丢失。仅仅是因为这些更改不包含在(原始)WAR 中。

  • 有些服务器不会在磁盘上展开 WAR,而是在内存中展开。然后getRealPath()将返回null,使您无法向其写入文件。

您的具体问题是由于您正在通过 IDE 部署和运行 webapp 而引起的。IDE 不会立即发现项目文件夹结构中的任何外部更改。但是您应该意识到 IDE 不是服务器,也不能在生产环境中运行。IDE 只是一个开发工具。

您需要将文件写入部署文件夹之外的固定路径。

于 2012-04-19T16:14:57.090 回答
1

我会制作一个名为 Licenses.java 的 servlet,然后将页面重定向到具有新时间的许可证,或者只是让 servlet 在加载时生成新时间以将其与旧时间进行比较。然后让 servlet 执行逻辑,然后将页面转发到 licenses.jsp。

于 2012-04-19T14:45:55.933 回答
1

谢谢大家花时间在我的问题上。我找到了上述问题的根本原因。

代码没有问题,而 Eclipse IDE 则没有问题。IDE 需要一些时间来刷新工作区的内容。因此,与此同时,如果我们的程序尝试读取工作区中文件的内容,则更改可能不会立即反映出来。因此,尝试通过将 Web 应用程序部署到 tomcat 来检查它。

如果您想在 Eclipse IDE 中执行它,请转到窗口-> 首选项-> 常规-> 工作区并选择“自动刷新”选项。

于 2012-04-21T10:12:32.980 回答