Факультет «Информатика и системы управления»
Методические указания к лабораторной работе
по курсу «Распределенные системы обработки информации»
"Разработка Web‑приложений с применением Java Servlet Технологии"
Москва 2004 г.
Получить знания о Java Servlet технологии, сервере Jakarta Tomcat, его настройке для работы с сервлетами.
Задание для домашней подготовки
Ознакомиться с материалом, предоставленным в приложении к данным методическим указаниям. Ознакомиться с текстом задания к лабораторной работе. Написать Web – приложение.
Задания к лабораторной работе
Написать пользовательский интерфейс online форума.
Содержание отчета
Отчет должен содержать:
1. Постановку задачи, решаемой отлаженных программ.
2. Руководство пользователя отлаженных программ, содержащее описание интерфейсов всех функций программ.
3. Руководство системного программиста в объеме, необходимом для последующего сопровождения (модификации) отлаженных программ другим программистом (само документируемый листинг программы, необходимые пояснения алгоритма и его программной реализации).
Контрольные вопросы
1. Преимущества Java Servlet?
2. Из каких этапов состоит жизненный цикл сервлета?
3. Способы вызова сервлетов с браузера и страницы?
4. Способы передачи параметров сервлету и их обработка?
5. Как происходит запись и чтение атрибутов сессии?
ЛитератураJava in a Nutshell Дэвид Флэнэген Киев 1998
http://faq.realcoding.net/index.php
http://java.sun.com/j2ee/learning/tutorial/index.html
http://egor.spb.ru/doc/db/mysql/14.html#_ftnref1
http://www.coreservlets.com/Apache-Tomcat-Tutorial/
http://gcc.gnu.org/ml/java-patches/2000‑q4/index.html#00245
http://www-ucs.usc.edu/~toms/jakartafaq.html
http://jakarta.apache.org/faq
Теоретическая часть
Сервлеты Java
Сервлеты расширяют функциональность Web‑серверов и являются мощным средством программирования. Сервлеты – это модули, расширяющие возможности серверов типа запрос-ответ, таких как Java‑совместимые web‑сервера. Сервлеты для серверов то же самое, что и апплеты для браузеров, но в отличие от апплетов, у сервлетов нет графического интерфейса пользователя. Сервлеты могут быть встроены в различные серверы, так как API сервлетов, который используется для их написания, не предполагает никакого знания ни об окружении сервера, ни о его протоколе. Сервлеты наиболее широко используются с HTTP‑серверами; многие web‑сервера поддерживают API сервлетов. Они обеспечивают такой способ генерирования динамических документов, который позволяет облегчить их написание и ускорить выполнение. Сервлеты также решают проблему программирования на стороне сервера с платформо-зависимыми API, которые разрабатываются с использованием Java Servlet API, стандартного расширения Java. Характерной особенностью сервлетов является то, что они не требуют создания новых процессов при каждом новом запросе. Множество сервлетов выполняются параллельно в рамках одного процесса на сервере.
Java Servlet Development Kit (JSDK)
Набор инструментов разработки Java – сервлетов(JSDK) содержит библиотеки классов, которые нужны для создания сервлетов. Он включает также утилиту, известную как servletrunner, которая дает возможность проверить некоторые из создаваемых сервлетов. Начиная с JSDK Version 2 пакет Jsdk2.0 встроен в JDK.
Servlet API.
Коды, требующиеся для построения сервлетов, содержат два пакета: javax.servlet и javax.servlet.http. Вместе они представляют Servlet API.
Интерфейс сервлета
Центральной
абстракцией в API сервлета является Servlet API‑интерфейс. Все сервлеты
реализуют этот интерфейс либо прямо, либо, чаще, путем расширения класса,
который реализует этот интерфейс, например класса HttpServlet API. Servlet
‑интерфейс объявляет, но не реализует методы,
управляющие сервлетом и его связью с клиентами. Разработчики сервлетов
обеспечивают реализацию отдельных (или всех) методов в процессе разработки
сервлета.
Жизненный цикл сервлета
Все сервлеты имеют одинаковый жизненный цикл:
§ Сервер загружает и инициализирует сервлет
§ Сервлет обрабатывает ноль или более запросов клиентов
§ Сервер выгружает сервлет
Вызов сервлетов с браузеров
Для вызова сервлета с браузера достаточно набрать запрос – URL сервлета. URL сервлета имеет следующую форму:
http://machine-name:port/servlet/servlet-name
где servlet-name относится к имени, данному этому сервлету. Например
http://localhost:8080/servlet/bookstore
URL сервлетов может содержать запросы, такие как HTTP GET‑запросы. Например
http://localhost:8080/servlet/bookdetails? bookId=203
Вызов сервлетов с HTML‑страницы
Для вызова сервлета с HTML‑страницы достаточно использовать URL сервлета с соответствующей HTML‑меткой. Метки, поддерживающие URL, включают те, с которых начинаются якоря и формы, а также meta‑метки. Например
Также для вызова сервлета можно использовать атрибут action в теге form в HTML‑странице, указав URL сервлета. Например
// RequestParamExample.java получает входные параметры и выводит на браузер их значения
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class RequestParamExample extends HttpServlet {
public void doPost (HttpServletRequest request, HttpServletResponse res)
throws IOException, ServletException
{
Enumeration e = request.getParameterNames();
PrintWriter out = res.getWriter ();
while (e.hasMoreElements()) {
String name = (String) e.nextElement();
String value = request.getParameter(name);
out.println (name + «=» + value);
}
}
}
Здесь мы из вызывающей страницы получаем параметры firstname и lastname. В сервлете:
Enumeration e = request.getParameterNames(); – получаем имена всех параметров запроса, затем открываем поток записи н браузер, и до тех пор, пока множество имен не исчерпано, получаем имя параметра
String name = (String) e.nextElement();
Получаем, значение параметра, зная имя
String value = request.getParameter(name);
Выводим его на брузер
out.println (name + «=» + value);
Приведем пример работы с сессиями:
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SessionExample extends HttpServlet {
public void doGet (HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
response.setContentType («text/html»);
PrintWriter out = response.getWriter();
HttpSession session = request.getSession(true);
// добавить атрибут в сессию
String dataName = request.getParameter («dataName»);
String dataValue = request.getParameter («dataValue»);
session.setAttribute (dataName, dataValue);
// вывести значения атрибутов сессии
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String) e.nextElement();
String value = session.getAttribute(name).toString();
out.println (name + «=» + value);
}
}
}
Сервлет обрабатывает Get‑запрос, извлекает значение параметра
String dataName = request.getParameter («dataName»);
String dataValue = request.getParameter («dataValue»);
И добавляет его в сессию
session.setAttribute (dataName, dataValue);
Затем получаем имена всех атрибутов сессии:
Enumeration e = session.getAttributeNames();
И пишем на браузер их значения
String value = session.getAttribute(name).toString();
out.println (name + «=» + value);