【问题标题】:Reloading resources in Java Web Application在 Java Web 应用程序中重新加载资源
【发布时间】:2012-10-11 10:03:25
【问题描述】:

我从硬盘上传一张图片,然后将其存储在我的应用程序的某个文件夹中。
但是图像不会立即显示在我的 JSP 上,只有在我重新启动应用程序后才会显示。
我猜这是因为加载应用程序资源时,目标文件夹中尚不存在所需的图像文件。
因此,我认为在将图像文件存储到目标文件夹后立即以编程方式重新加载应用程序资源可以解决我的问题,但我不知道该怎么做。

更新 1: 部分 jsp 被要求提供图像:

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

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

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

谁能帮帮我?
提前致谢。

【问题讨论】:

  • 您在应用程序中上传或存储图像的位置?
  • 我将图像存储在“webapps/img”中,靠近 WEB-INF 文件夹。
  • 您能否添加一个代码 sn-p,说明您如何在 jsp 中显示图像?
  • 你使用什么 servlet 容器?您是否将应用程序部署为爆炸(无战争档案)?您是否尝试删除存在已编译 JSP 类的工作目录?
  • @MarkBramnik 刚刚进行了更新,请参阅帖子

标签: java jsp servlets resources classloader


【解决方案1】:

我明白了。。谢谢。

这就是发生的事情(恕我直言:)):

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

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

现在你能做什么?

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

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

例子

&lt;img src="resource?imageName=${imageNameYouWant}" /&gt;

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

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

你这样做:

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

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

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

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

希望对你有帮助

【讨论】:

  • 那么,您能否建议我应该将图像放在哪里以及如何访问它们?
  • 我已经扩展了我的答案,有帮助吗?
  • 我将立即尝试第二种方法。您能否澄清一下,如果我将替换“webapp”外部的“img”文件夹并将图像存储在“d:/img/”中,我应该如何访问 JSP 上的图像?
  • 如果第二种方法不能成功,我会尝试使用 servlet。
  • 我再次更新了答案(虽然取决于 Web 容器)
猜你喜欢
  • 2011-05-18
  • 1970-01-01
  • 2016-07-07
  • 2012-04-11
  • 2011-01-15
  • 2021-01-06
  • 2013-12-09
  • 1970-01-01
  • 2023-03-23
相关资源
最近更新 更多