Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Вставить картинку в jsp


Автор: Anastasia2410 24.8.2015, 15:23
Есть папка images на диске C. Как вставить картинку в jsp из этой папки ?

Пробую так:

Код

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sec"
           uri="http://www.springframework.org/security/tags"%>
<html>
<head>
    <title></title>
</head>
<body>

<img src="C:/images/1.jpg" />


</body>
</html>




Но ничего не получается. Прошу помощи , объясните , пожалуйста, как это сделать?

Автор: AntonSaburov 24.8.2015, 17:53
А что такое 

<img src="C:/images/1.jpg" />

браузер на клиенте должен локально сходить к себе и загрузить такую картинку ? А она у него там есть ?

Автор: Anastasia2410 24.8.2015, 18:22
Цитата(AntonSaburov @ 24.8.2015,  17:53)
А что такое 

<img src="C:/images/1.jpg" />

браузер на клиенте должен локально сходить к себе и загрузить такую картинку ? А она у него там есть ?

Та я уже поняла , что это не правильно . 

У  меня такая ситуация: 

есть в БД таблица user , в ней поле path . Пользователь загружает картинку и путь к этой картинке записывается в path . У меня сейчас картинки загружаются на диск , например , в C:/images . И path получается в виде C:/images/1.png
Но это не совсем то , что нужно . 

А потом пытаюсь вставить в jsp этот path - и понятно, что ничего не получается. Картинка не видна. 


Куда тогда в этом случае грузить картинку? Вот этот вопрос мне не ясен. 

Думала , что в папку проекта нужно.

Автор: AntonSaburov 25.8.2015, 09:35
Ну в принципе не самый худший вариант хранения картинок. Правда в случае если картинка не очень большая, то есть смысл хранить их в базе в виде BLOB полей - большое количчество маленьких файлов на диске - не самое разумное. Там много вариантов еще может быть - например хранить файлы в архиве. Но не суть - даю пример отдачи файла через сервлет.

Код

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author ASaburov
 */
public class HelloImage extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // ОЧЕНЬ ВАЖНЫЙ МОМЕНТ - надо заранее установить тип возвращаемой информации
        // чтобы броузер мог правильно его показывать. Здесь у нас будет возвращаться картинка
        // в формате PNG
        response.setContentType("image/png");
        OutputStream out = response.getOutputStream();
        try {
            // Тут можн загрузить файл с диска не через URL а напрямую - сами найдете
            URL imageURL = HelloImage.class.getResource("map.png");
            BufferedImage bi = ImageIO.read(imageURL);
            ImageIO.setUseCache(false);
            ImageIO.write(bi, "png", out);
        } finally {
            out.close();
        }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }
}


Автор: Anastasia2410 25.8.2015, 10:02
Цитата(AntonSaburov @ 25.8.2015,  09:35)
Ну в принципе не самый худший вариант хранения картинок. Правда в случае если картинка не очень большая, то есть смысл хранить их в базе в виде BLOB полей - большое количчество маленьких файлов на диске - не самое разумное. Там много вариантов еще может быть - например хранить файлы в архиве. Но не суть - даю пример отдачи файла через сервлет.

Код

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author ASaburov
 */
public class HelloImage extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // ОЧЕНЬ ВАЖНЫЙ МОМЕНТ - надо заранее установить тип возвращаемой информации
        // чтобы броузер мог правильно его показывать. Здесь у нас будет возвращаться картинка
        // в формате PNG
        response.setContentType("image/png");
        OutputStream out = response.getOutputStream();
        try {
            // Тут можн загрузить файл с диска не через URL а напрямую - сами найдете
            URL imageURL = HelloImage.class.getResource("map.png");
            BufferedImage bi = ImageIO.read(imageURL);
            ImageIO.setUseCache(false);
            ImageIO.write(bi, "png", out);
        } finally {
            out.close();
        }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
    }
}

А если нужно будет загружать не только png картинки ? 

Автор: AntonSaburov 25.8.2015, 11:43
Цитата(Anastasia2410 @  25.8.2015,  10:02 Найти цитируемый пост)
А если нужно будет загружать не только png картинки ?  

Если хочется сделать хранилище файлов, то надо смотреть весь комплекс проблем, которые надо решать.
- Максимальный размер файла, минимальный размер файла, средняя величина файла.
- Что надо уметь делать с этими файлами - только скачивать или надо давать возможность загружать на сервер. 
- Еще сложнее задача - организовать поиск по содержимому файлов.
- Есть ли какая-то авторизация (система доступа)

А просто так хранить - ну можно просто в базе хранить, которая нормально работает с BLOB-полями.

Автор: tzirechnoy 25.8.2015, 14:24
Если уж зачем-то написали на java отдачу картинок из файла с диска -- то хотя бы докачку сделайте.

Автор: AntonSaburov 25.8.2015, 15:07
Цитата(tzirechnoy @  25.8.2015,  14:24 Найти цитируемый пост)
Если уж зачем-то написали на java отдачу картинок из файла с диска -- то хотя бы докачку сделайте. 

Это в смысле замечание такое ? Для отдачи картинки на 20-50К при нынешних скоростях докачку надо делать ? Для отображения на странице браузера ? Повеселили.

Сделать докачку наверно интересная задача, но в данной ситуации такой вопрос выглядит мягко говоря предложением померяться сами знаете чем. Может пора взрослеть ?

Автор: tzirechnoy 25.8.2015, 17:09
Цитата
Это в смысле замечание такое ?


Да.

Цитата
Для отдачи картинки на 20-50К при нынешних скоростях


Я вжывую видел favicon.ico большэ мегабайта. Так что вот как раз при нынешних скоростях -- Вы явно через чур оптимистичны.

Цитата
Сделать докачку наверно интересная задача,


Камон, там десять строчек. А если экономить -- так дажэ пять. Заодно, возможно, автору станет понятно, почему здесь очень вредно использовать BufferedImage.

И нет, я не хочу их писать -- единственный томкат в моей эпсилон-окрестности работу работает, я не будут его трогать.

Цитата
Может пора взрослеть ?


Это философский вопрос, знаете ли. Каждый отвечает на него в соответствии со своим смыслом жызни.

Я, в общем, не настаиваю. Да что там -- мне дажэ удобно, берёшь шабашку -- а там такой любитель писать на джаве файл-серверы. Ставишь nginx в качестве кэша и для раздачи статики -- и оно сразу летать начинает.

Автор: AntonSaburov 25.8.2015, 17:55
Цитата(tzirechnoy @  25.8.2015,  17:09 Найти цитируемый пост)
Это философский вопрос, знаете ли. Каждый отвечает на него в соответствии со своим смыслом жызни.

Но это не повод столь ненавязчиво хамить. Вы бы хоть начальный вопрос прочитали и поняли, что человек в самом начале пути. Вы ему докачку предлагаете, большие файлы. Ему для начала надо ходить научиться, а Вы сразу бег по пересеченной местности предлагаете, да и то лишь для того, чтобы повыпендриваться за чужой счет. Скучно с Вами. Умолкаю.

Автор: tzirechnoy 25.8.2015, 18:51
Цитата
Вы ему докачку предлагаете, большие файлы. Ему для начала надо ходить научиться


Предлагаю, да. Во-первых -- ещё раз -- там нет ничего сложного, кроме базового инжэнерного навыка "гуглить как оно должно работать". Четыре несчастных заголовка -- один принять и разобрать, три отправить.

Во-вторых, мой высокомерный тон вполне можэт намекнуть, что приведённое -- очень херовое решэние с самого начала.

Автор: Samotnik 1.9.2015, 20:47
tzirechnoy, Есть в вебе Java такое понятие, как ресурсы. Нельзя указывать прямой путь на бинарные источники. Нужно всё ложить в веб ресурсы, есть для этого папочка web, там кстати есть и jsp файлы, ты же не указываешь в web.xml прямой путь на свою jsp/html

Автор: jelum 12.10.2015, 13:43
Anastasia2410, вопрос ещё актуален?

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Vstavit-kartinku-v-jsp-id55db0ce4ae20154d558b4567#findElement_E7045_561b8ecdae20152f0ab13296_0

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)