在jsp中显示图像时出错

时间:2013-01-28 23:26:14

标签: java jsp tomcat

我知道有一些相关的问题,但没有一个涵盖我的主题。

所以,我有一个使用嵌入NetBeans(作为插件)的jsp,java,postgresl和apache tomcat 7.0.27.0的web应用程序,并且在项目的web目录中我有一个116.jpg图像

当我显示这样的图像时:< img src='116.jpg' alt='title' />

正确显示。现在,我想显示一个我刚刚上传的图像,然后它进入了一个与之相关的目录:一个目录,然后是文件夹'data',最后是'img'文件夹。因此,从技术上讲,< img src='../data/img/117.jpg' alt='title' />然而,这并未显示。此外...

我想自动完成。在这里<%= sUploadFName %>我有用户上传的图片的名称(例如865.jpg)。

所以,我想要这样的东西才能工作: < img src='../data/img"<%= sUploadFName %>"' alt='title' />,图片应该正常显示。

任何人都能解释一下我做错了什么吗?提前谢谢。

2 个答案:

答案 0 :(得分:2)

只有web(WEB-INF和META-INF除外)文件夹的内容可以通过网址公开访问,因此您上传的图片必须位于web或其中。

如果要将图像存储在另一个目录中,则必须创建一个扩展HttpServlet的类并将其映射到URL,例如/myapp/uploads/*/myapp是ContextPath )每当访问该URL时,例如/myapp/uploads/119.jpg使用request.getPathInfo()方法获取文件名并执行所需的验证(文件存在,permisions等),然后读取文件并通过{{1输出流。

或者,如果不需要权限验证,您可以将tomcats Default Servlet映射到HttpServletResponse url模式。

图片代码的来源为/uploads/*

这是一个示例servlet:

<img src="/myapp/uploads/119.jpg" alt="Image" />

然后在package servlets; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.*; public class StreamServlet extends HttpServlet { private static final String WINDOWS_UPLOAD_DIR = "C:\\Projects\\Data\\img"; /** * Serve the images from the specified dir. * * @param req * @param resp * @throws ServletException * @throws IOException */ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String fileName = req.getPathInfo().substring(1); File imageFile = new File(WINDOWS_UPLOAD_DIR, fileName); OutputStream os = resp.getOutputStream(); InputStream is = new FileInputStream(imageFile); IOBridge(is, os); os.flush(); Close(is, os); } /** * Bridge data between an input and output stream. * * @param in The input stream. * @param out The output stream * @throws IOException if there's an error. */ private static void IOBridge(InputStream in, OutputStream out) throws IOException { byte data[] = new byte[1024]; int readCount = 0; while ((readCount = in.read(data, 0, readCount)) != -1) { out.write(data); } } /** * Close some closeables * * @param closeables The closeables to be closed. */ private static void Close(Closeable... closeables) { for (Closeable c : closeables) if (c != null) try { c.close(); } catch (IOException ioe) { try { c.close(); } catch (Exception e) { e.printStackTrace(); } } finally { try { c.close(); } catch (Exception e) { e.printStackTrace(); } } } } 中添加:

web.xml

Java Servlet Speciciation 3.0

答案 1 :(得分:1)

您的问题不是jsp,而是图片的网址错误。

如果

没有显示图像
< img src='../data/img/117.jpg' alt='title' />

这意味着要么你对图片的位置错误,要么有一些拦截器。也许图像是在文件系统中组织的,就像你写的那样,但这并不意味着url也是以这种方式组织的。检查web.xml是否存在用于图像的servlet映射或类似的东西。底线是如果平面img不工作不修复jsp :)首先你需要找到正确的图像网址,之后会很容易