【问题标题】:How to refresh static resources in Java Web Application?如何刷新 Java Web 应用程序中的静态资源?
【发布时间】:2013-12-09 20:55:40
【问题描述】:

我正在开发一个动态存储数据并在生成或上传数据时显示它的应用程序。但问题是当我上传任何图像时,它应该被显示。它的路径也被完美定义,但直到我在 Eclipse 中刷新整个应用程序之前它保持不变。 所以要更新应用程序,我必须刷新它。

我的应用程序是基于 Java 的,并且使用 JSP 和 Servlet。是否有任何代码可用于更新或刷新应用程序?

现在我正在通过右键单击 -> 刷新或直接 F5 进行操作。

或者假设我想创建目录,那么我必须在哪里创建可以轻松访问而无需刷新的目录。

当我托管我的应用程序时,哪个地方更适合存储数据? 我知道它在网络应用程序之外,但有什么特定的地方吗?因为没有驱动器,所以我如何创建或制作目录并在我的代码中访问该目录。

【问题讨论】:

    标签: java eclipse servlets


    【解决方案1】:

    对此的解决方案是一个名为Observer 的design pattern。你应该阅读它。

    【讨论】:

    • 没问题。如果您在理解这一点时遇到问题,我可以通过一个简单的示例来帮助您。
    • 是的,先生,如果可能的话。我需要它。
    • 观察者模式如何在这方面提供帮助?
    • 每当他想添加/上传东西..他可以通知观察者并刷新列表/应用程序
    【解决方案2】:

    是否有任何代码可用于更新或刷新应用程序? 现在我正在通过右键单击 -> 刷新或直接 F5 进行操作。

    我认为您需要查看 Eclipse 中的工作区重新刷新选项(从 Eclipse 版本 3.7.x 提供)。您可以在 Preferences > General > Workspace 中启用它并选择 Refresh on access 或根据需要更改为您需要的任何设置。

    当我托管我的应用程序时,哪个地方更适合存储数据?我知道它在网络应用程序之外,但有什么特定的地方吗?因为没有驱动器,所以我如何创建或制作目录并在我的代码中访问该目录。

    静态内容的位置最好放在项目本身范围之外。也许您服务器上的其他目录(可以是任何目录)。

    我可以分享我通常在我个人从事的不同应用程序中看到的趋势。我们有一个单独的 tomcat 服务器,它只托管所有静态内容(所有媒体),我们的 Web 应用程序在安全网络中访问该静态服务器(如其名称)。所有对静态内容的点击都只能通过我们的应用服务器进行,​​因此所有直接点击要么被拒绝,要么根本不被接受。

    编辑

    我建议使用绝对路径 在windows环境下 您将不得不使用驱动器字母 并将路径指定为 X:\some\path 如果你想隐藏你的盘符 由于明显的安全原因 我可以提出另一个想法

    想法 1:制作一个单独的驱动器(我们称之为驱动器 F)并创建一个名为“static”的文件夹。然后在您的应用程序中,您只需使用此路径 (F:\static......) 将所有请求转发到文件上传。我建议从属性文件中加载目录名称,而不是在代码中硬编码

    想法 2 :如果您无法制作单独的驱动器,则在同一驱动器的根目录 ( C:\static ) 上创建一个名为“静态”的目录。创建一个用户组并授予他对该驱动器的读/写权限,并撤销该用户在所有其他驱动器上的写权限(以防万一有人弄乱了该用户组)。接下来做与上面相同的事情,即在您的应用程序中指定此路径。一件事是您必须使用该特定用户组运行您的应用程序,以确保可以实施您设置的权限安全性。

    【讨论】:

    • 您是如何将图像动态放置在项目中的?通过任何脚本?
    • 使用上传机制,我现在使用的是ServletContext sc=request.getSession().getServletContext();sc.getRealPath("product_images\\")
    • 来自您的应用程序?等等,您的意思是您正在通过您的应用程序(在您的 Eclipse 中运行)上传这些图像,并且您希望这些图像在上传到项目路径时立即显示给您?如果我错了,请纠正我。这个 `product_images\` 是在项目根目录上还是在其他路径上?
    • 是的,我想在应用程序中上传图像并立即加载。 product_image\ 是存储图像的目录。我想将图像存储在应用程序之外,但是如何提供它的路径,如果它不存在,那么我该如何创建该目录?
    • 要创建目录和路径,请查看这篇帖子here。恕我直言,这是用 Java 创建文件的最佳解决方案。
    【解决方案3】:

    最佳做法是将此类数据存储在 webapp 的树之外,以避免重新部署时出现问题。

    但您不能直接提供这些文件,通常是通过创建映射到例如的 servlet 来完成。 images/*;解析请求 URL(例如)并基于该 url 获取和服务。您需要为输出设置正确的 MIME 类型,并将请求的文件流式复制到 servlet 的输出。

    可以在BalusC's blog 上找到此类 servlet 的详细解释示例。

    【讨论】:

    • 我使用的是 Eclipse 4.3 (KEPLER)。
    • 它也有这个偏好
    • 是的,我已经检查过了,并且该选项被选中。但我想重新加载或刷新整个应用程序,但在我手动刷新它之前它不起作用。有任何代码或任何可以帮助我的东西吗?
    • 先生,我读过博客,但我还是不明白这是什么意思??所以如果你能给我一个小例子或想法,那么我会很感激你。
    猜你喜欢
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多