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

Поиск:

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


Гносеолог
**


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

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



Цитата(Ulysses4j @  22.7.2007,  10:09 Найти цитируемый пост)
А так не пойдет:


Увы, нет. При обращении по УРЛу, который заканчивается на слэш (т. е. представляет директорию), контейнер таки пытается физически залезть в эту директорию и найти один из файлов, прописанных в welcome-file-list.

diablero: Предлагаю для простоты обойтись для начала шаблоном, в котором будут постоянные шапка, левое меню навигации и подвал. Чтобы сильно не страдать, можешь сверстать это таблицей.

И это, я надеюсь, твой HTML содержит только структурную разметку, а внешний вид ты задаешь через CSS.


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


Опытный
**


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

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



Скажите, а i18n не будет? Очень бы хотелось посмотреть.


--------------------
Communication is critical to the job of a programmer.
C. Jazdzewski. Fatherly Advice To New Programmers
PM MAIL WWW   Вверх
diablero
Дата 23.7.2007, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Чтобы сильно не страдать, можешь сверстать это таблицей.

Так и сделал. 

Это сообщение отредактировал(а) diablero - 23.7.2007, 18:31

Присоединённый файл ( Кол-во скачиваний: 102 )
Присоединённый файл  home.vm 1,70 Kb


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


Опытный
**


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

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



И то это не главная страница. Нам нужно выделить в отдельный класс создание каркаса. Т.е. как бы статическое содержимое для всех страниц, кроме тех которые касаются учетной записи.
Т.е. два каркаса. И нужно еще создать таблицу в базе section



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


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

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



diablero
Скажи пожалуйста, куда ты положил persistence.xml, так чтобы при инициализации из сервлет-контейнера после деплоймента EntityManagerFactory его нашла?
И, если несложно, всопроизведи структуру каталогов, которая сейчас получилась в проекте.. 
PM MAIL   Вверх
Stampede
Дата 23.7.2007, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


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

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



Так, отлично! (на самом деле есть замечания, но пока ладно) Теперь внимание: сейчас мы резко упростим код и уберем повторяющиеся элементы в шаблонах. Для этого мы воспользуемся конструкцией Velocity #parse. Там, где у тебя стоит элемент <td> для основного контента, пишем:

Код

    <td id="content">#parse("$content")</td>


Теперь обязанность каждого воркера - положить в контекст Velocity имя соответствующего шаблона под ключом "content". Например, в ArticleWorker:

Код

context.put("content", "article.vm")


Соответственно, из article.vm убираем все лишнее и оставляем только то, что составляет информационный блок страницы.

Сам шаблон страницы (который ты запостил под именем home.vm), переименовываем в, скажем, template.vm - это будет наш единый шаблон для всех страниц сайта.

Также поменяем сигнатуру метода Template getTemplate() в интерфейсе Worker на вот такое:

Код

public String getTemplateName();


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

Код

public abstract class AbstractWorker implements Worker {
    public String getTemplateName() {
        return "template.vm";
    }
}


И тогда в остальных воркерах (наследуемых от AbstractWorker), нам останется только реализовать метод execute().

При этом работу по получению экземпляра Template по имени придется, естественно, перенести в метод service() сервлета-контроллера, но это как раз хорошо: нечего воркерам иметь дело с TemplateManager.

Все, мы уже почти готовы подвести четвертую жЫрную черту. Таблицу для секций пока не создавай. Определи простой бин Section, напиши SectionManager, а в его методе инит зашей прямо в коде создание нескольких экземпляров Section.

Да, вот еще: во всех бинах определи метод getUrl(), примерно такого содержания:

Код

public String getUrl() {
    return "/article.shtml?id=" + id;
}


После всего этого у тебя получится практически действующий сайт (правда, пока только в режиме просмотра).

Ulysses4j:

Цитата(Ulysses4j @  23.7.2007,  04:36 Найти цитируемый пост)
Скажите, а i18n не будет? Очень бы хотелось посмотреть.


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



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


Опытный
**


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

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



to Maksym
Цитата(Maksym @  23.7.2007,  19:30 Найти цитируемый пост)
Скажи пожалуйста, куда ты положил persistence.xml

В META-INF, посмотри во вложении структуру

Присоединённый файл ( Кол-во скачиваний: 132 )
Присоединённый файл  _________.jpg 34,00 Kb


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


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

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



diablero
Цитата(diablero @  23.7.2007,  19:53 Найти цитируемый пост)
В META-INF, посмотри во вложении структуру 

Спасибо, все понятно, все работает.

PM MAIL   Вверх
Stampede
Дата 23.7.2007, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


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

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



Цитата(Maksym @  23.7.2007,  11:06 Найти цитируемый пост)
Спасибо, все понятно, все работает.


Maksym, а ты, выходит, тоже активно следишь за сериалом? Интересно было бы услышать твое мнение - с учетом предыдущего (if any) опыта веб разработки и в свете твоих вебных планов.



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


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

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



Stampede
Когда ты говорил о ЧПУ ты держал в уме некоторый механизм, который позволил бы реализовать его внутри нашего приложения? Если да, то опиши его, пожалуйста, в двух словах.

Добавлено @ 20:25
Цитата(Stampede @  23.7.2007,  20:17 Найти цитируемый пост)
Интересно было бы услышать твое мнение - с учетом предыдущего (if any) опыта веб разработки и в свете твоих вебных планов.

Слежу, можно сказать дышу diablero в затылок. Мнение пока формируется, как только созреет -- обязательно поделюсь.

Это сообщение отредактировал(а) Maksym - 23.7.2007, 20:28
PM MAIL   Вверх
Stampede
Дата 23.7.2007, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


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

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



Цитата(Maksym @  23.7.2007,  11:24 Найти цитируемый пост)
Когда ты говорил о ЧПУ ты держал в уме некоторый механизм, который позволил бы реализовать его внутри нашего приложения? Если да, то опиши его, пожалуйста, в двух словах.


Там на самом деле все достаточно просто. Представим, как могли бы выглядеть некоторые УРЛы:
  • /articles/c++/, /articles/java/, /articles/python/ - разделы;
  • /articles/java/Using-Regular-Expressions-In-XML.shtml - статья;
  • /accounts/diabler.shtml - профиль юзера;
  • и т. д.

Нагрузка тут ложится на два места: 
  • В реализации метода getUrl() нужно закодировать, как по имени/заглавию сформировать соответствующий УРЛ. Можно в принципе делать это однократно, при создании объекта, и потом хранить как поле в базе.
  • В реализации диспетчера, который по УРЛу выдает класс воркера. Там нужно предусмотреть какие-то конфигурируемые маппинги, желательно в формате, который предусматривает wildcards. Например, /articles/*/ - для всех страниц-разделов.

В остальном логика останется практически без изменений.

Но это все можно сделать факультативно. А для целей нашего проекта принятая нами простая схема подходит как нельзя лучше.


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


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

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



Stampede
Спасибо. Исходя из своего понимания того что ты сказал, только что попробовал на примитивном уровне, все красиво ложиться. Интересно, что с использованием, например, jsf подобный механизм так прозрачно не встроить.
Но мы еще не видели контроллера (буква C)...  smile  smile

Добавлено через 9 минут и 15 секунд
Цитата(Stampede @  23.7.2007,  20:46 Найти цитируемый пост)
/articles/c++/, /articles/java/, /articles/python/ - разделы;

Но для этого прийдется прописать такой мэпинг:
Код

    <servlet-mapping>
        <servlet-name>MainController</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

Как тогда быть с картинками, css-ами и прочими ресурсами, которые обычно отдаются напрямую.. тоже анализировать url..?
PM MAIL   Вверх
Stampede
Дата 23.7.2007, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


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

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



Цитата(Maksym @  23.7.2007,  12:03 Найти цитируемый пост)
Как тогда быть с картинками, css-ами и прочими ресурсами, которые обычно отдаются напрямую.. тоже анализировать url..? 


Молодец, верно подметил.

Один из выходов - в web.xml явно замапить картинки, css, js и пр. статические ресурсы на дефолтный контроллер, например, по расширениям.

Другой выход - забить вообще на встроенные средства и отдавать всю статику самому. Правда, для этого придется конфигурировать content-type. Зато появляются плюсы, такие как возможность при желании логировать, в рамках единого подхода, запросы к статике, тонко управлять кэшированием на клиенте, гзиповать вывод, и пр.

Цитата(Maksym @  23.7.2007,  12:03 Найти цитируемый пост)
Но мы еще не видели контроллера (буква C)


Да в общем-то, можно сказать, уже и видели: класс сервлета-контроллера и метод getWorkerClass(String url).



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


Опытный
**


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

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



Цитата(Stampede @  23.7.2007,  19:33 Найти цитируемый пост)
При этом работу по получению экземпляра Template по имени придется, естественно, перенести в метод service() сервлета-контроллера, но это как раз хорошо: нечего воркерам иметь дело с TemplateManager.

Вот тут мне не понятно. 
Наш алгорим действий:
1. В service() определяем имя шаблона, от воркера получаем контекст. И сливаем их вместе.
2. Полученный Template мы должны слить с template.vm.

Как выполнить второй пункт?



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


Гносеолог
**


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

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



Цитата(diablero @  23.7.2007,  12:51 Найти цитируемый пост)
2. Полученный Template мы должны слить с template.vm.

Как выполнить второй пункт?


Нет, там все проще, чем ты думаешь:

Код

public void service(...) throws ... {
    VelocityContext context = worker.execute(request, response);
    String templateName = worker.getTemplateName();
    String html = infinite.getTemplateManager().merge(templateName, context);
}


А воркер нам как раз и вернет "template.vm".



--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0952 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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