Читать «Java 7 (Наиболее полное руководство)» онлайн - страница 408

Ильдар Шаукатович Хабибуллин

Интерфейс ServletConfig

Каждый объект типа ServletConfig содержит имя сервлета, извлеченное из элемента <servlet-name> конфигурационного файла, набор начальных параметров, взятых из элементов <init-param>, и контекст сервлета в виде объекта типа ServletContext. Эти конфигурационные параметры сервлет может получить методами

public String getServletName(); public Enumeration getInitParameterNames(); public String getInitParameter(String name); public ServletContext getServletContext();

описанными в интерфейсе ServletConfig.

Начальные параметры записываются в конфигурационный файл web.xml во время установки сервлета вручную или с помощью утилиты установки. Механизм задания и чтения начальных параметров сервлета очень похож на механизм определения параметров апплета, записываемых в теги <param> и читаемых методами getParameter() апплета.

В листинге 26.2 приведен простейший сервлет, отправляющий клиенту свое имя и начальные параметры.

Листинг 26.2. Начальные параметры сервлета

package myservlets; import java.io.*;

import java.util.*;import javax.servlet.*; public class InfoServlet extends GenericServlet{ private ServletConfig sc;

@Override

public void init(ServletConfig conf) throws ServletException{ super.init(conf); sc = conf; }

@Override

public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException{

resp.setContentType("text/html; charset=windows-1251");

PrintWriter pw = resp.getWriter();

pw.println("<html><head>");

pw.println("^^^^араметры сервлета</title>"); pw.println(,,</head><body><h2>Сведения о сервлете<^2>"); pw.println(,,Имя сервлета — " + sc.getServletName() + "<br>");

pw.println(,,Параметры сервлета: <br>");

Enumeration names = sc.getInitParameterNames();

while (names.hasMoreElements()){

String name = (String)names.nextElement(); pw.print(name + ": ");

pw.println(sc.getInitParameter(name) + "<br>");

}

pw.println("</body></html>"); pw.flush(); pw.close();

}

public void destroy(){ sc = null;

}

}

Полностью код листинга 26.2 будет подробно разъяснен позднее, а пока запомните два правила:

□ переопределяя метод init(ServletConfig), вызывайте метод init (ServletConfig) суперкласса;

□ кодировку ответа устанавливайте методом setContentType () перед получением ссылки на выходной поток методом getWriter (). Это относится и к другим заголовкам ответа.

Код листинга 26.2 компилируется обычным образом, а затем полученный файл с сервлетом InfoServlet. class устанавливается в контейнер. Процедура установки выполняется соответствующей утилитой, входящей в состав контейнера сервлетов или сервера приложений, make-файлом или ant-файлом. Часто достаточно поместить приложение в каталог, называемый webapps, autodeploy, или как-нибудь еще в зависимости от сервера приложений. По окончании процедуры установки сервлет можно вызвать из браузера, набрав в нем строку адреса вида: