为什么在JSP页面上不显示图像

时间:2012-09-29 06:13:10

标签: java image jsp servlets

我对以下情况有点失落:

  1. 用户上传图片 - upload.jsp(multipart / form-data)
  2. servlet完成所有脏工作(保存图像,获取名称,保存名称,重定向到display.jsp)
  3. 在display.jsp上,只显示上传的图片
  4. 不幸的是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)
    

    以下是用于上传,处理和显示图片的代码:

    upload.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>
    

    Upload.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}中替换之前上传的特定图像的静态名称,那么显示没有问题,所以我认为图像处理正确只是前方缺少某些内容?

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

    干杯,

    托马斯

2 个答案:

答案 0 :(得分:0)

很好的解释。我解决了你的问题并创建了它的样本。我遇到同样的问题。 解决方案是放在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>

希望这对你也有用

谢谢

答案 1 :(得分:-1)

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

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

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

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