2013-12-17 2 views
2

Я работаю с сервлетами некоторое время и пытаюсь понять, как представление общается с сервлетом, чтобы быть более точным. Я говорю о экземплярах классов: HttpSession, HttpServletRequest и HttpServletResponse.Последовательность транзакций между страницей jsp (вид) и сервлетом (Контроллер)

1) В моем файле JSP у меня есть эта строка кода:

<% CategorieForm cf=(CategorieForm)session.getAttribute("catForm");%>

и это первое появление «сессии» в этом файле.

Когда этот объект сеанса создан.

2) также в моем сервлета у меня есть этот метод:

doPost(HttpServletRequest request, HttpServletResponse response) 
{ 
/* 
code that get the resuest parameters using the 'request.getParameter()' method, calls the model ans store the results in formBean 
*/ 
HttpSession session=request.getSession(); 
session.setAttribute("catForm",cf); 
response.sendRedirect("Categories.jsp"); 
} 

Я просто пытаюсь понять, как это работает, секвенирование сделок между видом и сервлета, когда «запрос» объектов и ' response ', является ли объект HttpSession в сервлет такой же, как и сеанс в файле jsp.

спасибо.

ответ

3

Начнем с браузера. Он генерирует и отправляет запрос POST.

Этот запрос POST принимается в виде байтов вашим контейнером сервлетов (YMMV). Контейнер сервлет анализирует его, создает HttpServletRequest и HttpServletResponse объектов, находит соответствующий Servlet обработать запрос, и тянет Thread от своего HTTP рабочего пула потоков, чтобы запустить его в.

отправляется Thread, который вызывает service(..) на ваш Servlet , Ваш пользовательский Servlet расширяет HttpServlet и поэтому наследует его метод service(), который, в зависимости от запроса, вызывает один из методов doXXX().

В этом случае вызывается doPost(). Когда вы достигнете

HttpSession session=request.getSession(); 

если HttpSession не существует, Servlet контейнер будет создавать для вас и добавить JSESSIONID Cookie в HttpServletResponse.

Когда вы затем сделать

response.sendRedirect("Categories.jsp"); 

Контейнер сервлетов будет совершать ответ с кодом состояния 302 и Location заголовок, содержащий URI для Categories.jsp разрешенного против вашего хоста и пути контекста.

Если ваш клиент является браузером, он скорее всего отправит новый запрос GET в этот URI. Ваш контейнер Servlet выполнит то же самое, что описано выше, и вызовите service() на скомпилированный класс, сгенерированный из вашего файла jsp. Это создаст тело ответа HTTP, которое будет отправлено обратно клиенту.

+0

Woow это отличный ответ, именно то, что я искал благодаря, извините, что какой-то зритель был не так хорош, как вы, ребята, он просто проголосовал и попросил закрыть вопрос. –

+0

@ Хоссам. Добро пожаловать. Что происходит. Это сложнее, когда они не дают комментариев. –

2

Когда этот объект сеанса создан.

Сессия создается, когда запрос делается в первый раз, не связанной сессии

Я просто пытаюсь понять, как это работает, секвенирование сделок между видом и сервлета, когда объекты «запрос» и «ответ», объект HttpSession в сервлет такой же, как и сеанс в файле jsp.

в этом фрагменте кода вы устанавливаете некоторый атрибут сессии, а затем перенаправляет пользователя Categories.jsp

+0

человек, это здорово, но, пожалуйста, исправьте меня, если я ошибаюсь. Файл jsp является первым, который должен быть выполнен, после чего он отправляет запрос на сервлет, а затем сервлет создает сеанс справа? Итак, как получается, что у меня есть эта строка '<% CategorieForm cf = (CategorieForm) session.getAttribute (" catForm ");%>' в моем файле jsp –

+2

сервер создает для вас первый экземпляр сеанса, независимо от jsp/servlet –

1

После первого запроса от сеанса пользователя создается. Сессия ведет себя как хэш-карта и может хранить пары ключ/значение. Сессия также имеет идентификатор. После создания сеанса сервер запрашивает у клиента создание файла cookie с идентификатором сеанса (существует альтернатива, если файлы cookie недоступны).

На каждом последующем сервере запросов используется этот файл cookie для определения того, какой объект сеанса использовать. Поэтому да, когда вы работаете с сеансом, изменения будут сохраняться до тех пор, пока сессия не истекла.

+0

Итак, сеанс создается в файле jsp или в сервлете, как сказал jigar? –

+0

@ HossamOukli Сессия создается во внутренних сетях сервера, когда сервер получает запрос без информации о сеансе. Не имеет значения, когда он создается, когда вы работаете с сервлетом или JSP. В этом случае вы можете просто предположить, что он всегда доступен, и один клиент связан с одним сеансом. И BTW, JSP - особая форма сервлета, поэтому JSP * - это сержант. – dimoniy

Смежные вопросы