- •30.Общее представление о потоках ввода/вывода
- •31.Байтовые и символьные потоки
- •32. Определение файла. Тестирование проверка объектов File
- •34. Сериализация
- •35. Обработка исключений в Java
- •36. Многопоточное программирование
- •37. Создание потока и его жизненный цикл
- •38. Управление приоритетами и ThreadGroup
- •39. Потоки-демоны
- •40. Методы synchronized
- •41. Коллекции
- •42. Списки
- •43. 43. Множества
- •44. Карты отображений
- •45. Обзор сокетов
- •49. Дейтаграммы
- •46. Сетевые классы и интерфейсы 47. Производственные методы 48. Сокеты tcp/ip клиентов и серверов
- •50. Основы оконной графики 51. Иерархия классов awt
- •Класс Applet
- •52. Свойства класса Component
- •53. Класс Container
- •54. Наследники класса Component
- •55. Классы Choice и List
- •56. Классы TextComponent, TextField, TextArea
- •57. Наследники Container
- •58. Swing-технология
- •59. Обработка событий в Java
- •60. Классы-адаптеры
- •61. Понятие и терминология jdbc 62. Связь и различия jdbc и odbc
- •63. Драйвера, соединения и запросы
- •64. DriverManager
- •65. Создание соединения с источником данных
- •66. Интерфейсы Statement, PreparedStatement и CallableStatement
- •69. Использование потоков в апплетах
- •70. Основы xml
- •71. Xml. Схема dtd. Элемент Schema схемы xml
- •72. Ссылки xml
- •74. Язык xLink (Атрибуты связующих элементов xLink, возможные значения атрибута xlink:show, возможные значения атрибута xlink:actuate)
- •75. Язык xPointer (Синтаксис xPointer, элементы абсолютного обнаружения xPointer, выражения отношений, фильтры атрибутов и их значений)
- •76. Объектная модель документа xml – dom
- •77. Simple api для xml (sax)
- •78. Язык преобразований xslt (Операционный xslt, процесс преобразования xsl, использование xslt, преобразования xml в html)
- •80. Сервлеты: структура, назначение и преимущества
- •81. Жизненный цикл сервлета
- •83. Пакеты javax.Servlet и javax.Servlet.Http
- •84. Технология rmi. Сравнение распределенных и нераспределенных приложений
- •85. Архитектура rmi
81. Жизненный цикл сервлета
Жизненный цикл сервлета состоит из следующих шагов:
В случае отсутствия сервлета в контейнере.
Класс сервлета загружается контейнером.
Контейнер создает экземпляр класса сервлета.
Контейнер вызывает метод init(). Этот метод инициализирует сервлет и вызывается в первую очередь, до того, как сервлет сможет обслуживать запросы. За весь жизненный цикл метод init() вызывается только однажды.
Обслуживание клиентского запроса. Каждый запрос обрабатывается в своем отдельном потоке. Контейнер вызывает метод service() для каждого запроса. Этот метод определяет тип пришедшего запроса и распределяет его в соответствующий этому типу метод для обработки запроса. Разработчик сервлета должен предоставить реализацию для этих методов. Если поступил запрос, метод для которого не реализован, вызывается метод родительского класса и обычно завершается возвращением ошибки инициатору запроса.
В случае если контейнеру необходимо удалить сервлет, он вызывает метод destroy(), который снимает сервлет из эксплуатации. Подобно методу init(), этот метод тоже вызывается единожды за весь цикл сервлета.
82. Создание и компиляция исходного кода сервлета
Для построения сервлета разработчик должен написать класс, реализующий интерфейс javax.servlet.Servlet. Наряду с прочим, данный интерфейс содержит три метода, играющих важную роль с точки зрения методики J2EE: init(), service() и destroy().
import javax.servlet.*;
public SampleServlet implements Servlet {
ServletConfig servletConfig;
public void init(ServletConfig config) throws ServletException
{
servletConfig = config;
...
}
public void destroy() { ... }
public void service(ServletRequest req, ServletResponse res) { ... }
...
}
Информацию о запросе из объекта ServletRequest обычно извлекают либо в виде набора пар "название параметра - значение" (обычно используется для обработки различных форм HTML), либо в виде некого входного потока данных InputStream. Например, извлечение параметра с названием param, переданного из формы HTML, выглядит следующим образом:
public void service(ServletRequest req, ServletResponse res)
{
String par = req.getParameter("param"));
...
}
Чаще всего сервлет пишется таким образом, чтобы в ответ на запрос клиента в методе service() формировался некий документ. Содержимое этого документа передается в выходной поток данных OutputStream, предоставляемый объектом ServletResponse, для отправки клиенту. Заметим, что в ответ на запрос клиента сервлет может генерировать не только HTML страницы, но и данные любого другого типа, например, графические изображения или XML документы. Тип передаваемых материалов уточняется с помощью метода setContentType() объекта ServletResponse. По умолчанию подразумевается тип данных "text/html". Таким образом, метод service(), в ответ на запрос клиента генерирующий динамическую web-страницу, может выглядеть следующим образом:
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException
{
res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("");
out.println("");
...
out.println("");
out.println("");
out.close();
}