Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

JAVA. Серверные приложения

.pdf
Скачиваний:
0
Добавлен:
06.09.2026
Размер:
2 Мб
Скачать
Часть 3 Серверные Java-компоненты Servlet 141
ный набор функций для обеспечения секретности, предоставляемый стандартными пакетами JDK java.security и java.security.acl, обеспечи­вает разработчика практически всем необходимым. Кроме того, «песоч­ница» имеет специальный метод фильтрования информации, встроен­ный в JVM, также обеспечивает некоторый уровень безопасности. А на­бор API JDBC предоставляет возможность создавать серверные приложения, работающие с базами данных.
Некоторые Web-серверы — Sun's Java Web Server, — реализован-
ные на Java, поставляются со встроенными servlet engine, другие — IBM HTTP Server, Microsoft Интернет Information Server — требуют специальной установки servlet движка.
Servlets значительно более эффективны в работе, мощнее и легче в
использовании, чем традиционные CGI-скрипты.
Эффективность. Традиционные CGI-скрипты, создают новый процесс
для каждого нового процесса, обрабатывающего HTTP-запрос. Servlets являются Java-потоками, а не потоками операционной системы, как традиционные CGI-приложения, исполняющимися в Java Virtual Mac­hine, где каждый запрос, обрабатываемый как отдельный поток, может еще и управляться. Обычные CGI-скрипты загружают одну копию для каждого запроса в память, servlets загружают в память все потоки по обработке запросов в память, но при этом используется один servlet class. Servlets имеют больше возможностей, чем обычные CGI-скрипты, по оптимизации, работе с потоками и т. д.
Мощность. Использование набора JDK API позволяет создавать бы-
стрые и гибкие приложения. Servlets позволяют сделать несколько ве­щей, недоступных обычному CGI-скрипту. Одна из них, servlets, может управлять Web-сервером (обычные CGI-программы этого не могут).
Переносимость. Servlets написаны на языке Java и могут использо-
вать, кроме собственного API, весь спектр API для Java, разработанный как фирмой SUN, так и сторонними поставщиками. Платформонезави­симость Java позволяет использовать servlets на разных Web-серверах. Обработчик Servlets может быть легко добавлен как обычный надстраи­ваемый элемент на практически любой Web-сервер.
Бесплатность. На настоящий момент фирма SUN реализует несколь-
ко наборов API, содержащих классы по созданию servlet, совсем бес­платно. А некоторые свободнораспространяемые Web-серверы, порой не уступающие своей функциональностью коммерческим серверам, уже имеют встроенную поддержку servlet. Прекрасным примером может служить один из первых Web-серверов — Apache, после небольших из­менений произведенных фирмой IBM, ставший HTTP-сервером с под­держкой «Голубого Гиганта» по всему миру.
Переносимость. При создании servlet используются стандартные на-
боры API. Это значит, что servlet, написанный для одного Web-сервера, можно без изменений перенести на любой другой Web-сервер, имею­щий servlet engine. Servlet написаны с использованием языка Java, а значит, работают везде, где существует JVM.
Удобство использования. Servlet имеет встроенные возможности об-
работки стандартных HTML-форм, считывания и установки системной информации (headers), обрабатывая cookies, прослеживая сессии. Serv-
142 Часть 3 Серверные Java-компоненты Servlet
let загружаются только на Web-сервере и вызываются только при кли­ентском запросе, все остальное время servlet не занимает ресурсов ни JVM, ни Web-сервера. После использования servlet освобождает сис­темные ресурсы. Встроенная многопоточность не требует для выполне­ния запроса загрузки новой копии servlet.
На настоящий момент самой распространенной версией servlet API
является 2.1, хотя с появлением нового набора разработчика J2EE вер­сии 1.3 стала распространяться обновленная версия servlet API 2.2. Именно версия 2.1 будет использоваться в дальнейшем обзоре. Основ­ным источником информации о серверных приложениях, использую­щих язык Java-servlet, служит официальный сайт компании SUN:
http://java.sun.com/products/servlet/.
Глава 18. Основные пакеты фирм SUN по работе с servlet
Java Servlet API — стандартный набор классов и интерфейсов по со-
зданию и обслуживанию servlet. Servlet API определяет стандартные средства по обработке запросов и ответов посредством servlet. Java Ser­vlet API представляет множество классов, сгруппированных в двух основных пакетах — javax.servlet и javax.servlet.http. Последний пред­назначен непосредственно для работы с HTTP-протоколом. Кроме HTTP-протокола, servlet поддерживает также широко распространен­ные почтовые протоколы POP и SMTP, а также протокол передачи файлов FTP и пользовательских протоколов. Java Servlet API является стандартным расширением JDK Java Extension API, который не явля­ется частью основного Java API, но доступен как добавочный. Пакеты по работе с servlets поставляются фирмой SUN в нескольких разных наборах разработчика (SDK), Java Server Development Kit API (JSDK)V2.1, Java 2 Enterprice Edition (J2EE) и более старая версия Java Web Servser Development Kit (JSWDK) 1.0.1.
Основные пакеты по работе с servlet находятся в jar-архивах, по-
ставляемых в месте, с каким-либо набором разработчика или в большом пакете Java 2 Enterprise Edition. Именование архивов может быть раз­личным для каждого набора. Как и об остальных продуктах, разрабо­танных фирмой SUN, основным источником получения информации о различных версиях servlet API остается официальный сайт фирмы SUN. На сайте можно найти все спецификации и набор API, необходи­мый для создания sevlets. Свободно распространяемую версию, извест­ную как JavaServer Web Development Kit (JSWDK), можно найти на http: //java.sun.com/products/servlet/. Более поздняя версия, именуе­мая как Java Server Development Kit (JSDK).
Пакет javax.servlet содержит классы для создания servlets, независи-
мых от протоколов передачи. Servlets, сгенерированные из классов дан­ного пакета, могут работать с различными протоколами передачи дан­ных, например HTTP и FTP.
Пакет javax.servlet.http содержит классы, предназначенные для ге-
нерации servlet, работающих только по протоколу HTTP. В отличие от стандартных servlet, в спецификации 2.1 указываются методы doGet() и doPost(), заменяющие собой основной метод service().
Часть 3 Серверные Java-компоненты Servlet 143
Установка Servlet Development Kits зависит от того, в каком инстру-
ментарии находятся пакеты, содержащие servlet классы.
После установки какого-либо Development Kit, содержащего необхо-
димые архивы, обязательно правильно установить системную перемен­ную CLASSPATH, для того чтобы компилятор javac смог правильно определить местоположение классов, необходимых для создания servlet.
В каждом из поставляемых Development Kit имеется несколько jar-
архивов, которые необходимо прописать в переменную CLASSPATH. Обычно в директории LIB каждого Developmet Kit содержатся jar-ар­хивы servlet.jar, jspengine.jar или jsdk.jar, необходимые для дальнейшей работы. С появлением других версий имена архивов могут различаться. Поэтому необходимо будет свериться с поставляемой документацией. Но имена пакетов практически не изменились, не считая совсем ранних версий, где полное имя пакета начиналось с java.servlet, вместо приня­того в настоящий момент javax.servlet.
Системная переменная, содержащая установленные jar-архивы, для
разных систем выглядит по-разному:
set CLASSPATH=.;servlet_dir/servlet.jar;servlet_dir /jsp.jar
Разделение аргументов в Windows-подобных системах осуществля-
ется через точку с запятой, в UNIX-подобных через двоеточие. Уста­новка системной переменной CLASSPATH, для UNIX, реализовывается оператором set env в командном файле. В системах Windows 95\98 про­писывается специальная строка в файле autoexec.bat. Для Windows NT выбирается Settings, затем указывается Control Panel, выбирается Sys­tem, выбирается Environment, и заносятся соответствующие значения.
На настоящий момент существует уже новая спецификации servlet
номер 2.2, а с ожидаемым появлением в четвертом квартале 2001 года новой версии основного JDK 1.4 можно ожидать и появление обновле­ний для API Enterprise Edition. В книге будет рассматриваться самая популярная версия на настоящий момент 2.1, с которой работают как WebSphere Studio, WebSphere Application Server,VisualAge for Java версии 3.02, так и более новые версии.
После установки одного из средств разработки Development Kit, со-
держащего необходимые пакеты, можно воспользоваться архивами на Web-сервере, способном работать с servlets. Большая часть поставляе­мых Web-серверов расширяется при помощи серверов приложений, имеющих уже встроенные возможности по работе с servlets. Либо вос­пользоваться специальными надстройками (plug_in), распространяемы­ми различными производителями, обеспечивающими Web-сервер необ­ходимыми ресурсами по работе с servlet.
Глава 19. Как работает servlet
Servlets реализует парадигму запрос/ответ, основанную на сообще-
ниях между клиентом и сервером. Servlet API представляет прекрас­ный набор для работы с объектами взаимоотношений между клиентом и
144 Часть 3 Серверные Java-компоненты Servlet
сервером, запросом (request) и ответом (response). Схема работы Servlet представлена на рис. 3.1.
1. Клиент посылает запрос на сервер. Сам клиент не взаимодейству-
ет напрямую с servlet. Запрос не обязательно является HTTP-запросом, т. е. HTML-страницей, servlet работает с любыми протоколами передачи данных, даже созданных пользователем.
2. Сервер перенаправляет запрос на servlet. В момент формирования
запроса на сервере servlet-engine запускает копию servlet на выполне­ние. Servlet инициализирует параметры конфигурации, а затем в основ­ной метод servlet передаются данные, полученные от клиента. Пока не рассматриваются конкретно способы инициализации servlet, об инициа­лизации сказано ниже. Используя набор API, сервер выделяет из за­проса нужную информацию, на основе которой создает объект request. Уже объект request перенаправляется в servlet. Роль сервера, неважно, Web или Application Server, в данный момент сводится только к управ­лению и загрузке необходимого servlet.
3. Servlet формирует ответ и возвращает его на сервер. Формирова-
ние ответа происходит в два этапа. Сначала, при инициализации, serv­let организует доступ к источникам данных. Затем, используя инициа­лизационные данные и данные запроса, формируется объект ответа response. Это динамически построенный ответ, обычно зависит от кли­ентского запроса. Каждый клиентский запрос servlet обрабатывает в собственном потоке. Web-сервер формирует поток для каждого запроса. Web-серверу без разницы, сколько обработчиков существует и сколько надо, — тяжелое наследие CGI-скриптов. Servlet существует один, но имеет много потоков. Каждый поток обрабатывает один запрос и отсы­лает один ответ вызывающему клиенту.
4. Сервер посылает ответ на запрос обратно клиенту. После обработ-
ки объекта request сервер должен только уничтожить экземпляр serv­let, освободить занятые ресурсы. Поскольку servets полностью реализо-
Рис. 3.1. Приблизительная схема работы Servlet
Часть 3 Серверные Java-компоненты Servlet 145
ваны на языке Java, servlet полностью переносимые на любые платфор­мы, для которых существует реализация Java Virtual Machine (JVM). Необходимо также иметь в виду несколько моментов, связанных с JVM. Во-первых, одна JVM ассоциирована только с одним Application Server. Но при использовании виртуального хоста для каждого создается своя Java машина. Во-вторых, только один servlet engine, работает только на одной Java-машине. В случае клонирования Application Server, а зна­чит, и клонирования JVM servlet, ассоциированные с одним клоном JVM, отличаются от servlet ассоциированных другим клоном, даже если физически это один и тот же servlet.
Как уже неоднократно упоминалось, servlet является многопотоко-
вым приложением. Каждый запрос обрабатывается в собственном пото­ке. Но иногда может потребоваться создавать servlet, чей метод service() работает только в одном потоке. В принципе совместно используемые данные можно синхронизировать, для этого используется ключевое сло­во synchronized, обеспечивающее синхронизацию полей или методов. Однако для servlet существует более простое решение, а именно реали­зация интерфейса SingleThreadModel в создаваемом классе servlet.
public class SingleThreadServlet extends HttpServlet implements SingleThreadModel { public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException { //Java êîä } }
Как и в обычном Java-приложении, все основные методы по обработ-
ке клиентского запроса должны полностью закончиться, прежде чем бу­дет вызван метод уничтожения destroy(). Перед окончанием работы ser­vlet необходимо убедиться, что все потоки, формирующие ответ, полно­стью завершены. Для управления длительностью сессии существуют методы класса HttpSession. Методы setMaxinactiveInterval() и isNew() позволяют в какой-то мере контролировать пользовательскую сессию.
Глава 20. Доступ к servlet
Обратиться к Servlet можно несколькими способами, в зависимости
от протокола передачи данных. Конкретный способ обращения к servlet привязывается к специфике указания адреса данным протоколом пере­дачи. Рассматриваемые способы являются в большей степени универса­льными или наиболее распространенными на настоящий момент:
Указать необходимый servlet в URL. Указание URL servlet — са-
мый распространенный способ обращения к servlet, используемый
в клиент-серверных приложениях. Распространенность способа
связана в первую очередь с URL, имеющим единый формат для
всех протоколов передачи данных, предназначенных для работы в
Интернет. Формат адреса ресурса Интернета достаточно прост:
первым указывается протокол передачи, затем через двойной
слэш (//), доменное имя сервера, каталог размещения ресурса и,
146 Часть 3 Серверные Java-компоненты Servlet
наконец, èìÿ самого ресурса. http: //www.rrlabs.com/serv-
let/com.rrlabs.servletAcount. Обязательными при таком доступе являются несколько параметров:
во-первых, все servlet размещаются в директории, называемой servlet любого Application Server, во-вторых указывается полное имя servlet, т. е. имя пакета, и имя класса, содержащего данный servlet. Ключевое слово servlet указывает Web-серверу, что клиентский запрос направля­ется именно в servlet, а не в другой источник, такой, как HTML-страни­ца или CGI-скрипт.
В HTML существует несколько способов обращения к ресурсам.
Всеми этими способами можно воспользоваться и для обращения к
servlet. Гиперссылки, «якоря» <A HREF> — все они обеспечивают
доступ к ресурсам. Распространение HTML обязывает описать еще
один способ доступа к servlet. Тег <FORM> описывает метод пере-
дачи и адрес ресурса как ответ на действия пользователя. Ничто
не мешает использовать тег <FORM> и для обращения к servlet:
<FORM METHOD="GET" ACTION="/servlet/com.corp.ServletDocs ">
<!— HTML-формы и теги, если необходимо.—>
Единственное, что необходимо учесть в этом случае, что тело servlet,
к которому обращается указанная строка, должно содержать реализа­цию метода doGet(), иначе возможна неприятность. Servlet-доступ к ко­торому осуществляется из HTML-формы, должен быть порожден от класса HttpServlet и иметь соответствующие методы. Используя мето­ды getParameterNames(), getParameter() и getParameterValues() объек­та HttpServletRequest, можно получить доступ ко всем параметрам, ис­пользуемым в теге <FORM>.
Использовать JSP-теги <jsp:include>. Где используются servlet,
там могут использоваться и JSP. Специальный тег, предназначен-
ный для включения ресурса <jsp:include>, помогает создателям
JSP-страниц включать не только обращение к servlet, но и другим
HTML-страницам и JSP-приложениям. Еще один способ непосред-
ственного вызова servlet — использование специальных тегов JSP-
страницы. Вызов из JSP осуществляется при помощи встроенного
òåãà <jsp:include>:
<jsp:include page="servlet/com.corp/ServletDocs>
Можно заметить, что используемый URL подчиняется тем же пра-
вилам, что и в первом упоминании.
Вызов servlet из другого servlet. Доступ из servlet осуществляется
посредством специальных методов:
getServletConfig().getServletContext().getServlet("myServlet");
Использование стандартной операции инициирования класса. Су-
ществует также простой способ работы с классами не только с ser-
vlet, очень распространенный в Java:
myServlet = (myHttpServlet)Class.forName("myServlet").newInstance();
Часть 3 Серверные Java-компоненты Servlet 147
Использовать специальный тег <SERVLET>. И наконец, некоторые
Web-серверы, полностью реализованные на Java, используют спе-
циальные теги для вызова servlet, например, Java Web Server
(JWS) использует тег <servlet> для вызова необходимого servlet.
Определяя тег <SERVLET>, отпадает необходимость в использо-
вании HTML тега <FOFM>. В отличие от HTML тега, <SERVLET>
является чисто серверным решением, т. е. скорость обращения к
servlet значительно увеличивается.
<SERVLET NAME="myservlet" CODE="myservlet.class" CODEBASE=
="url" initparm1="value">
<PARAM NAME="parm1" VALUE="value">
</SERVLET>
Глава 21. Создание servlet
При создании servlet можно воспользоваться любом текстовым или спе-
циальным редактором, в которых создаются обычные Java-приложения. В отличие от создания JSP, servlet нуждается в дополнительном инструмен­те — javac-java — компиляторе, поскольку servlet- это Java-приложение.
Использование специальных средств разработки, таких, как VisualA-
ge, значительно упрощает создание и отладку servlet. Графические воз­можности VisualAge помогают избежать рутинного ввода текста, а встроенный отладчик информирует о возможных ошибках создания servlet. Многие специальные редакторы могут работать с очень удобным средством дополнения кода. Использование специальной комбинации клавиш позволяет автоматически добавлять из предложенного списка необходимый метод или параметр.
Для того чтобы приложение стало полнокровным servlet, приложение
обязательно должно наследоваться от одного из основных классов. В за­висимости от протокола передачи, для которого проектируется servlet, это могут быть или интерфейсы, или абстрактные классы, содержащиеся в API servlet. Если для создания servlet используется интегрированное средство разработки, подобное VisualAge, то отпадает необходимость в установлении системной переменной CLASSPATH. В противном случае в используемые jar-архивы должны быть указаны в CLASSPATH, либо как аргументы в командной строке стандартного Java-компилятора, javac.
Основным при создании servlet можно назвать интерфейс Servlet.
В этом интерфейсе содержатся методы, которые должен иметь каждый уважающий себя servlet.
Для создания протокола независимого servlet используется абстракт-
ный класс GenericServlet, описывающий поведение создаваемого объек­та. Класс GenericServle наследован от центрального интерфейса Servlet. Основной интерфейс Servlet, служащий для создания servlets, находит­ся в пакете javax.servlet. Для работы servlet с протоколом http исполь­зуется класс httpServlet, являющийся наследником GenericServlet класса. Интерфейс, описывающий Servlet для работы с http-протоко­лом, реализует пять методов, три из которых определяют жизненный цикл servlet, а другие два обеспечивают конфигурацию servlet. Методы
148 Часть 3 Серверные Java-компоненты Servlet
init() и destroy() содержат операторы для инициализации и освобожде­ния ресурсов, в то время как для обработки клиентского запроса нужно реализовать методы service() или его http эквиваленты методы doGet() и doPost(). В добавление к методам «жизненного цикла» упомянутый интерфейс содержит метод getServletConfig(), который описывает стар­товые операции servlet, и метод getServletInfo (), предназначенный для получения информации о самом servlet.
Главным методом, определяющим servlet, можно с полной уверенно-
стью назвать метод service(), имеющий несколько параметров. Класс GenericServlet используется для создания протокола независимых serv­lets. Кроме методов «жизненного цикла», программист может в servlet создавать собственные методы и переменные для различных задач, вы­полняемых servlet.
Наиболее широко в сетевой повседневности используется протокол
передачи http.
Для создания servlet, обрабатывающего HTTP-запросы, работающего
по http-протоколу, существует класс HttpServlet, наследуемый от Ge­nericServlet. HttpServlet реализует дополнительные методы doGet () и doPost() для работы с HTTP-запросами GET и POST соответственно. В этом случае servlet не обязательно должен реализовывать метод ser­vice(), поскольку два вышеуказанных метода являются заменителями метода service(). Указанный ниже достаточно простой пример описыва­ет основные элементы servlet:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SimpleHttpServlet extends HttpServlet {
protected void service(HttpServletRequest req, HttpServletResponse
res)
throws ServletException, IOException {
res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("<HTML><TITLE>SimpleHttpServ-
let</TITLE><BODY>");
out.println("<H2>Servlet API Example SimpleHttpServ-
let</H2><HR>");
out.println("<H4>This is about as simple a servlet as it gets!</H4>");
out.println("</BODY><HTML>");
out.close();} Первые три оператора импорта предназначены для импортирования
классов и интерфейсов, необходимых для создания servlet. В четвертой строке создается класс, порожденный от класса HttpServlet. Основной метод любого servlet, указанный в пятой строке, содержит два аргумен­та, описывающих основные объекты request и response. В седьмой стро­ке указывается тип приложения возвращаемого клиенту, в данном слу­чае HTML-страница. Для вывода в браузере клиента создается объект класса PrintWriter, представляющий символьный поток. В дальнейшем, используя методы объекта out, выводятся строки в HTML-формате. Строка тринадцать освобождает ресурсы.
Часть 3 Серверные Java-компоненты Servlet 149
Глава 22. Жизненный цикл servlets
Как и applet, servlet имеет собственный жизненный цикл. Servlet
«живет» на сервере, сервер полностью контролирует жизненный цикл servlet. Сервер загружает нужный servlet, инициализирует переменные, получает какие-то результаты работы servlet, прекращает действие servlets и, наконец, выгружает из его памяти.
Отличительной особенностью servlet является встроенная многопоточ-
ность. Это значит, что несколько запросов, поступивших в один servlet, об­рабатываются в одном адресном пространстве последовательно. При каж­дом новом обращении к основному методу servlet создается новый поток.
Каждый запрос клиента, поступивший на сервер, инициализирует
рождение servlet. Поскольку servlet является многопоточным приложе­нием, каждый новый клиентский запрос обрабатывается в новом пото­ке, при этом не требуется перезагрузка самого servet. Сервер самостоя­тельно создает новый поток для обработки запроса. И сам же сервер за­нимается управлением поведения servlet. Каждый клиентский запрос обрабатывается собственным потоком в собственном адресном про­странстве, что гарантирует сохранение данных различных запросов.
С программной точки зрения жизненный цикл servlet описан в ин-
терфейсе Servlet с тремя методами жизненного цикла и парой добавоч­ных методов. Началом жизни, но не рождением servlet можно считать метод init(). Метод init() вызывается сервером единственный раз — при первом обращении к данному servlet. Сервер использует метод init(), чтобы проинициализировать данные, которые могут быть полезны в мо­мент загрузки servlet, например, создание соединения с базой данных. Следующий метод самый главный service(). Обращение сервера к этому методу вызывает рождение servlet. В отличие от инициализационного метода, являющегося в своем роде знакомством, которым можно прене­бречь, метод service() является основным, и пренебрегать им ни в коем случае нельзя. Для servlet, обрабатывающего HTTP-запросы, основны­ми методами выполняющие роль service(), должны быть методы doGet() или doPost(). Так же как и метод service(), методы http servlet выполня­ют непосредственно работу по обработке клиентского запроса. Самый последний жизненный этап освобождение используемых ресурсов и удаление экземпляра servlet. Удаление экземпляра происходит при вы­зове сервером метода destroy(). Им также можно пренебречь и не опи­сывать конкретно в каждом создаваемом servlet. Метод destroy() имеет одно полезное свойство. На каждом этапе жизненного цикла может слу­читься какая-либо нештатная ситуация, и если не предполагается испо­льзование никаких обработчиков возникших ситуаций в основным мето­дах, то сервер обязательно вызывает метод destroy().
Servlet engine создает экземпляр исполняемого servlet либо при по-
ступлении запроса, либо при старте сервера на основе инициализацион­ных параметров, прописанных в конфигурационном файле. Инициали­зационные данные используются до тех пор, пока servlet не уничтожит­ся Web-сервером. Если инициализация прошла успешно, то servlet становится доступным для использования, в противном случае servlet выгружается из памяти Web- сервера.
150 Часть 3 Серверные Java-компоненты Servlet
22.1. Инициализация Servlet: init() метод и конфигурационные параметры
Servlets может загружаться динамически, может быть установлен
как сервис, реагирующий на первый предназначенный для него запрос, или же, если Web-сервер сконфигурирован определенным образом, ser­vlet должен загружаться в момент старта Web- сервера. В каждом из этих случаев метод init() необходим для инициализации servlet. Инициа­лизация гарантирует, что данный servlet существует в системе, прежде чем запрос будет обработан. Метод init() вызывается один раз при стар­те servlet и действует до момента уничтожения из памяти сервера само­го servlet. Метод init() гарантирует выполнение всех операторов, находя­щихся в его теле, прежде чем будет вызван основой метод service() или его http аналог. В метод init() можно передать единственный аргумент — специфический объект класса ServletConfig, который позволяет проини­циализировать servlet, используя пару имя/значение для каждого свой­ства, необходимого для servlet. При работе с инициализационными пара­метрами должен быть создан файл, содержащий данные параметры в формате XML, или любой другой файл, содержащий прописанные пара­метры. Данный файл должен именоваться так же, как класс, для которо­го прописаны параметры и их значения. Данный файл должен находить­ся в директории, указанной в системной переменой CLASSPATH, и иметь расширение (окончание) .servlet. Доступ к инициализационным параметрам осуществляется с помощью специального метода getInitPe­rameter ("имя_параметра") объекта ServletCongfig.
В примере показано создание нескольких полей строкового типа:
protected String mydriver; protected String myurl; protected String myuserID; protected String mypassword; //вызывается метод init() с параметром config класса ServletConfig public void init(ServletConfig config) throws ServletException { super.init(config); mydriver = config.getInitParameter("driver"); myurl = config.getInitParameter("URL"); myuserID = config.getInitParameter("userID"); mypassword = config.getInitParameter("password");
Здесь же представлен пример XML-файла, содержащего инициали-
зационные параметры для класса ServletInitServlet. Класс находится в пакете com.rrlabs, на что указывает текст в теге <code>com.rrlabs.Simp­leInitServlet </code>. В одном конфигурационном файле может содер­жаться несколько разных пар параметр / значение для одного sevlet или, наоборот, одно значение для нескольких servlets.
<?xml version="1.0"?> <servlet>
<code>com.rrlabs.SimpleInitServlet</code>
<init-parameter value="COM.ibm.db2.jdbc.app.DB2Driver" name="driver"/>
<init-parameter value="itso" name="password"/>