Init方法被调用两次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());
    }
}

实际上,通过web.xml创建Gateway Servlet类的一个实例(对象),并通过@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>
链接地址: http://www.djcxy.com/p/67811.html

上一篇: Init method gets called twice java servlet

下一篇: How to get local mapping of a servlet in its init method?