2016-11-29 4 views
0

Я хочу вызвать метод init при запуске приложения.Метод Init получает вызов дважды Java-сервлет

<servlet> 
     <servlet-name>servletTest</servlet-name> 
     <servlet-class>com.gateway.Gateway</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

выше мой код для этого. Но странный метод init вызывается дважды. Ниже мой код сервлета. Любая помощь будет оценена по достоинству.

@WebServlet("/Gateway") 
public class Gateway extends HttpServlet { 
    private static final long serialVersionUID = 1L; 
    public Gateway() { 
     super(); 
    } 
    public void init(ServletConfig config) throws ServletException { 
     System.out.println("Init called"); 
    } 
    public void destroy() { 
     System.out.println("Destroy called"); 
    } 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     System.out.println("Received a Request"); 
     response.getWriter().append("Served at: ").append(request.getContextPath()); 
    } 
} 
+0

обеспечивают вашу призывающую реализацию клиента, чтобы проанализировать проблему – ScanQR

+0

T вот хороший шанс, что ваш сервлет был инициализирован в двух разных контекстах. Проверьте, что ваша программа имеет только один контекст. – user1211

+0

@TechBreak браузер - мой клиент –

ответ

2

Вы фактически создаете два экземпляра (объекты) на Gateway Servlet класса один через web.xml и один через @WebServlet, поэтому init() в настоящее время вызывается дважды (один из каждого экземпляра). По умолчанию класс сервлета должен иметь один экземпляр (если вы не хотите работать по-другому).

Так, чтобы решить эту проблему, у вас есть два варианта:

(1) Снимите web.xml и добавить loadOnStartup=1 к вашему @WebServlet, как показано ниже: @WebServlet(urlPatterns="/Gateway", loadOnStartup=1)

(2) Удалить @WebServlet(urlPatterns="/Gateway") в вашем Gateway классе и настроить сервлет в web.xml, как показано ниже:

<servlet> 
     <servlet-name>Gateway</servlet-name> 
     <servlet-class>com.gateway.Gateway</servlet-class> 
     <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
     <servlet-name>Gateway</servlet-name> 
     <url-pattern>/Gateway</url-pattern> 
    </servlet-mapping> 
+0

Да, это была проблема. Спасибо. –

Смежные вопросы