使用imageio java 1.5 update 22在servlet上显示图像

时间:2013-06-01 10:16:21

标签: servlets javax.imageio tomcat5.5

我有一个web应用程序,用于在servlet上使用imageio显示图像。使用jre 1.6在tomcat 7中托管时,webapp工作正常。但是在使用servlet 2.4和Jre 1.5的tomcat 5.5上部署相同的webapp时它不起作用。为了访问图像,我传递一个标识符作为参数,我得到的图像是DB中的一个blob列。最初我使用eclipse在tomcat 7实例上开发了应用程序,它工作正常。编译器版本兼容性选择为1.5,动态Web模块版本为2.4。在下面的代码我检查了jdbc连接,它工作正常,我可以显示文本信息。此外,我已经通过检查null来分别检查BufferedImage是否有一些数据,它似乎有数据。但servlet根本无法显示图像,我最终得到一个空白屏幕。

适用于tomcat 7 [HTTP://本地主机:8081 / testimage / ReturnImage代码= AUS]

不能在tomcat 5.5上运行 [HTTP://本地主机:8080 / testimage / ReturnImage代码= AUS]

servlet只显示后者的空白屏幕。 下面是我的servlet的代码。

package flags;

import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.*;
import java.awt.image.BufferedImage;

public class ReturnImage extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        //PrintWriter out = response.getWriter();
        // OutputStream outimg = response.getOutputStream();

        try {
            Class.forName("com.mysql.jdbc.Driver");

            Connection connection = DriverManager.getConnection(
                    "jdbc:mysql://192.168.2.2:3306/world", "root", "abcdef");

            //out.println("Connecting to database <br>");

            Statement statement = connection.createStatement();
            String param;
                param = request.getParameter("code");

            String sql = "Select Name,Flag,Code from world.Country where Code='"+ param + "'";
            ResultSet res = statement.executeQuery(sql);
            while (res.next()) {
                String Name = res.getString("Name");
                String Code = res.getString("Code");
                BufferedImage image = javax.imageio.ImageIO.read(res.getBlob("Flag").getBinaryStream());
                //out.println(System.getProperty("java.runtime.version"));
                //out.println(Code + " ");
                //out.println(Name + "<br>");
                if (image == null) {
                    //out.println("null image");
                }
                 ImageIO.write(image, "gif", outimg);
                 outimg.close();        
            }
            res.close();
            statement.close();
            connection.close();

        } catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }   
    }       
}

Image显示两个不同tomcat实例中的servlet输出。 Tomcat 5.5使用JDK1.5,Tomcat 7使用JDK 1.6

1 个答案:

答案 0 :(得分:0)

您可能需要正确设置setContentType(正如您目前所做的那样)。

但是,您是否尝试使用其他格式,如PNG(当然,使用“image / png”作为内容类型)?由于过去的LZW许可问题,我不确定Java 1.5是否有GIF编写器。请注意,ImageIO.write方法具有布尔返回类型,以检查是否写入了任何内容。无论如何,PNG应该始终有效。

PS:除非你打算修改servlet中的图像,否则在blob中以正确的格式存储图像当然要快得多,只需将其传递给客户端而不对其进行解码/编码。 / p>