Есть два метода init () как часть универсального класса сервлета.
- init (конфигурация ServletConfig)
- Init ()
Пример программы сервлета для понимания 2 init () и их использования.
public class TestServlet extends HttpServlet{
public void init() throws......
{
System.out.println("we are in 2nd init() ");
}
public void service(HttpServlet.........)throws .....{
System.out.println("we are in TestServlet");
}
}
Шаги, выполняемые при развертывании вышеуказанного сервлета на сервере.
- После развертывания проекта, когда клиент впервые отправляет запрос на
Затем TestServlet сервер создает объект testServlet, а затем вызывает сначала init ()
метод (init (конфигурация ServletConfig)). Затем JVM проверяет первый метод init () в
TestServlet, поскольку он не доступен, тогда он также проверяет в суперклассе HttpServlet
первый метод init недоступен, затем JVM проверяет суперкласс HttpServlet, т.е.
Класс GenericServlet там сначала доступен init (), затем JVM выполняет его и вызывает
Второй init () в качестве второго init () непосредственно доступен в TestServlet, а затем JVM
выполняет его.
-> Совсем не рекомендуется использовать первый метод init (), когда мы используем HttpServlet.
-> В чем заключались проблемы и почему нам не рекомендуется использовать first init ()?
Первый подход:
public class TestServlet extends HttpServlet
{
public void init(ServletConfig config) throws.....
{
config=getServletConfig();
String paramName = config.getInitParameter("ParameterName");
System.out.println("paramName");
}
public void service(HttpServlet request ..........)throws .......
{
System.out.println("we are in 2nd service method()");
}
}
Следующие шаги выполняются при развертывании вышеуказанного сервлета.
Объект a.Servlet создан, и все переменные экземпляра суперкласса объявлены со значением по умолчанию, то есть со значением null. Затем JVM выполняет первый метод init (), как он был доступен в TestServlet, он выполняет его, но getServletConfig () доступен в GenericServlet, поэтому конфигурация установлена к нулю, когда клиент отправляет запрос на TestServlet, мы столкнемся с выполнением Null Pointer.
Второй подход
//Sample code
ServletConfig config;
public void init(ServletConfig config){
this.config=config;
String fileName = config.getInitParameter("ParameterName");
System.out.println(config);
}
Вышеприведенный код выглядит хорошо, но проблема с вышеуказанным кодом заключается в избыточности. В соответствии с правилами наследования избыточный код должен быть удален.
Третий подход:
//approach1 problem can be resolved by calling the super class init() so that config object
//will returned which we can use in init() of our servlet.
super.init(config);
config=getServletConfig();
Таким образом, для вышеупомянутых резонаторов Sun рекомендует использовать 2nd init () как часть нашего сервлета. Поскольку мы не предоставляем first init () как часть нашего кода, JVM будет вызывать первый метод init () GenericServlet .