По умолчанию инициализация класса HttpServlet инициализирует сервлет и идентифицирует инициализацию. Чтобы проинициализировать сервлет определенным образом, переопределите метод init согласно той версии JSDK, которую используете: метод init(ServletConfig) для версии 2.0 и метод init() для версии 2.1. При переопределении метода 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"); } } ... }