重新加载Java Web应用程序中的资源

时间:2012-10-11 10:03:26

标签: java jsp servlets resources classloader

我从硬盘上传了一张图片,然后将其存储在我的应用中的某个文件夹中 但是我的JSP上没有立即显示图像,只有在我重新启动应用程序后才会显示它 我想这是因为当加载app资源时,目标文件夹中还不存在所需的图像文件 因此,我认为在将图像文件存储到目标文件夹后立即重新加载app resource来解决我的问题,但我不知道如何做到这一点。

更新1: jsp的一部分是要求的图像:

<img src="${pageContext.servletContext.contextPath}/img/${imageUrl}" />

其中 imageUrl 是带有扩展名的图像文件名。

图像存储在 MyProject / src / main / webapp / img /

有人可以帮助我吗? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

我明白了..谢谢。

发生了什么(恕我直言:)):

在JSP处理期间,变量被解析为某个静态路径并被传递给浏览器。

浏览器在此处呈现静态内容,一旦它看到它向服务器发出额外的http请求的路径,但似乎您的服务器无法静态找到您的图像。 这是因为一旦部署后你无法改变战争物理结构。 就像使用基于文件的WAR表示而不是使用展开目录一样。

现在你能做什么?

尝试创建一个资源servlet,它将获取带来二进制映像的请求并将返回它。

在web.xml中注册此servlet,其路径如/,/ resource,并使其获取get参数imgName

示例

<img src="resource?imageName=${imageNameYouWant}" />

在你的jsp而不是img src标签中的静态内容中,用image作为参数调用servlet。 当浏览器看到它时会发出一个像以前一样的常规请求,但这次它会被资源servlet处理掉,它会带来图像。

我要尝试的另一件事是将图像文件夹移到webapp目录之外。 您的Web容器会自动跟踪此目录,但也没有理由将图像存储在那里。

你喜欢这样:

  1. 创建一个目录,如:/ myapp / images

  2. 您仍需要在服务器端创建一些组件。但是这次可以通过在Web服务器端创建一些配置(没有自定义servlet)来完成。 我不确定当你使用第一种方法时它会起作用......

  3. 在服务器上的JSP中,正如我上面已经解释的那样。

  4. 它是一个企业认真的应用程序我会推荐第一种方法与将数据存储在数据库中,但它是一个不同的故事:)

    希望这有帮助