![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| jah2 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 12.4.2013 Репутация: нет Всего: нет |
COVD, спасибо, это уже шаг вперёд
то есть существует некий встроенный механизм для извлечения данных чисто из web.xml буду смотреть, может отсюда и до произвольного xml-файла в архиве приложения удастся достучаться |
|||
|
||||
| Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 7 Всего: 17 |
Если я правильно понимаю LSD иммел в виду доступ к любому файлу в архиве приложения стандартным для Java путем.
Пусть у меня в архиве приложения есть специальная папка resource, где я храню разные нужные файлы (картинки, конфигураторы и т.п.) Причем папка resource хранится в корне архива. Тогда доступ к файлу chtoto.fil легко получить
А дальше делайте с ним что хотите. Причем где физически лежит архив вас не касается. -------------------- Mirkes |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Про файлы это ты постоянно упоминаешь, я говорю про ресурс. У ресурса есть некий путь, но это путь относительно classpath, никаких "расположений на диске", "на уровень вверх" у ресурсов нет. Единственный момент, это поместить ресурсы в classpath, но это несложная задача для любого вменяемого сервера приложений. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| jah2 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 12.4.2013 Репутация: нет Всего: нет |
Mirkes, LSD, спасибо за пояснения, буду разбираться, скорее всего я как раз и недопонимал эту абстракцию с ресурсом
в официальной документации пока не нашёл (их терминология, у них наверное и должно быть точно определено что это такое и с чем это едят), но эта статья вроде проясняет о чём речь http://skipy-ru.livejournal.com/5343.html про то, что говорил COVD, нашёл неплохое описание здесь http://docs.oracle.com/cd/E13222_01/wls/do...pp/web_xml.html http://docs.oracle.com/cd/E13222_01/wls/do...app_events.html |
|||
|
||||
| jah2 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 12.4.2013 Репутация: нет Всего: нет |
Вроде удалось освоится с classpath и ресурсами (и даже словил некоторую эйфорию от этих знаний
http://docs.oracle.com/javase/1.3/docs/gui.../resources.html http://docs.oracle.com/javase/tutorial/ess...ment/paths.html ....... На данном этапе хотелось бы ответить ещё на несколько важных для понимания вопросов, которые возникли при изучении этой темы: 1. конструкция MyClass.class - позволяет получить ссылку на объект класса Class, который автоматически создаётся при загрузке класса MyClass в память виртуальной java-машины (JVM). Под загрузкой класса MyClass в память JVM, как я понимаю, понимается загрузка байт-код класса MyClass из файла MyClass.class, сам объект класса MyClass ещё не создан. class - это свойство этого объекта типа Class, то есть пишем MyClass.class, на самом деле имеется в виду объект_типа_Class_для_класса_MyClass.class Я правильно понял? 2. System.getProperty("java.class.path") - возвращает строку, состоящую из всех classpath в системе, в том числе в Windows туда в качестве подстроки попадает значение переменной среды (окружения) CLASSPATH. Так? 3. Как получить доступ к ресурсу из сервлета, не создавая дополнительных классов? Например, код страницы index.jsp
При трансляции страницы index.jsp в класс сервлета эти две строчки скриптлета попадут в метод service() класса этого сервлета. При первом запросе страницы index.jsp класс сервлета будет загружен в память JVM, будет создан объект этого класса и произойдёт инициализация (считаются параметры конфигурации из дескриптора развёртывания и т.п.) Далее будет вызван метод service() у этого объекта (последующие запросы к index.jsp также приведут к вызову метода service()) и соответственно вызов этих двух строчек внутри него. getClass() вернёт Class-объект для класса сервлета. То что, ресурс не будет найден, понятно, так как class-файл сервлета имеет другое расположение нежели страница index.jsp На weblogic server, если я правильно понял (нашёл), они хранятся (то есть weblogic всё-таки разворачивает приложение в реальные директории), например, при использовании war домен\servers\имя_сервера\tmp\_WL_user\...\jsp_servlet\ а само содержание домен\servers\имя_сервера\tmp\_WL_user\...\war\ Тут ещё есть, конечно, над чем поэкспериментировать, и возможно найти ответ конкретно для weblogic, но не факт, что это подойдёт для других серверов приложений. Поэтому вопрос: как быть? (В том смысле что подключение к странице некоторого класса через <jsp:useBean и вызов getClass() оттуда даст результат, но единственное ли это решение или всё-таки можно как-то получить ресурс из сервлета, не создавая дополнительный класс, есть ли какой-нибудь другой универсальный способ?) Это сообщение отредактировал(а) jah2 - 17.5.2013, 18:28 |
|||
|
||||
| jah2 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 12.4.2013 Репутация: нет Всего: нет |
по первому вопросу я погорячился со свойством, так как явно такого свойства у Class не отмечено
http://docs.oracle.com/javase/6/docs/api/j...lang/Class.html отсюда ищем в спецификации class literal
http://docs.oracle.com/javase/specs/jls/se...html#jls-15.8.2
В общем, слово class является частью выражения под названием class literal (литерал класса), которое (выражение) вычисляется для объекта типа Class .... Так очевидно и стоит это воспринимать, не более (не ведя речь ни о каких свойствах, хотя, так как оно пишется через точку, хотелось бы По двум другим вопросам (особенно интересует третий) у кого-нибудь есть соображения? |
||||
|
|||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Нет. Это classpath с которым запущена JVM, подробнее java - the Java application launcher. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| jah2 |
|
||||||||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 12.4.2013 Репутация: нет Всего: нет |
спасибо
к сожалению никто не ответил на третий вопрос документация хоть и неплохая, но можно было сделать её гораздо сочнее из официальной документации на решение этого вопроса можно выйти отсюда http://docs.oracle.com/javaee/6/tutorial/doc/bnagl.html
То есть нужно использовать getResourceAsStream() не от Class-объекта сервлета, а от контекста, в котором он находится (контекстом является контейнер сервлета). Например, так можно получить доступ к файлу some.res в корне war-архива (то есть теперь слеш / действительно начинает отсчитывать путь от корня архива)
либо сразу использовать getServletContext(), так как он достаётся HttpServlet-у по наследству от GenericServlet-a Это сообщение отредактировал(а) jah2 - 7.6.2013, 19:17 |
||||||||
|
|||||||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |