簡體   English   中英

初始化方法被兩次調用Java servlet

[英]Init method gets called twice java servlet

我想在應用程序啟動時調用init方法。

    <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());
    }
}

您實際上是在創建Gateway Servlet類的兩個實例(對象),一個通過web.xml ,一個通過@WebServlet ,因此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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM