| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Pattern для Web приложения |
| Автор: v2v 16.1.2008, 23:21 |
| Итак, допустим, есть веб приложение (сайт) доступ на который возможен только для зарегистрированных пользователей. Сайт предоставляет для просмотра какой то набор данных плюс позволяет редактировать (удалять, добавлять) новые данные. допустим всё это будет на jsp страничках с использованием jstl. получается 4 - 5 страничек (не так уж много для начала). но вопрос как это всё лучше всего организовать (какой шаблон использовать) ?? прочитал про шаблон FrontController, вроде подходит, но есть ли какой то другой более оптимальный вариант для моего случая? буду благодарен за любую полезную информацию. про фреймворки не писать/я их использовать не буду! j2ee core + patterns only! |
| Автор: batigoal 17.1.2008, 09:40 |
| В первую очередь - MVC. |
| Автор: SuperFly 17.1.2008, 11:18 |
Хех, в полку прибыло ^_^ а я уж думал это антинаучно. Слава богу Stampede человек авторитетный, в своем туториале обходился без всякого рода клея, может вам его почитать? На самом деле там использовались JPA в качестве Model, Velocity в качестве View, а в качестве Controller свой FrontController и обработчики сценариев Worker'ы, всё. |
| Автор: v2v 17.1.2008, 11:38 |
| хотелось бы обойтись и без сторонних библиотек. поповоду темы stampede: там так много .... уже несколько раз начинал читать, доходил максимум до второго релиза )... как мне связать jsp - view и данные. вариант проверки и записиывание в аттрибуты сессии нужных данных в контроллере, а затем на страничке просто считывание нужных аттрибутов? |
| Автор: batigoal 17.1.2008, 13:14 |
| В страничке можно использовать бины. Например, бин - список людей (MembersList). Ну а в выводе, соответственно, итерировать по этому списку и выводить данные о пользователях. |
| Автор: v2v 17.1.2008, 13:45 |
| ну собственно я про это и спрашиваю. как мне передать бины на страничк? из странички вызывать контроллер, который получает memberList !? или в контролере создавать атрибут memberList и далее вызывать нужную страничку, которая работает с атрибутами!? вопрос поставлю по другому какую книгу почитать по сабжу.(так что бы её можно было найти напр. тут pdfchm.com) |
| Автор: batigoal 17.1.2008, 16:26 |
Смотря на какую страничку. У JSP это директива useBean, у JSF - не знаю. Можно почитать туториал по J2EE, но эта книга не очень-то заморачивается вопросом написания "правильных" веб-приложений. |
| Автор: v2v 17.1.2008, 18:32 |
| ок. с этим вроде разобрался. теперь вопрос следующий. производительность. допустим наше приложение ещё обращается в бд .. оттуда достаёт кучу контента и выводит его пользователям/пользователей допустим достаточно много..( что то типо новостного сайта или форума с большими постами ), т.е. каждому пользователю формируется (почти) одинаковые данные. что необходимо учитывать , что-бы максимально выиграть в производительности? (опять таки интересуют вопросы правильного построения без использования фреймворков) |
| Автор: batigoal 17.1.2008, 23:35 |
| От скриптлетов действительно нужно избавиться. Это всё можно сделать тегами. |
| Автор: v2v 17.1.2008, 23:41 | ||
предыдущий пост я заменил... читать его |
| Автор: olegrolik 17.1.2008, 23:44 | ||
Присоединяюсь. Сам хотел создать подобный топик. Тоже хочу сделать движок для сайта. Читал тему "JSP - с чего начать". Не нравится JPA и Hibernate, Velocity устраивает. Может у кого-то есть пример небольшого сайта, написанного на Java, где обязательно есть авторизация, реализованная через форму? |
| Автор: batigoal 18.1.2008, 00:33 | ||
Почему? По-моему, это одна из лучших вещей, появившаяся в программировании за последние годы.
Кеширование, в первую очередь. Не нужно на каждых чих лазить в базу, если данная статья с высокой степенью вероятности понадобится почти каждому пользователю. То же относится и к разного рода служебной информации, которая по-любому будет нужна (например, счетчик статей на ресурсе, облако тегов или еще что-нибудь). Еще стоит посмотреть на пулы соединений - может, пригодится. |
| Автор: v2v 18.1.2008, 01:12 |
| я не большой знаток кеширования, поэтому непонятно как оно будет выыглядеть? создаются дополнительные таблици в базе данных и туда складываются готовые странички? ... хм... за счёт потери в памяти, можно немного преуспеть в производительности .... но не сильно... если например учитывать что контент будет хранится в бд уже в форматированном виде ( со всеми тегами ). есть какие то механизмы кеширования. подскажите куда смотреть? |
| Автор: Stampede 18.1.2008, 06:52 | ||
А скажи, для чего тебе выигрывать в производительности? Сгенерировать новостную страничку разумного размера при более-менее грамотной организации приложения и базы данных, да на нормальном железе - вопрос 50-200 мс. Можно, конечно, попытаться соптимизировать какие-то моменты и уложиться, скажем, в 20 мс, но возникает вопрос - зачем? На фоне неизбежной сетевой задержки выигрыш в несколько десятков миллисекунд практически не виден. Так стоит ли городить огород? Вариант с кэшированием готовых страниц я бы вообще не рассматривал, поскольку это сразу ограничивает тебя в динамических возможнотях. Например, ты уже не сможешь показывать посетителям персонализированный контент, а это для развития сайта далеко не последняя вещь. Если хочешь примеров - могу привести. В общем, предлагаю подумать, нужно ли тебе это выжимание производительности и какую цену (в том числе в терминах пожервованной функциональности) ты готов за это заплатить. |
| Автор: Shaggie 18.1.2008, 08:39 | ||
Да вон у Stampede в подписи ссылочка на webjavenue.com, скачай оттуда туториал - там и Velocity, и JDBC, и авторизация через форму, только разобраться имхо непросто. |
| Автор: olegrolik 18.1.2008, 08:41 | ||
Неправильно выразился. Я просто хотел сказать, что, база данных у меня будет использоваться условно, т.е. обойтись можно и без неё. Затраты на изучение не будут стоить выхлопа 2 v2v, желаю успешной и скорейшей сдачи экзамена 2 Stampede, а примеров движков "попроще" нет? |
| Автор: Kangaroo 18.1.2008, 10:52 | ||
А ты больше не собираешься других проектов делать? ORM сейчас уже почти неотъемлимая часть проекта, так что рекомендую выучить А что значит "попроще"? Чем тебя там тема не понравилась. Там вроде классно все рассказано с нуля, то есть разобраться можно без проблем.. |
| Автор: batigoal 18.1.2008, 10:53 | ||
Я имел в виду такой вариант кеширования, как загрузку данных из БД в память (при первом запросе либо при инициализации приложения) вместо залезания каждый раз в БД при запросе клиента. Например, на главной странице у тебя есть 10 последних постов/новостей. Тогда имеет смысл держать 10 экземпляров класса Post (или там Article) в памяти постоянно, и получится некоторая экономия на загрузке данных. (Разумеется, держать в памяти абсолютно все записи скорее всего будет невыгодно). У нас подобный кеш модели данных организован на основе WeakReference, но это, наверное, для тебя будет слишком "тяжелым" решением. |
| Автор: olegrolik 18.1.2008, 17:08 |
| Kangaroo, в ближайший месяц не собираюсь. Попроще - значит без ORM. Мы тут обсуждаем мои предпочтения или отписываемся по теме? |
| Автор: v2v 24.1.2008, 19:44 | ||
| Едем дальше в постороении нормального веб приложения. Работа с бд. тоже, наверное, есть какие то шаблоны. что посоветуете? пока придумал следующее: написать класс, который состоит из методов:
каждый из методов, в качестве параметра получает sql строку и выполняет соответствующее действие в базе ... Единственный вопрос , что должен возвращать executeSelect() ? List каких то объектов (например List<Users>), но тогда для каждой таблици надо писать свою реализацию executeSelect() .. не подходит. Что посоветуете. благодарю. |
| Автор: Ornitos 31.1.2008, 15:35 | ||
Можно сделать метод генериком. В качестве аргумента передавать объект Class<T>. По класу выбирать подходящую таблицу. Существует целый ряд шаблонов. Поскольку требования твои мне не ведомы, читай и выбирай паттерн сам. http://martinfowler.com/eaaCatalog/activeRecord.html http://martinfowler.com/eaaCatalog/tableDataGateway.html http://martinfowler.com/eaaCatalog/rowDataGateway.html http://martinfowler.com/eaaCatalog/dataMapper.html |