从servlet在jsp页面中显示图像

时间:2011-04-01 04:58:17

标签: java jsp servlets

我的代码是上传图片并将图片保存到我的服务器,但我需要在我的jsp页面中显示图片。

用于上传图片的jsp

uploadImage.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head><title>Image Upload</title></head>

<body>
  <form action="UploadImage" method="post" enctype="multipart/form-data" 
           name="productForm" id="productForm"><br><br>
    <table width="400px" align="center" border=0 style="background-color:ffeeff;">
      <tr>
        <td align="center" colspan=2 style="font-weight:bold;font-size:20pt;">
           Image Details</td>
      </tr>

      <tr>
        <td align="center" colspan=2>&nbsp;</td>
      </tr>

      <tr>
        <td>Image Link: </td>
        <td>
          <input type="file" name="file" id="file">
        <td>
      </tr>

      <tr>
        <td></td>
        <td><input type="submit" name="Submit" value="Submit"></td>
      </tr>
      <tr>
        <td colspan="2">&nbsp;

        </td>
      </tr>

    </table>
  </form>
</body>

</html> 

Servlet

UploadImage

public class UploadImage extends HttpServlet {
    /**
     * 
     */

    private static final long serialVersionUID = 2082405235440894340L;

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        File filenameImg;
        List<FileItem> items = null;
        try {
            items = new ServletFileUpload(new DiskFileItemFactory())
                    .parseRequest(request);
        } catch (FileUploadException e) {
            throw new ServletException("Cannot parse multipart request.", e);
        }

        for (FileItem item : items) {
            if (item.isFormField()) {
                // Process regular form fields here the same way as
                // request.getParameter().
                // You can get parameter name by
                item.getFieldName();
                // You can get parameter value by item.getString();
            } else {

                try{
                    // Process uploaded fields here.
                    String filename = FilenameUtils.getName(item.getName());
                    // Get filename.
                    String path = GetWebApplicationPathServlet.getContext().getRealPath("/images");

                    File file =  new File(path,filename);


                    //File file = new File("C:\\", filename);

                    // Define destination file.

                    item.write(file);
                    System.out.println("filename: "+filename);
                    System.out.println("file: "+file);
                    request.setAttribute("image", file);
                    filenameImg = file;
                    // Write to destination file.
                //  request.setAttribute("image", filename);
                }
                catch (Exception e) {
                    e.printStackTrace();
                }

            }
        }
        // Show result page.


        System.out.println("request"+request.getAttribute("image"));
        response.setContentType("image/jpeg"); 
        //request.getRequestDispatcher("result.jsp").forward(request, response);

        String nextJSP = "/result.jsp";
        RequestDispatcher dispatcher = getServletContext()
                .getRequestDispatcher(nextJSP);
        dispatcher.forward(request, response);

    }

}

result.jsp中

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%=request.getParameter("image")%>

<img src="<%=request.getParameter("image")%>">
</body>
</html>

&LT;%=用request.getParameter( “图像”)%&GT;  在result.jsp页面中返回为null

帮助

5 个答案:

答案 0 :(得分:9)

我正在考虑您在服务器上的某处存储图像文件 -

  1. 如果该路径在您的应用程序内,那么您可以直接在图像src属性中提供该路径,例如 -
    如果您将文件存储在<context root>/resources/image/someImage.jpg之类的某个位置,那么您可以提供该路径(路径应位于应用程序内部,可通过浏览器使用您的上下文rrot访问)image src属性和浏览器将指向该图像。
  2. 您可以将文件存储在服务器的某个位置(在应用程序之外说“d:\ someImage.jpg”),然后浏览器无法直接访问该文件,但您仍然可以通过servlet显示该图像,例如 -
    你可以编写一个新的servlet,在goGet方法中,你可以读取图像文件并将其写入响应输出流。将此servlet url放在图像的src中,如 -
  3. e.g。

    <image src="context root/displayServlet?image=someImage.jpg">
    


    servlet代码可能看起来像 -
    编辑 - 有关更好的代码,请参阅How to retrieve and display images from a database in a JSP page?

    try{
             String fileName = request.getParameter("image");             
             FileInputStream fis = new FileInputStream(new File("d:\\"+fileName));
             BufferedInputStream bis = new BufferedInputStream(fis);             
             response.setContentType(contentType);
             BufferedOutputStream output = new BufferedOutputStream(response.getOutputStream());
             for (int data; (data = bis.read()) > -1;) {
               output.write(data);
             }             
          }
          catch(IOException e){
    
          }finally{
              // close the streams
          }
    

    您可以改进此代码,我只是举个例子。

答案 1 :(得分:2)

<img src="<%=request.getParameter("image")%>">

首先src img标记只将图片路径视为字符串,因此您无法在其中传递整个图像。

现在您可以做的是: - 当您在服务器上传图片时,请不要在请求中保存/传递整个图片文件,而只是在您上传图片的请求中添加图片路径。您的代码路径为path + *file separator* + filename。将它传递给img标签的src,它就可以了。此处文件分隔符可以是"/""\\"

希望这有帮助。


正如BalusC在评论中所建议的那样,最好使用<img src="${param.image}" />

答案 2 :(得分:1)

你采取的方法有两个错误。首先,在上面的servlet代码中,您编码就像下载图像文件一样(您已将内容类型设置为图像。

其次,您无法将图像文件与响应相关联。不是通过图像参数或通过流。

现在,既然你已经混淆了两种方法......你需要先确定你需要什么。根据您的解释,我了解您正试图在result.jpg中显示上传的图像。在这种情况下,您无需发送内容类型设置的图像。在result.jsp中,img标记需要显示图像的路径。因此,您需要将图像的路径设置为“图像”属性作为响应。

response.setAttribute("image", imagepath);
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(nextJSP);
dispatcher.forward(request, response);

图像路径应该是访问图像的一些有效URL。在result.jsp中,您需要:

request.getParameter("image");

获取图像。这是如何:

<img src='<%=request.getParameter("image")%>'>

答案 3 :(得分:0)

在您的servlet中设置一个请求属性,该属性将图像的完整路径返回给JSP。

String fullpath = path + File.separator + filename

request.setAttribute("fullpath",fullpath);

您已经将请求转发给JSP。

所以,现在使用

获取属性
<% 

String path = "";
if(request.getAttribute("fullpath")!=null)
    path = request.getAttribute("fullpath").toString();

%>
在JSP中

然后使用该路径显示图像

<img src='<%=path%>'>

答案 4 :(得分:0)

Jeje,null的问题是因为是不同的事情;属性和参数,如果你这样做:

request.setAttribute("image", file.getPath()); 

然后你需要这样做:

request.getAttribute("image")