1

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

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

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

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

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

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

4

1 回答 1

1

我明白了。。谢谢。

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

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

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

现在你能做什么?

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

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

例子

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

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

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

你这样做:

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

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

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

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

希望这可以帮助

于 2012-10-11T11:33:00.180 回答