2013-11-25 88 views
1

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

我的应用程序是基于Java的,正在使用JSP和Servlet。有没有可用于更新或刷新应用程序的代码?

现在我正在通过右键单击 - >刷新或直接F5它。

或者假设我想创建目录,那么我需要在哪里创建它,以便在不刷新的情况下轻松访问。

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

回答

2

是否有任何可用于更新或刷新应用程序的代码? 现在我正在通过右键点击 - >刷新或者直接F5呢。

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

enter image description here

当我会主办我的应用程序,然后哪个地方来存储数据好?我知道这是在网络应用程序之外,但任何特定的地方?因为没有驱动器,所以如何创建或制作目录并在我的代码中访问该目录。

如果放置在项目本身的范围之外,静态内容的位置最好。也许在你的服务器上的其他目录(无论是任何目录)。

我可以分享一下我亲身参与的不同应用程序中通常看到的趋势。我们有一个单独的tomcat服务器,它只托管所有静态内容(所有媒体),我们的Web应用程序在安全网络中访问该静态服务器(因为它被命名)。所有命中静态内容只能通过我们的应用程序服务器来完成,因此所有直接命中或者被拒绝或者根本不被接受。

编辑

我会建议使用绝对路径 和Windows环境 你将不得不使用的驱动器lletter 和路径指定为X:\一些\路径 如果你想隐藏你的来信驱动 由于明显的安全原因 我可以建议另一种思路

想法一:做一个单独的驱动器(可以称之为驾驶F),并与T A文件夹他的名字是“静态”。然后在您的应用程序中,您只需使用此路径将所有请求转发到文件上传(F:\ static ......)。我会建议从属性文件加载的目录名称,而不是硬编码在你的代码

想法2:如果你不能让一个单独的驱动器,然后建立一个目录,即“静态”上的同根驱动器(C:\静态)。建立一个用户组,给他在这个驱动器上的读/写权限,并撤消这个用户在所有其他驱动器上的写入权限(以防有人用这个用户组混淆)。接下来做与上面相同的事情,即在应用程序中指定此路径。有一件事是,你将不得不使用该特定的用户组来运行你的应用程序,以确保你所设置的权限安全性可以被实现。

+0

该选项已被选中。 –

+0

您究竟如何动态地将图片放入项目中?通过任何脚本? –

+0

使用上传机制,现在我正在使用'ServletContext sc = request.getSession()。getServletContext();''sc.getRealPath(“product_images \\”)' –

3

对此的解决方案是design pattern,称为Observer。你应该阅读它。

+0

帮助我很多,谢谢。 –

+0

没问题。如果你在理解这个问题时遇到了问题,我可以用一个简单的例子来帮助你。 – VladH

+0

是的,先生,如果有可能的话。我需要它。 –

1

最佳做法是将这些数据存储在Web应用程序树之外,以避免重新部署时出现问题。

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

可以在BalusC's blog上找到这样的servlet的一个很好解释的例子。

+0

我正在使用eclipse 4.3(KEPLER)。 –

+0

它确实有这个偏好以及 –

+0

是的,我已经检查过它,并检查了该选项。但我想重新加载或刷新整个应用程序,但它不工作,直到我手动刷新它。有没有任何代码或任何可以帮助我的东西? –

相关问题