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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов сервлета из JSP 
:(
    Опции темы
Kotakota
  Дата 14.12.2010, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Привет.
Начинаю изучать JAVA EE.
Такой вопрос.

Пишу гостевую книгу. Поделил ее на 2 составные части:

1. Форма добавления сообщения.
Ну тут все вроде понятно. Делаю так:
Код

<form action='<%= response.encodeURL("addMessage") %>' method="POST">
Имя: <input type="name" size=50> <BR>
E-Mail: <input type="mail" size=50> <BR>
Сообщение: <textarea name=”mess”> </textarea><BR> 
<input type="submit" value="Добавить!"> 
</form> 

Обычная форма, которая потом вызывает сервлет, который добавляет сообщение в БД.

2. Вывод оставленных сообщений.
Вот тут застрял  smile 
Как я думаю это должен быть еще один сервлет, который будет выводить сообщения из бд. (например будет передовать массив записей в JSP).
Вопрос как к нему подключиться, чтобы он передал массив сообщений.
Тег <FORM> тут уже не используешь.
 smile 

В дополнение прилагаю графическое описание моих мыслей.
user posted image




PM MAIL   Вверх
dobrolub
Дата 14.12.2010, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

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



Ответ на такой вопрос может быть достаточно объёмным, но кратенько так:

Сервлет вызывается либо напрямую, либо с помощью <jsp:include page="/messages"/>. Обычно сервлет достаёт данные из базы и кладёт их в request. Пример:

Код

public class ListMessagesServlet extends GenericServlet {
  public void service(ServletRequest request, ServletResponse response)
    throws IOException, ServletException {
     //достать сообщения из базы
     //положить их в рequest
     //псевдо код
     request.setAttribute("messages", new ArrayList<Message>(messages));
  }
}


в jsp, можно использовать jstl (псевдо код)
Код

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<c: forEach items="{messages}" var="message">
  <tr><td><%=message.getText()%></td></tr>
</c:forEach>



Это сообщение отредактировал(а) dobrolub - 14.12.2010, 21:32
PM   Вверх
Kotakota
  Дата 14.12.2010, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(dobrolub @ 14.12.2010,  21:29)
Сервлет вызывается либо напрямую, либо с помощью <jsp:include page="/messages"/>. Обычно сервлет достаёт данные из базы и кладёт их в request. 

Можно пример вызова напрямую?
А <jsp:useBean> не подойдет?
Слышал, что JavaBean компоненты не могут реализовывать логику и выступать в роли контроллера.
PM MAIL   Вверх
dobrolub
Дата 14.12.2010, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

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



Прямой вызов сервлета - из браузера, по url замапленному к этому сервлету. 

К вопросу о jsp:useBean:  да,  конечно можно.

Вы посмотрите ещё на различные tutorials по веб приложениям.

Это сообщение отредактировал(а) dobrolub - 14.12.2010, 22:19
PM   Вверх
Skipy
Дата 15.12.2010, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Kotakota, если говорить о том, как делать правильно, то JSP вообще не должен содержать никакой бизнес-логики - только средства отображения. Вся бизнес-логика должна быть в сервлете. Он получает ВСЕ запросы, разбирает их, определяет необходимые действия, выполняет их, и потом делает forward на нужный JSP. При этом в request уже положены все данные для формирования страницы. Так что не сервлет должен вызываться из JSP, а наоборот.


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


Шустрый
*


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

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



Цитата(Skipy @ 15.12.2010,  11:05)
Kotakota, если говорить о том, как делать правильно, то JSP вообще не должен содержать никакой бизнес-логики - только средства отображения. Вся бизнес-логика должна быть в сервлете. Он получает ВСЕ запросы, разбирает их, определяет необходимые действия, выполняет их, и потом делает forward на нужный JSP. При этом в request уже положены все данные для формирования страницы. Так что не сервлет должен вызываться из JSP, а наоборот.

Уважаемый Skipy.
Но ведь при загрузке страницы, первоначально вызывается *.jsp.
Или нужно вызывать сервлет контроллер, прописанный, например в web.xml?
А он в свою очередь будет вызывать необходимое представление в *.jsp странице?

Еще такой вопрос.
Например, вызвал сервлет, который подключил файл *.jsp формы ввода сообщения и *.jsp вывода всех сообщений.
Добавляю новое сообщение...
Вызывается сервлет который добавляет сообщение.
А потом из сервлета добавления сообщения вызываем....
Какой сервлет вызвать, чтобы снова показать гостевую книгу?
А если еще и постраничная разбивка будет....
Я запутался какой сервлет когда вызывать и в связях между ними.....
 smile 



Это сообщение отредактировал(а) Kotakota - 15.12.2010, 14:11
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0951 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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