Взаимодействие сервлета и JSP

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

Ниже приведен пример вызова сервлета из JSP с последующим вызовом другой JSP.

<!–пример # 4 : страница JSP с вызовом сервлета : index.jsp –>

<%@ page language="java" contentType="text/html; charset=ISO-8859-5" pageEncoding="ISO-8859-5"%>

<html><body>

<jsp:useBean id="gc" class="java.util.GregorianCalendar"/>

<jsp:getProperty name="gc" property="time"/>

<FORM action="serv" method="POST">

<INPUT type="submit" value="Вызвать сервлет">

</FORM>

</body></html>

В результате запуска проекта в браузер будет выведено:

clip_image002

Рис. 17.4. Запуск index.jsp

Кодировка для символов кириллицы задана с помощью директивы page. Аction-теги useBean и getProperty используются для создания объекта класса GregorianCalendar в области видимости JSP и вывода его значения. Сервлет ContServlet вызывается методом POST.

// пример # 5 : простой контроллер : СontServlet.java

package chapt17;

import java.io.IOException;

import java.util.Calendar;

import java.util.Locale;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class ContServlet

extends javax.servlet.http.HttpServlet {

protected void doPost(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

//добавление атрибута к запросу

request.setAttribute("loc", Locale.getDefault());

//добавление атрибута к сессии

request.getSession().setAttribute("calend",

Calendar.getInstance());

//получение объекта RequestDispatcher и вызов JSP

request.getRequestDispatcher("/main.jsp").forward(request,

response);

}

}

Передачу информации между JSP и сервлетом можно осуществлять, в частности, с помощью добавления атрибутов к объектам HttpServletRequest, HttpSession, HttpServletContext. Вызов main.jsp из сервлета
в данном случае производится методом forward() интерфейса RequestDispatcher.

<!–пример # 6 : страница, вызванная сервлетом : main.jsp –>

<%@ page language="java"

contentType="text/html; charset=utf-8"

pageEncoding="utf-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core"

prefix="c"%>

<html><body>

<h3>Региональные установки и Время</h3>

<c:out value="Locale from request: ${loc}"/><br>

<c:out value="Time from Servlet: ${calend.time}"/>

</body></html>

После вызова сервлета и последующего вызова main.jsp будет выведено:

clip_image004

Рис. 17.5. Вывод информации страницей main.jsp

В данном коде директива taglib подключает JSP Standard Tag Library (JSTL), и становится возможным вызов тега <c:out>, а также использование Expression Language (EL) в виде ${loc}.

Конфигурационный файл web.xml для данной задачи должен содержать следующую информацию:

<servlet>

<display-name>Controller</display-name>

<servlet-name>controller</servlet-name>

<servlet-class>chapt17.ContServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>controller</servlet-name>

<url-pattern>/serv</url-pattern>

</servlet-mapping>

В этой главе была дана общая информация о взаимодействии различных компонентов Web-приложения.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100