Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Распределенные сервис-ориентированные системы..pdf
Скачиваний:
16
Добавлен:
05.02.2023
Размер:
9.2 Mб
Скачать

}

}

Запуск сервлета показывает одинаковую и правильную реакцию на вызов каждого EJB-компонента, как это показано на рисунке 3.2.

Рисунок 3.2 — Тестовый вызов трех EJB-компонентов

3.1.3 Тестовый HttpServlet проекта lab4

Для демонстрации учебного материала данной главы нам потребуется полноценная реализация сервлета JpaServlet, который бы:

а) обеспечивал обращение ко всем методам EJB-компоненты Letters; б) отображал список объектов Letter;

в) выводил нужную форму для взаимодействия с сервером приложений.

Для удовлетворения указанных требований, преобразуем класс Letters к первоначальному тестовому виду, показанному на листинге 3.7.

Листинг 3.7 — Тестовый вариант класса Letters.java проекта lab4

package rsos.lab4;

import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.ejb.LocalBean; import javax.ejb.Stateless;

@Stateless

@LocalBean

public class Letters implements LocalLetter, RemoteLetter

{

public List<Letter> getList()

{

List<Letter> list = new ArrayList<>();

136

Letter

letter = new Letter(new Date(), "upk", "Сообщение 1"); letter.setId(1);

list.add(letter);

letter = new Letter(new Date(), "upk", "Сообщение 2"); letter.setId(2);

list.add(letter);

letter = new Letter(new Date(), "upk", "Сообщение 3"); letter.setId(3);

list.add(letter);

return list;

}

public Letter getLetter(int id) { return null;

}

public void addLetter(Letter letter) {} public void deleteLetter(int id) {}

public void modLetter(Letter letter) {}

}

Обратите внимание, что аннотация @LocalBean обязательно должна присутствовать, иначе не будет возможен локальный доступ к классу Letters.

Теперь создадим JSP-страницу jpa_test.jsp, которая будет выводить результаты работы сервера и содержать форму для диалога. Также учтем, что сервлет должен передавать в JSP-страницу следующие атрибуты:

а) "action" — действие выбранное пользователем; б) "id" — номер сообщения;

в) "user" — имя пользователя;

г) "text" — содержимое сообщения;

д) "state" — состояние, которое установил сервлет.

Листинг 3.8 — JSP-страница jpa_test.jsp проекта lab4

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <jsp:useBean id="letter" class="rsos.lab4.Letter" scope="page" />

<html>

137

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>lab4</title>

</head> <body>

<hr>

<b>Тестовая страница проекта lab4</b>

<hr>

<table id="table1" cellspacing="5" cellpadding="10" border="0" > <thead><tr>

<th></th> <th>Дата</th> <th>Польз.</th> <th>Сообщение</th>

</tr></thead> <tbody>

<c:forEach items="${letters}" var="letter"> <tr>

<td><c:out value="${letter.id}" default="*" /></td> <td><c:out value="${letter.dateString}" default="Нет даты" /></td> <td><c:out value="${letter.user}" default="Нет пользователя"/></td> <td><c:out value="${letter.text}" default="Нет текста..." /></td> </tr>

</c:forEach> </tbody>

</table> <hr>

<form action="JpaServlet" method="post" accept-charset="UTF-8"> <table id="table2">

<tr>

<td>Номер сообщения: </td>

<td><input type="text" size="6" name="id" value="${id}" /></td>

</tr> <tr>

<td>Имя пользователя: </td>

<td><input type="text" size="40" name="user" value="${user}" /></td>

</tr> <tr>

<td>Новый текст: </td>

<td><textarea rows="5" cols="40" name="text">

<%= request.getAttribute("text") %> </textarea></td>

</tr> </table>

<hr>

Состояние запроса (<%= request.getAttribute("action") %>): <%= request.getAttribute("state") %>

<hr>

<table id="table2"> <tr>

<td>

<input type="radio" name="action" value="list" checked="checked"> Обновить

</td>

138

<td><input type="submit" value="Отправить запрос" /> </td>

</tr> <tr>

<td>

<input type="radio" name="action" value="add"> Добавить<br>

<input type="radio" name="action" value="get"> Прочитать по номеру<br>

<input type="radio" name="action" value="delete"> Удалить по номеру<br>

<input type="radio" name="action" value="mod"> Модифицировать по номеру<br>

</td> </tr> </table>

</form> <hr>

</body> </html>

Наконец, сам сервлет JpaServlet представлен на листинге 3.9, а результат его запуска — на рисунке 3.3.

Листинг 3.9 — Исходный текст сервлета JpaServlet.java проекта lab4

package rsos.lab4;

import java.io.IOException; import javax.ejb.EJB;

import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

* Servlet implementation class JpaServlet */

@WebServlet("/JpaServlet")

public class JpaServlet extends HttpServlet

{

private static final long serialVersionUID = 1L;

@EJB

 

 

private LocalLetter

local;

// Интерфейс

@EJB

 

 

private RemoteLetter

remote;

// Интерфейс

@EJB

 

 

private Letters

letters;

// EJB-компонент

/**

 

 

* Конструктор

 

 

*/

 

 

139

public JpaServlet() { super(); }

/**

* Метод doGet(...) */

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException

{

// Переходим к методу doPost() doPost(request, response);

}

/**

* Метод doPost(...) */

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException

{

/**

*Явная установка кодировок объектов запроса и ответа.

*Стандартная установка контекста ответа.

*/ response.setCharacterEncoding("UTF-8"); response.setContentType("text/html"); request.setCharacterEncoding("UTF-8");

// Начальные значения

String[]

state

= {"<b>Нормально...</b>", "<b>Ошибка...</b>"};

String

action

= request.getParameter("action");

String

id

= request.getParameter("id");

String

user

= request.getParameter("user");

String

text

= request.getParameter("text");

if(action

== null)

action

=

"list";

if(id

== null) id

= "";

if(user

== null) user

= "asu";

if(user.length() == 0) user =

"asu";

if(text

== null) text

=

"";

// Читаем список и передаем в JSP-страницу request.setAttribute("letters", letters.getList()); request.setAttribute("state", state[0]);

// Действия if("add".equals(action)) {

request.setAttribute("state", state[1]);

}

if("get".equals(action)) { request.setAttribute("state", state[1]);

}

if("delete".equals(action)) { request.setAttribute("state", state[1]);

}

140

if("mod".equals(action)) { request.setAttribute("state", state[1]);

}

// Установка атрибутов request.setAttribute("action", action); request.setAttribute("id", id); request.setAttribute("user", user); request.setAttribute("text", text.trim());

/**

* Стандартное подключение ресурса JSP-страницы */

request.getRequestDispatcher("/WEB-INF/jpa_test.jsp")

.forward(request, response);

}

}

Рисунок 3.3 — Результат запуска сервлета JpaServlet

Теперь мы готовы для демонстрации учебных примеров данной главы.

141