【问题标题】:Why image is not showed on JSP page为什么图像不显示在 JSP 页面上
【发布时间】:2012-09-29 06:13:10
【问题描述】:

我对以下情况有点迷茫:

  1. 用户上传图片 - upload.jsp (multipart/form-data)
  2. servlet 完成所有脏活(保存图像、获取名称、保存名称、重定向到 display.jsp)
  3. 在 display.jsp 上,应该显示刚刚上传的图片

很遗憾,display.jsp 页面是空的。当我在 Firefox 下查看源页面时,一切似乎都很好,提供了指向图像的有效链接。

<img src="/UploadTest/avatar/55_445194458350473498.png" border=0 width="48px" height="48px"/>

但在媒体信息下我可以看到一些奇怪的信息:

Location:   http://localhost:8084/UploadTest/avatar/55_445194458350473498.png
Type:       text/html
Size:       Unknown (not cached)
Dimensions: 0px x 0px (scaled to 0px x 16px)

这是用于上传、处理和显示图片的代码:

上传.jsp

<form action="Upload" method="post" enctype="multipart/form-data">
  <label for="file">File:</label>
  <input type="file" id="file" name="file">
  <input type="submit" value="submit">
</form>

上传.java

(MultipartMap servlet 属于 BalusC,http://balusc.blogspot.com.au/2009/12/uploading-files-in-servlet-30.html

package test;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import test.MultipartMap;


@WebServlet(urlPatterns = { "/Users/Thomas/NetBeansProjects/UploadTest/web/Upload" })
@MultipartConfig(location = "/Users/Thomas/NetBeansProjects/UploadTest/web/avatar", maxFileSize = 10485760L) // 10MB.
public class UploadServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {  
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
    {

    MultipartMap map = new MultipartMap(request, this);

    File file = map.getFile("file");

    String filename = file.getName();

    HttpSession session = request.getSession();
    session.setAttribute("filename", filename);

    request.getRequestDispatcher("/display.jsp").forward(request, response);
    }
}

display.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
  </head>
  <body>
      <div>
          <img src="${pageContext.request.contextPath}/avatar/${filename}" border=0 width="48px" height="48px"/>
      <div>
  </body>
</html>

如果我在 display.jsp 中将 ${filename} 替换为之前上传的特定图像的静态名称,则显示没有问题,所以我认为图像已正确处理,只是前端缺少某些东西?

顺便说一句:当调试器处于活动状态时,一切正常,但当关闭时问题又回来了。

干杯,

托马斯

【问题讨论】:

  • 使用&lt;img src="avatar/${filename}" /&gt;。无需采取上下文路径
  • 在您的注释中,您有 location = "/Users/Thomas/NetBeansProjects/UploadTest/web/avatar"。但是在您的链接中,您有 src="/UploadTest/avatar/55_445194458350473498.png"。那是错字吗?头像文件夹在web文件夹吗?
  • @rickz 是的,头像文件夹在 web 文件夹中。
  • 好的,将 display.jsp 中的链接更改为
  • @rickz 这不是一个好的位置,正如我之前所说的,文件的位置没有问题,src 标签指向正确的图像。问题是为什么图片是text/html类型的?

标签: java image jsp servlets


【解决方案1】:

很好的解释。我解决了你的问题并创建了它的样本。我有和你一样的问题。 解决方案是在 display.jsp 文件中放入以下行:

<%@page isELIgnored="false" %>

我认为 EL 和页面的问题无法正确评估。 下面是代码: upload.jsp 和 upload.java 和你的一样。

display.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page isELIgnored="false" %>
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
  </head>
  <body>
      <div>
          <img src="${pageContext.request.contextPath}/images/${filename}" border=0 width="48px" height="48px" alt="Image Not found"/>
      <div>
  </body>
</html>

希望这对你也有用

谢谢

【讨论】:

  • 谢谢你,但问题出在其他地方。我改变了一点upload.jsp 来确定,但结果是一样的。在upload.jsp 中添加了2 行: String filename1 = file.getName();字符串文件名2 = "55_4518625602858925634.png";在 Display.jsp 中: ${filename2} 显示但不显示 ${filemame1
【解决方案2】:

您可以在图片查看器中查看上传的图片吗?

文件大小是否正确且数据未损坏?

您的服务器是否在 8084 端口上运行?

我想知道为什么你输入 text/html 而应该是 image/png。

【讨论】:

  • 上传前和上传后的图片完全正确。我可以在浏览器中看到它们,但前提是没有给出真实姓名 ${filename} 变量。
  • 你使用什么调试器?你使用 Apache Tomcat 吗?
  • @MagnusStrand:这是你的答案吗?我这里只看到一些cmets
  • @codeMaker: 抱歉,我还不能制作 cmets why-cant-i-comment-on-this-answer
猜你喜欢
  • 2012-09-29
  • 1970-01-01
  • 2019-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多