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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JSP — с чего начать? 
V
    Опции темы
Stampede
Дата 19.7.2007, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

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



Цитата(diablero @  17.7.2007,  12:21 Найти цитируемый пост)
Никак home dir получить не могу, все время он null.
В чем может быть ошибка?


Чет какие-то новости. Никогда про такое не слышал. Какой контейнер используешь и какой версии?

Вариант получать корень тоже, конечно, прокатит, но хотелось бы разобраться.


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
diablero
Дата 19.7.2007, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

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



Tomcat 5.5

servletContextEvent равен null, может я чего-то не так делаю?

Причем если реализовывать интерфейс Servlet, то тогда в методе  public void init(ServletConfig servletConfig), можно получить домашнюю директорию. 

Это сообщение отредактировал(а) diablero - 19.7.2007, 21:42


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Stampede
Дата 19.7.2007, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

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



Знаешь, это, по-видимому, из-за различия жизненных циклов у листенера и сервлета. Об этом я как-то не подумал. Попробуй сделать их как два разных класса.



--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
diablero
Дата 19.7.2007, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

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



Цитата(Stampede @  19.7.2007,  21:58 Найти цитируемый пост)
 Попробуй сделать их как два разных класса.

Так работаетsmile 
Infinite поднялся. 

Два дня напрягался, а оказалось как обычно. Все гениальное просто.smile



--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Stampede
Дата 19.7.2007, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

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



Цитата(diablero @  19.7.2007,  13:44 Найти цитируемый пост)
Два дня напрягался, а оказалось как обычно. Все гениальное просто.


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

Ну хорошо, давай теперь сервлет сделай.


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
diablero
Дата 20.7.2007, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

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



Цитата(Stampede @  19.7.2007,  23:03 Найти цитируемый пост)
Ну хорошо, давай теперь сервлет сделай

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





--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Stampede
Дата 20.7.2007, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

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



А что именно непонятно? Ну скопируй для начала код из последнего теста (с Velocity) внутрь service(), а в конце выведи получившийся текст через response.getWriter().write().

Убедимся, что все работает, и пойдем дальше.



--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
diablero
Дата 20.7.2007, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

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



Цитата(Stampede @  20.7.2007,  17:47 Найти цитируемый пост)
А что именно непонятно? Ну скопируй для начала код из последнего теста (с Velocity) внутрь service(), а в конце выведи получившийся текст через response.getWriter().write().

Так это я давно сделал. Все работает.
Давай мой вопрос отложим, пойдем дальше. А там может из твоих указаний будет мне все понятно.


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Stampede
Дата 20.7.2007, 19:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

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



Хорошо, двинем дальше.

Следующим шагом мы реализуем букву L (Logic) в идиоме CLMV. Для этого я предлагаю ввести понятие воркера.

Что такое воркер? Это компонент, который отвечает за построение программного представления страницы определенного типа. Например, воркер раздела, или воркер главной страницы.

Возьмем, к примеру, воркер статьи. Мы как разработчики сайта имеем вполне четкое представление о том, что должно присутствовать на этой странице: это инфа об авторе плюс инфа о статье плюс сам текст статьи. Фсе! Как получить всю эту инфу по id статьи мы знаем. Возникает вопрос: а куда складывать все эти данные? Ответ: так прямо в контекст Velocity!

Представим себе такой интерфейс:

Код

public interface Worker {
    public VelocityContext execute(HttpServletRequest request, HttpServletResponse response);
    public Template getTemplate();
}


Отсюда уже нетрудно представить, как будет выглядеть реализация ArticleWorker.

Если мы теперь соорудим нечто вроде внутреннего диспетчера, который по УРЛу будет выдавать нам экземпляр воркера, то все становится вообще тривиально. На первых порах логику разрешения УРЛов в воркеры можно засунуть просто в отдельный метод в нашем сервлете-контроллере:

Код

private static Map mappings;
static {
    mappings = new HashMap<String, Class<Worker>>();
    mappings.put("home.shtml", HomeWorker.class);
    mappings.put("section.shtml", SectionWorker.class);
    mappings.put("article.shtml", ArticleWorker.class);
}
protected Class<Worker> getWorkerClass(String url) {
    Class<Worker> cls = mappings.get(url);
    return (cls == null)? ErrorWorker.class : cls;
}


Понятно, что со временем все это оформится в отдельный конфигурируемый компонент, ну а пока нам нужно просто проверить идею.

Просю.

ЗЫ. Расширения шаблонов лучше поменять на стандартное .vm Это поможет избежать путаницы на последующих этапах.


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
diablero
Дата 20.7.2007, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

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



Я чего-то не могу сообразить. Как у нас взаимодействуют между собой MainController, воркеры и TemplateManager. 


Это сообщение отредактировал(а) diablero - 21.7.2007, 13:39


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Stampede
Дата 22.7.2007, 05:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

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



Хорошо, смотри:

Код

public void service(HttpServletRequest request, HttpServletResponse response)
                throws ServletException {
    Infinite infinite = Infinite.getInstance();
    EntityTransaction tx;
    try {
        tx = infinite.getEntityManagager.getTransaction();
        tx.begin();
        String url = request.getRequestURL();
        Class<Worker> cls = getWorkerClass(url);
        Worker worker = cls.newInstance();
        VelocityContext ctx = worker.execute(request, response);
        Template template = worker.getTemplate();
        String html = infinite.merge(template, ctx);
        Writer writer = response.getWriter();
        writer.write(html);
        writer.flush();
        tx.commit();
    } catch (Exception e) {
        if (tx != null) {
            tx.rollback();
        }
        throw new ServletException (e);
    }
}


Вот так вот примерно.



--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
diablero
Дата 22.7.2007, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

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



Готово. 


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Stampede
Дата 22.7.2007, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

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



Цитата(diablero @  22.7.2007,  06:55 Найти цитируемый пост)
Готово. 


Дык и?

Что получается? Сколько и каких страниц нааял? Все ли отрабатывает как должно? Надо же хоть что-то рассказать. Или ты такой этот, брат краткости? smile

Вот еще какую штуку можешь сделать. Чтобы ходить на главную страницу по http://infinite/, нужно прописать соответствующий маппинг. К сожалению, в синтаксисе web.xml такое не предусмотрено. Поэтому приходится делать финт ушами - по счастью, совсем несложный. В корень кладется файл index.jsp такого содержания:

Код

<%@ page contentType="text/html; charset=utf-8" %>

<jsp:forward page="/home.shtml" />


Надо только не забыть в web.xml прописать маппинг для JspServlet и определить welcome-file-list.

В общем, жду рассказа. После этого внесем ряд полезных улучшений.


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
diablero
Дата 22.7.2007, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

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



Все работает, по УРЛу выдаются запрашиваемые страницы. 
Повыводил статьи, пользователей, в различных комбинациях.
Полностью страницы я не доделал. Я еще нахожусь в стадии обдумывания и подбора вариантов. Кучу времени потратил на поиски готового шаблона, и как итог, делаю самsmile
Все бы это протекало быстрее, если бы у меня не было врожденного отвращения к html и скриптам. Это в скором времени преодолею. 

Сделаю простенький как три копейки шаблон, чтобы мое обучение не стояло на месте. А по ходу дела, буду его дорабатывать.

Цитата(Stampede @  22.7.2007,  18:09 Найти цитируемый пост)
финт ушами

сделал.



--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Ulysses4j
Дата 22.7.2007, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Stampede @  22.7.2007,  18:09 Найти цитируемый пост)
приходится делать финт ушами

А так не пойдет:
Код
<web-app ...>
  <!-- .... -->
  <welcome-file-list>
    <welcome-file>home.shtml</welcome-file>
    <!-- .... -->
  </welcome-file-list>
  <!-- .... -->
</web-app>

web.xml
?


--------------------
Communication is critical to the job of a programmer.
C. Jazdzewski. Fatherly Advice To New Programmers
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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