gpt4 book ai didi

java - java servlet 的 Init 方法被调用两次

转载 作者:行者123 更新时间:2023-12-01 21:12:39 27 4
gpt4 key购买 nike

我想在应用程序启动时调用 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>

关于java - java servlet 的 Init 方法被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40859982/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com