我有一个 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://localhost:8081/testimage/ReturnImage?code=AUS]
不适用于 tomcat 5.5 [http://localhost:8080/testimage/ReturnImage?code=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();
}
}
}
图像显示了两个不同 tomcat 实例中的 servlet 输出。Tomcat 5.5 使用 JDK1.5,Tomcat 7 使用 JDK 1.6