jsp tomcat spring ссылка на изображение

324
19 марта 2017, 04:09

Здравствуйте, прощу прощения за очередной вопрос. Прошлый канул в лето т.к я вовремя не ответил. Но проблема у меня осталась, опять убил весь день на это. Суть в том, что jsp не отображает изображение даже по абсолютному пути. Я уже какие пути не пробовал и куда только не клал это изобажение.

Если создать просто html cтраницу с этим адресом, то если открывать через idea ( пкм на странице -> открыть в браузере ) то изображения тоже не будет, но если просто перейти через проводник к этому файлу и отрыть его в браузере, то картинка будет отображаться.

в jsp у меня так ничего и не отображалось, сколько бы я не пытался, только если в webapp/recources закидывать и статичные изображения показывались, которые были во время деплоя там.

Но мне именно и нужно чтоб были на файловой системе изображения, отдельно от сервера, туда они сохраняются через форму и используются.

Так выглядит эта html страница

это jsp

Так выглядит jsp после запуска сервера при переходе на неё

Это ошибка в браузере которая пишется

Answer 1

@Victor хранение картинок в базе - это не извращение, а только один из возможных вариантов. посмотри на OpenCMS - все хранится в базе. и без проблем. Проблема с хранением картинок существует, потому как браузеры не имеют доступа ко всему что не на "сайте" , а хранить картинки в домашней папке сайта - можно, но при этом надо хранить их и в папке разработчика :) чтоб можно было деплоить... и не потерять. вот это и есть извращение , количество картинок растёт. файл .war будет увеличиваться. решение этой проблемы существует. необходимо сделать несколько вещей (только надо учесть что если разворачивать сайт на линуксах - это дно место хранения в файловой системе, а разработка (как правило) идёт под окнами, и место хранения совсем другое.) в файл context.xml проекта пишем

<Context path="/сайт"   allowCasualMultipartParsing="true" >
    <Resources className="org.apache.catalina.webresources.StandardRoot">
        <PostResources className="MyDirResourceSet" webAppMount="/dataFiles" />
    </Resources>
</Context>

в сервлете, в методе

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) {
    .....
     HttpServletRequest httpRequest = (HttpServletRequest) req;
     String url = httpRequest.getRequestURI().replace(сайт+ "/pics", "dataFiles");
     RequestDispatcher requestDispatcher = httpRequest.getRequestDispatcher(url);
        try {
              requestDispatcher.forward(req, resp);
             } catch (ServletException | IOException ex)
             {
              Logger.getLogger(UserFilter.class.getName()).log(Level.SEVERE, null, ex);
             }
     .....

соответственно доступ к таким картинкам будет http://сервер.мой/сайт/pics/подпапки

так же надо создать jar

import org.apache.catalina.LifecycleException;
import org.apache.catalina.webresources.DirResourceSet;
/**
 * Represents a {@link org.apache.catalina.WebResourceSet} based on a directory.
 */
public class MyDirResourceSet extends DirResourceSet {
    protected static final String WinPathToPic = "C:/Catalina/mo/";
    protected static final String DebPathToPic = "/usr/mo/pic/";
    private String getBaseForHostOS() {
        String OS = System.getProperty("os.name").toLowerCase();
        if (OS.contains("win")) {
            return WinPathToPic;
        }
        return DebPathToPic;
    }
    @Override
    protected void initInternal() throws LifecycleException {
        System.out.println("Base " + getBaseForHostOS());
        setBase(getBaseForHostOS());
        super.initInternal();
    }
}

и поместить его в папку lib в расположении tomcat (под линуксами и под окнами).

Сохранять картинки надо с учётом путей для окон и линуксов, используя примерно это:

 private static final String OS = System.getProperty("os.name").toLowerCase();
    protected static final String WIN_PATH_TO_PIC = "C:\\Catalina\\mo\\";
    protected static final String DEBIAN_PATH_TO_PIC = "/usr/mo/pic/";
    public static String getPathToPic() {
        if (OS.contains("win")) {
            return WIN_PATH_TO_PIC;
        }
        return DEBIAN_PATH_TO_PIC;
    }

примерно так... взято из рабочего проекта...

PS спасибо Alex Kuznetsov с sql.ru

READ ALSO
Необъявленные теги

Необъявленные теги

Имею такой код из примера библиотеки Spongy CastleКомпилятор ругается на oTAG, ouTAG, lTAG Объясните что это за теги такие и как из объявить?

301
Передача данных из Activity в Fragment

Передача данных из Activity в Fragment

Нужно передать строковую переменную из Activity в фрагмент находящийся в этом Activity

415
Проверка кода на code convention

Проверка кода на code convention

Есть какие-нибудь утилиты для проверки кода на:

281
Callback API Java SDK VK

Callback API Java SDK VK

Заметил в документации ВК к Java SDK следующие строчки:

508