У меня странная ситуация с моим сервлетом изображения. Он хорошо работает с Eclipse, внутренним веб-браузером, но не будет работать с FireFox, InternetExplorer, Chrome, Opera ....Image Servlet не хочет показывать изображение в браузере (FireFox, IE ..), но в браузере Eclipse работает?
кода сервлета (ниже)
защищен недействительной doPost (HttpServletRequest запрос, HttpServletResponse ответ) бросает ServletException, IOException {
File fl=new File("C:\\Documents and Settings\\Administrator\\My Documents\\Eclipse\\zadatak\\WebContent\\WEB-INF\\upload\\"); PrintWriter pw=response.getWriter(); response.setContentType("text/html"); pw.println("<html>"); pw.println("<head>"); pw.println("<style type=\"text/css\">"); pw.println("img{display:block-inline;width:100px;height:100px;"); pw.println("</style>"); pw.println("</head>"); pw.println("<body>"); pw.println("<table border=\"1\">"); pw.println("<tr>"); for(File f:fl.listFiles()){ pw.println("<td>"); pw.println("<img src=\"" + f.getPath() + "\">"); pw.println("</td>"); } pw.println("</tr>"); pw.println("</table>"); pw.println("</body>"); pw.println("</html>");
}
В Eclipse, внутренний веб-браузер выглядит т его (ниже)
PrintScreen of Eclipse internal web browser
Наконец я нашел решение моей проблемы. Спасибо всем вам за помощь!
Теперь этот код работает!
ServletContext context=request.getServletContext(); String path=context.getRealPath("upload"); File fl=new File(path); PrintWriter pw=response.getWriter(); response.setContentType("text/html"); pw.println("<html>"); pw.println("<head>"); pw.println("<style type=\"text/css\">"); pw.println("img{display:block-inline;width:100px;height:100px;"); pw.println("</style>"); pw.println("</head>"); pw.println("<body>"); pw.println("<table border=\"1\">"); pw.println("<tr>"); LinkedHashMap<Integer, String> hm=new LinkedHashMap<Integer,String>(); int imageIndex=-1; for(File f:fl.listFiles()) { if(f.getName()!=null){ if(f.getName().endsWith(".bmp")) hm.put(++imageIndex, f.getName()); } } Iterator<String> pic=hm.values().iterator(); while(pic.hasNext()){ pw.println("<img src=\"upload/" + pic.next() + "\"/>"); } pw.println("</tr>"); pw.println("</table>"); pw.println("</body>"); pw.println("</html>");
иерархия классов в моем проекте выглядит
MyWebProject
|-- src
| :
|
|-- web
| |-- META-INF
| | `-- MANIFEST.MF
| |-- WEB-INF
| | `-- web.xml
|-- upload (the place where I keep pictures)
:
Firefox теперь может правильно показать фотографии
Вы, кажется, ожидаете, что изображения каким-то образом встроены в вывод HTML. Это неверно. Изображения запрашиваются и загружаются отдельно/индивидуально на основе URL-адреса в атрибуте 'src'. – BalusC
Кстати, наличие папки с именем «upload» в пространстве развертывания также вызывает тревогу. Вы не должны хранить загруженные файлы в папке развертывания по той простой причине, что все они теряются после перераспределения WAR или даже при простое перезапуска сервера, что, в свою очередь, имеет очень простую причину, по которой новые добавленные файлы не содержатся в оригинальный файл WAR. Все со всеми, вы по-прежнему находитесь в совершенно неправильном направлении, несмотря на мой комментарий к предыдущему вопросу о связанном с этим вопросе. – BalusC