Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как открыть файл Spring MVC, обычный файл xml лежащий в корне проекта 
V
    Опции темы
Kirkh
Дата 20.9.2010, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 6.3.2008

Репутация: нет
Всего: нет



Доброе время суток. 

Делаю простенькое web-приложение, для того чтобы познакомиться с Spring MVC. В классе одного из контроллеров мне нужно открыть файл all.xml. Положил  его в корень проекта, т.е. на одном уровне с директорией WEB-INF. Но столкнулся с проблемой как получить к нему доступ. Если обращаться по абсолютному пути то все хорошо все получается если просто File("all.xml") или File("/all.xml") то выпадает java.lang.NullPointerException.

Вот мой класс: 
Код

public class ViewController implements Controller {

    protected final Log logger = LogFactory.getLog(getClass());

    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

.
.
.
//        так работает
        File old = new File("/home/my-name/apache-tomcat-6.0.29/webapps/springII/all.xml");

//        так нет
//        File old = new File("http://localhost:8080/springII/all.xml");

//        и так нет, для корректности добавлял extends HttpServlet    
//        String allXMLFile = getServletContext().getRealPath( "/all.xml" );
//        File old = new File(allXMLFile);

//        и так нет        
//        File old = new File("/all.xml");

.
.
.

        return new ModelAndView("WEB-INF/jsp/view.jsp", "model", myModel);
    }

}


Как быть?.. Подскажите пожалуйста.
PM MAIL   Вверх
SlavaSemushin
Дата 21.9.2010, 07:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 13.4.2010
Где: Новосибирск

Репутация: 1
Всего: 1



Я бы попробовал new File(request.getContextPath() + "/all.xml")
PM MAIL   Вверх
Kirkh
Дата 21.9.2010, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 6.3.2008

Репутация: нет
Всего: нет



Я бы попробовал new File(request.getContextPath() + "/all.xml") - нет тоже не получается...

В ходе очередных экспериментов обнаружил что к относительному пути указанному как параметр конструктора File(), если путь начинается не с "/", т.е. например так:

Код

File old = new File("all.xml");


добавляется контекст сервера т.е. /home/myName/programs and scripts/apache-tomcat-6.0.29/...
дальше немного еще проб и в итоге получилось все вот так: 

Код

File old = new File("webapps/springII/all.xml");


Всем Спасибо!

PM MAIL   Вверх
Kirkh
Дата 23.9.2010, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 6.3.2008

Репутация: нет
Всего: нет



И все таки проблема осталась.

Если делать как посоветовал SlavaSemushin т.е.
Код

new File(request.getContextPath() + "/all.xml");

 то приложение пытается открыть файл /springII/all.xml, которого понятное дело нет.

Пробовал удалить первый символ "/" чтоб Linux не воспринимал этот путь абсолютным, тогда добавляется контекст сервера и естественно файла /home/myName/programs and scripts/apache-tomcat-6.0.29/springII/all.xml тоже нет.

Из добавления контекста сделал вывод и собрал строку как описывал выше... но злая система Виндовс отказывается добавлять контекст сервера... и опять все не работает... т.е. на моей Ubuntu все ок, в винде java.io.FileNotFoundException...

Помогайте о гуруsmile)
PM MAIL   Вверх
Kirkh
Дата 23.9.2010, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 6.3.2008

Репутация: нет
Всего: нет



Придумал способ как сделать работающую версию для томката на любой операционке
Код

Properties props = System.getProperties();
String cat = (String) props.get("catalina.home");
File old = new File(cat + "/webapps" + request.getContextPath() + "/all.xml");



но.. это в принципе тоже костыль... 

Советы господа...
PM MAIL   Вверх
Skipy
Дата 23.9.2010, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

Репутация: 2
Всего: 16



Цитата
Советы господа...


Господи, посоветуй страждущим прочитать API!

Код

String pathToServletRoot = request.getSession(true).getServletContext().getRealPath("/");


Это сообщение отредактировал(а) Skipy - 23.9.2010, 15:38


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
Kirkh
Дата 24.9.2010, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 6.3.2008

Репутация: нет
Всего: нет



Цитата

Господи, посоветуй страждущим прочитать API!


Строго Вы...

Читал. И даже решение нашел, именно то что вы посоветовали. Отписаться на форуме не успел.
Skipy Спасибо.

А в API не всегда сразу и и понятно с какой стороны читать:(. По крайней мере начинающим "читателям".
PM MAIL   Вверх
Skipy
Дата 24.9.2010, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

Репутация: 2
Всего: 16



Цитата

Строго Вы...


Вы бы знали, насколько было бы меньше вопросов, если бы этим советом пользовались все...

Цитата

Читал. И даже решение нашел, именно то что вы посоветовали.


И замечательно! А сколько дополнительно полезного узнали!

Цитата

А в API не всегда сразу и и понятно с какой стороны читать:(. По крайней мере начинающим "читателям".


Отталкиваясь от тех объектов, которые у Вас есть. HttpServletRequest/HttpServletResponse. Потом дойдете до сессии. Потом - до контекста сервлета. Заодно узнаете, что еще умеет сессия, что контекст. И это самое ценное, потому как вот эти дополнительные знания незаметно накапливаются. И в конце концов вместо того, чтобы лезть в API, Вы то, что нужно, просто вспомните.


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0713 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.