Я пытаюсь создать веб-сайт, на котором изображения, связанные с определенной сущностью, отображаются над JSP, когда мы выбираем этот объект из раскрывающегося списка над предыдущим JSP. Я получаю изображения из базы данных MySQL. Я попытался развернуть свое приложение как в Oracle Weblogic 12c, так и в Apache Tomcat 7.x. и я столкнулся с почти подобным типом проблем с обоими.Изображения не отображаются должным образом над JSP
A. Weblogic - Отображалось только одно изображение (в случае, если в базе данных имеется несколько изображений, связанных с этим выпадающим списком), а также в первой попытке. Для остальных попыток я получаю ниже ошибки:
java.net.ProtocolException: Не встречал заявленную Content-Length, писал: «0» байтов вместо заявленных
Состояние 1: Только отображается одно изображение (при первом обращении к времени приложения с момента запуска сервера), даже если имеется несколько изображений, связанных с определенным раскрывающимся списком
Условие 2: Если я вернусь назад кнопкой браузера или снова удаляю URL (независимо от браузера) ничего не отображается до тех пор, пока Я не перезапуске сервера
A. Tomcat - история немного отличается в случае Tomcat.I я не получаю исключение по консоли в случае Tomcat
Состояние 1: только одно изображение отображается (в первый раз доступ к приложению с момента запуска сервера), даже если есть несколько изображений, связанных с определенным выпадающим списком. отдых всех изображений, используемых для показа, как разбитые на пару в течение секунд, пока страница загружается completely.When страницы загружается полностью только один образом, используемый, чтобы быть там (первой) и отдых всех сломанных изображений, используемых быть исчезло
Условие 2 : Если я вернусь назад кнопкой браузера или снова удаляю URL (независимо от браузера), не перезагружая сервер, все изображения, используемые для демонстрации как сломанные и используемые для исчезновения при полной загрузке страницы
С изображением страницы изображения Tomcat, используемой для вешать почти 5-10 секунд
соответствующая треска е фрагменты были приведены ниже:
MultiimageServlet.java
package com.ankit.controller;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Blob;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;
import com.ankit.dao.ImageDAO;
public class MultiImageservlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public MultiImageservlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try
{
int bufferSize = 8192;
BufferedInputStream input1 =null;
BufferedOutputStream output =null;
InputStream input =null;
java.net.URL url1=Thread.currentThread().getContextClassLoader().getResource("Log4j.xml");
DOMConfigurator.configure(url1);
Logger logger = Logger.getLogger(MultiImageservlet.class);
String imageName = request.getPathInfo().substring(1);
logger.info("imageName "+imageName);
List<Object> mixList = ImageDAO.find(imageName);
input = (InputStream) mixList.get(1);
input1 = new BufferedInputStream(input);
logger.info("input "+input);
Blob pic = (Blob)mixList.get(0);
logger.info("Blob "+pic);
int length = (int)pic.length();
response.setContentType("image/jpg");
response.setHeader("Content-Type", getServletContext().getMimeType(imageName));
response.setHeader("Content-Length", String.valueOf(pic.length()));
response.resetBuffer();
response.setHeader("Content-Disposition", "inline; filename=\"" + imageName + "\"");
//ServletOutputStream output = response.getOutputStream();
output = new BufferedOutputStream(response.getOutputStream());
byte[] buffer = new byte[bufferSize];
while ((length = input1.read(buffer)) != -1) {
System.out.println("writing " + length + " bytes");
output.write(buffer, 0, length);
}
input1.close();
output.flush();
output.close();
response.flushBuffer();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}}
MultiImages.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org /TR/html4/loose.dtd">
<%@ page import ="org.apache.log4j.*" %>
<%@ page import = "org.apache.log4j.xml.DOMConfigurator" %>
<%
int timeout = session.getMaxInactiveInterval();
response.setHeader("Refresh", timeout + "; URL = login.jsp");
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>multiImages</title>
</head>
<body>
<h1> Welcome <%=session.getAttribute("userName") %> </h1>
<% java.net.URL url1=Thread.currentThread().getContextClassLoader().getResource("Log4j.xml");
DOMConfigurator.configure(url1);
Logger logger = Logger.getLogger("multiImages.jsp");
logger.info("inside multiImages.jsp");
%>
<c:forEach items="${imageNames}" var="imageName">
<img src="MultiImageservlet/${imageName}" height="150" width="150">
<%
logger.info("multi servlet executed");
%>
</c:forEach>
<a href="logout.jsp"><b>Logout</b></a>
</body>
</html>
Глядя, как проблема размера буфера в каждом из case.Could кто-нибудь, пожалуйста, предложите. Почти застрял в течение 4-5 дней над тем же.
Зачем смешивать скрипты и JSTL? Вероятно, у вас есть «Исключение» в вашем JSP, поэтому вы не видите ничего похожего на ваш взгляд. Попробуйте использовать простой '', где шаблон '/ path/to/your/image' совпадает с вашим URL-адресом URL-адреса сервлета. Сделайте это для 2 или 3 изображений (для быстрого тестирования нескольких изображений), затем используйте правильный ответ сервлета, который пересылает на вашу страницу, чтобы заполнить ваши ''s. –
Спасибо за ответ, Luiggi.Well Я объяснил исключение выше в случае weblogic выше: java.net.ProtocolException: не отвечал заявленным Content-Length, написал: «0» байтов вместо заявленных. В случае с Tomcat я не получаю никаких исключений. –
Когда вы получите сообщение об ошибке? В соответствии с выходом на экране кажется, что изображение было написано полностью для ответа или оно прерывается в середине этого процесса? –