У меня есть приложение для отображения изображений с использованием imageio на сервлете. Webapp отлично работает при размещении в tomcat 7 с использованием jre 1.6. Но тот же webapp при развертывании на tomcat 5.5 с сервлетом 2.4 и Jre 1.5 он не работает. Чтобы получить доступ к изображению, я передаю идентификатор в качестве параметра, и я получаю изображение, которое является столбцом blob в БД. Первоначально я разработал приложение на экземпляре tomcat 7 с использованием eclipse, и он отлично работал. Совместимость версий компилятора выбрана как 1,5, а версия динамического веб-модуля - 2,4. В приведенном ниже коде я проверил подключение jdbc, он отлично работает и я могу отображать текстовую информацию. Кроме того, я проверил отдельно, имеет ли BufferedImage некоторые данные, проверяя значение null, и, похоже, данные имеют данные. Но сервлет просто не может показать изображение, и я просто получаю пустой экран.отображение изображения на сервлет с использованием imageio java 1.5 update 22
работы по коту 7 [HTTP: // локальный: 8081/testimage/ReturnImage код = AUS]
не работает на TOMCAT 5,5 [Http: // Localhost:? 8080/testimage/ReturnImage код = 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();
}
}
}
Image показывает вывод сервлета в двух различных случаях TOMCAT. Tomcat 5.5 использует JDK1.5, а Tomcat 7 использует JDK 1.6
Я добавил response.setContentType ("image/gif"); но все, что я вижу сейчас, это коробка с крестом в ней. –
Я попытался переназначить JVM tomcat 5.5 клиенту jvm.dll jre 1.6 и теперь смог отобразить изображение. Как я могу исправить это, не сообщая об этом более новой версии. Я спрашиваю об этом, потому что я не могу изменять такие настройки в производственной коробке. У более старой JRE уже есть необходимые библиотеки, так что точно не удается. Пожалуйста помоги!!! –
Почему вы декодируете и кодируете изображение в первую очередь? Планируете ли вы с ним сделать обработку изображений, добавьте метаданные, водяные знаки или что-то подобное? Почему бы не потопить blob напрямую, а также правильный тип контента? – haraldK