0

サーブレットで imageio を使用して画像を表示するための Web アプリケーションがあります。jre 1.6 を使用して tomcat 7 でホストされている場合、webapp は正常に動作します。しかし、サーブレット 2.4 および Jre 1.5 を使用して Tomcat 5.5 にデプロイした場合、同じ webapp は機能しません。画像にアクセスするには、パラメーターとして識別子を渡し、DB の blob 列である画像を取得します。最初に、Eclipseを使用してTomcat 7インスタンスでアプリケーションを開発しましたが、うまくいきました。コンパイラ バージョンの互換性は 1.5 として選択され、動的 Web モジュールのバージョンは 2.4 です。以下のコードでは、jdbc 接続を確認しました。正常に動作し、テキスト情報を表示できます。また、nullをチェックしてBufferedImageにデータがあるかどうかを個別にチェックしましたが、データがあるようです。しかし、サーブレットは単に画像を表示できず、空白の画面が表示されます。

Tomcat 7 で動作 [http://localhost:8081/testimage/ReturnImage?code=AUS]

Tomcat 5.5 では動作しません [http://localhost:8080/testimage/ReturnImage?code=AUS]

サーブレットは、後者の空白の画面を表示するだけです。以下は私のサーブレットのコードです。

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();
        }   
    }       
}

イメージは、2 つの異なる Tomcat インスタンスでのサーブレット出力を示しています。Tomcat 5.5 は JDK1.5 を使用し、Tomcat 7 は JDK 1.6 を使用します。

4

1 に答える 1