2016-11-29 96 views
0

我想在應用程序啓動時調用init方法。初始化方法被調用兩次java servlet

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

上面是我的代碼這樣做。但奇怪的init方法被調用兩次。 以下是我的servlet代碼。任何幫助,將不勝感激。

@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

ŧ這裏很有可能你的servlet已經在兩種不同的環境中初始化了。檢查你的程序只有一個上下文。 – user1211

+0

@TechBreak瀏覽器是我的客戶端 –

回答

2

你實際上是通過@WebServlet通過web.xml和一個創建Gateway Servlet類一個的兩個實例(對象),所以init()正在(從每個實例之一)調用兩次。默認情況下,一個servlet類應該有一個實例(除非你想以不同的方式運行)。

所以要解決這個問題,你有兩個選擇:

(1)拆下web.xml,並添加loadOnStartup=1@WebServlet,如下所示:@WebServlet(urlPatterns="/Gateway", loadOnStartup=1)

(2)在你的Gateway類刪除@WebServlet(urlPatterns="/Gateway")並配置在web.xml在servlet如下圖所示:

<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

是的,這是問題所在。謝謝。 –