По умолчанию инициализация класса HttpServlet инициализирует сервлет и идентифицирует инициализацию. Чтобы проинициализировать сервлет определенным образом, переопределите метод init согласно той версии JSDK, которую используете: метод init(ServletConfig) для версии 2.0 и метод init() для версии 2.1. При переопределении метода init следуйте следующим правилам:

  • В случае возникновения ошибки инициализации, которая приводит сервлет в состояние неработоспособности, вызывайте исключение UnavailableException. Как пример возникновения такого типа ошибок — невозможность установления необходимого сетевого соединения.
  • Не вызывайте метод System.exit.
  • Только для версии 2.0: Сохраняйте параметр ServletConfig так, чтобы метод getServletConfig мог вернуть эту величину. Самый простой способ реализовать это — надо, чтобы новый метод init вызывал super.init.

Здесь приведен пример метода init для версии 2.1:

public class BookDetailServlet ... {
    public void init() throws ServletException {
        BookDBFrontEnd bookDBFrontEnd = 
            (BookDBFrontEnd)getServletContext().getAttribute(
                "examples.bookstore.database.BookDBFrontEnd");

        if (bookDBFrontEnd == null) {
            getServletContext().setAttribute(
                "examples.bookstore.database.BookDBFrontEnd",
                BookDBFrontEnd.instance());
        }
        ...
    }
    ...
}

Как видите метод init простой: он пытается получить параметр, и если параметр еще не получил значения, он создает его.

Есть и другие инициализирующие задачи, которые сервлет может выполнять. Например, если сервлет использует базу данных, метод init может открыть соединение с ней и в случае неудачи вызвать исключение UnavailableException. Ниже приведен псевдокод о том, как мог бы выглядеть метод init:

public class DBServlet ... {
    Connection connection = null;
    public void init() throws ServletException {
        // Соединяемся с базой данных перед запросами
        try {
            databaseUrl = getInitParameter("databaseUrl");
            ... 
            // Тем же способом берем параметры пользователя и пароля
            connection = DriverManager.getConnection(
                    databaseUrl, user, password);
        } catch(Exception e) {
            throw new UnavailableException (this,
                    "Could not open a connection to the database");
        }
    }
    ...
}

Параметры инициализации

Вторая версия метода init вызывает метод getInitParameter. Этот метод использует имя параметра в качестве аргумента и возвращает строковое представление (String) величины этого параметра.

(Спецификация инициализации параметров зависит от сервера. Например, параметры, устанавливающие свойства, когда сервлет выполняется с помощью servletrunner или сервером JSDK2.1. Урок Утилиты запуска сервлетов содержит общее объяснение свойств и как их создавать.)

Если по какой-то причине Вам потребуются имена параметров, используйте метод getParameterNames.