我有一个JSP页面,我有一个div标签,其中有一个IMG标签。使用这个IMG标签我想在其中显示一个图像。这里图像的源路径来自数据库,因此我使用JSP scriplet分配了一个JSP变量。此JSP变量具有图像的源路径。 该图像路径可以是不同的机器或同一机器,即图像存储在不同的机器上或同一机器上,即存储在不同驱动器上的本地机器上。 问题是如何给出存储在不同机器上以及同一台机器上的图像路径。我尝试了不同的方法,比如提供该机器的IP地址。 以下是存储图像的本地计算机的路径
img src = file:\ localhost \ D:\ ScannedSheets \ testproj / batch1 / IMG001.jpg style =“z-index:1; position:absolute; top:0; left:0; width:850 ;身高:1099“
使用此语法,图像在Internet Explorer中可见但具有相同的语法在FireFox,Google Chrome等中不可见。
请指导我的朋友。
另请告诉我如何提供存储在Internet Explorer,FireFox,Google Chrome等工作的不同机器上的图像路径。
答案 0 :(得分:3)
如果要在互联网上发布此页面,请不要对img标签使用绝对路径。不起作用。请改用相对路径。您需要将图片保存在与html页面相同的目录级别。例如,如果您的页面存储在此处: C:\ Web \ Page.html ,那么请将图片放在此处 C:\ Web \ Images \ IMG001.jpg 。
您的代码应如下所示:
<img src="Images/IMG001.jpg" style="z-index:1; position:absolute; top:0; left:0; width:850; height:1099" />
编辑:
对于带图片处理程序的远程服务器:
<img src="http://remoteserver/ImageHandler/?imageId=2323" style="z-index:1; position:absolute; top:0; left:0; width:850; height:1099" />
您将需要实现图像处理程序,如下所示:
从图像ID
从标识路径返回到客户端浏览器的图像流
答案 1 :(得分:0)
File URIs应采用file://host/path
格式,因此对于您的示例,它将是
img src =“file:// localhost / D:/ScannedSheets/testproj/batch1/IMG001.jpg”......
我已经在IE,Firefox,Opera上尝试过了,它可以运行。我没有Chrome,但我认为它应该没有问题。但是,当您使用文件URI时,还有其他注意事项,例如,您无法访问其他Windows计算机上的图像,除非它位于共享文件夹中,并且远程计算机上的文件语法因浏览器而异。 (有关详细信息,请参阅wikipedia)
因此,如果要在Intranet或Internet上公开提供此JSP文件,最好将图像存储在Web服务器上的外部可访问文件夹中,并使用IMG标记中的相对或绝对HTTP URI引用它们(一个或多个)。
答案 2 :(得分:0)
不要忘记ALT
标记:
<img src="Images\IMG001.jpg" style="z-index:1; position:absolute; top:0; left:0; width:850; height:1099" alt="some name to this image for google" />
答案 3 :(得分:0)
HTML src
元素的<img>
属性应指向URL,而不是指向本地磁盘文件系统路径。 HTML页面即从服务器机器下载到客户机并在客户机上解析。 HTML页面中出现的任何URL(例如Javascripts,Stylesheets,Images等)都将从客户端重新调用。如果客户端遇到本地磁盘文件系统路径,它将尝试在自己的本地磁盘文件系统中搜索该文件。如果服务器和客户端在物理上是不同的机器,则无法工作。
在您的特定情况下,有两种方法可以解决此问题。
将新的webapplication上下文添加到servletcontainer中,纯粹用于提供静态文件。目前还不清楚你正在使用哪个servlet容器,但它是Tomcat,那么你基本上需要做的就是将以下Context
元素添加到/conf/server.xml
:
<Context docBase="/path/to/images" path="/images" />
通过这种方式,http://example.com/images/....
可以访问它们。
创建一个Servlet
类,使用java.io.File
获取图像文件的InputStream
并将其写入响应的OutputStream
。您可以使用请求参数或pathinfo来标识图像。以下是这种servlet的基本示例:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
String filename = URLDecoder.decode(request.getPathInfo(), "UTF-8");
File file = new File("/path/to/images", filename);
response.setContentType(getServletContext().getMimeType(file.getName()));
response.setContentLength(file.length());
response.setHeader("Content-Disposition", "inline; filename=\"" + file.getName() + "\"");
BufferedInputStream input = null;
BufferedOutputStream output = null;
try {
input = new BufferedInputStream(new FileInputStream(file));
output = new BufferedOutputStream(response.getOutputStream());
byte[] buffer = new byte[8192];
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
} finally {
if (output != null) try { output.close(); } catch (IOException ignore) {}
if (input != null) try { input.close(); } catch (IOException ignore) {}
}
}
将其web.xml
映射到url-pattern
,例如/images/*
。这样您就可以通过http://example.com/images/filename.jpg
访问图像。
<img src="/images/filename.jpg">
可以找到另一个图像servlet示例here。