Tomcat - Servlet init() 在启动时调用两次

2023-12-04

我对独立 Tomcat 服务器(未与 Apache 链接)有疑问。

当 Tomcat 启动时,servlet 的 init() 方法被调用两次,即启动两个 servlet。更令人担忧的是,这些似乎是由不同的类加载器加载的 - 只有一个 Java 进程在命令行上运行,因此它不是多个 Tomcat。

web.xml 片段(servlet 仅配置一次,并且仅在 webapp web.xml 中配置):

<servlet>
  <servlet-name>LenderInterfaceServlet</servlet-name>
  <display-name>Lender Interface Servlet</display-name>
  <servlet-class>com.foobar.lender.webservice.server.LenderInterfaceServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

我在 init 方法中添加了一些日志记录,并创建了一个名为 RatesPoller 的单例类,init 尝试获取该类的实例。从日志中我们可以看到单例实例是不同的:

LenderInterfaceServlet - [init] Start: com.foobar.lender.webservice.server.LenderInterfaceServlet@56d90453
LenderInterfaceServlet - [init] Starting up the Rates pollers.
LenderInterfaceServlet - [init] Got com.foobar.lender.framework.rates.RatesPoller@ae0e515
LenderInterfaceServlet - [init] Start: com.foobar.lender.webservice.server.LenderInterfaceServlet@1b0c6cfc
LenderInterfaceServlet - [init] Starting up the Rates pollers.
LenderInterfaceServlet - [init] Got com.foobar.lender.framework.rates.RatesPoller@5759780d

所以我们有两个不同的 servlet 和两个不同的单例轮询器。

我怀疑这意味着 Tomcat 正在启动存储在 Tomcat webapps 文件夹中的 webapp 的两个实例。显然,当您想要启动只有一个运行的东西时,这是一个问题,我需要弄清楚如何确保 Tomcat 不会运行该 web 应用程序两次!

如果有人有任何想法......

Code:

public class RatesPoller {

  private static RatesPoller instance;

  private RatesPoller() {}

  public static RatesPoller getInstance() {
    if (instance == null) {
        instance = new RatesPoller();
    }
    return instance;
  }

  public RatesPoller clone() throws CloneNotSupportedException {
    throw new CloneNotSupportedException("Singleton. Tsk!");
  }
}

以及 LenderInterfaceServlet 中的 init() 方法:

public class LenderInterfaceServlet extends AxisServlet {
  // ...
  @Override
  public void init() throws ServletException {
    logger.info("[init] Start: " + this);
    super.init();
    logger.info("[init] Starting up the Rates pollers.");
    RatesPoller rp = RatesPoller.getInstance();
    logger.info("[init] Got " + rp);
  }
  // ...
}

Tomcat 会自动部署 webapp 中的任何内容,并且还会根据 server.xml 进行部署。只需从 Web 应用程序中删除您的 Web 应用程序即可避免双重加载。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tomcat - Servlet init() 在启动时调用两次 的相关文章

随机推荐

  • UIDatePicker 语言环境什么都不做?

    我正在以编程方式创建 UIDatePicker 并使用以下代码设置其区域设置 datePicker locale NSLocale alloc initWithLocaleIdentifier es ES autorelease 日期选择器
  • 在 iOS 设备上查找正确的时间

    我想找出 iOS 设备上的正确时间 即使用户手动设置了错误的时间 在设置 gt 常规 gt 日期和时间中 有自动设置选项 如果用户取消选中该选项 那么我如何以编程方式找到正确的时间 使用 NTP 协议获取当前时间或从服务器提供时间并在应用程
  • 使用foldl 和foldr 反转Scheme 中的列表

    如何定义一个函数来反转Scheme中的列表 方法是使用foldr and foldl 我们想要的是一个简洁的解决方案 使用foldl调用并使用不同的解决方案foldr调用 定义为 define foldl operation lst ini
  • QtGui.QTextEdit 根据线条包含的文本设置线条颜色

    这是我第一次使用 stackoverflow 来寻找问题的答案 我正在使用 QtGui QTextEdit 来显示类似于下面的文本 并希望根据某些行是否包含某些文本来更改文本的颜色 以 开头的行将为蓝色 包含 ERROR 的行将为红色 我目
  • 带有包含查询的 JPA 转换器

    我的 Spring Boot 应用程序中的特定查询遇到了一些问题 我正在使用 Spring 的内置文本加密来加密数据库中的文本 我有一个名为 BookRecord 的实体 Entity Table name books EntityList
  • 使用 Spring JPA 存储库和查询 DSL 进行动态投影

    我目前有一个 Spring JPA 存储库继承QuerydslPredicateExecutor and JpaRepository 我正在使用Page
  • PyQt4.QtCore.QVariant 对象而不是字符串?

    我按照这个例子键 值 pyqt QComboBox 使用下面的代码将 ID 值存储到组合框项 self combox widget addItem Apples Green indx self combox widget currentIn
  • java.lang.ClassNotFoundException:org.springframework.core.ResolvableTypeProvider [重复]

    这个问题在这里已经有答案了 我已经编写了一个 Spring 带注释的调度程序程序 但是当我执行它时 它会在帖子标题中给出错误消息 SchedulerConfig java import java util concurrent Execut
  • .net (C#) 中的模拟并通过 Process.start 打开文件

    你好 我正在使用以下方法进行一些模仿LogonUser正如许多地方所解释的那样 我使用了引入的很棒的类库here 但原理似乎全网都是一样的 我成功地模仿并去了我的 普通 用户无法到达的地方 但是当我尝试以编程方式打开一个doc文件 或txt
  • PowerShell - 启动进程和命令行开关

    我可以很好地运行 msbuild C WINDOWS Microsoft NET Framework v3 5 MSBuild exe start process msbuild wait 但是当我运行这段代码 如下 时 我收到错误 msb
  • 禁用keras或tensorflow输出[重复]

    这个问题在这里已经有答案了 我知道 stackoverflow 上已经有一些类似的问题 但没有一个解决我的问题 在 python 脚本中 我必须多次训练 keras 模型 并且我想在 GPU 支持下完成此操作 每次我在输出控制台中看到一堆行
  • Linux 32 位机器上程序的堆栈分配限制

    在 C 中 在编译器放弃并表示无法为堆栈分配更多内存之前 堆栈段可以增长多少 在 linux fedora 32 位机器上使用 gcc 在 UNIX 下 如果您正在运行 bash 请运行 ulimit a 它将列出各种限制 包括堆栈大小 我
  • 使用 php 使用 socket_write 发送大数据包

    我正在尝试将图像编码为 base64 编码并将其发送到我正在创建的 C 服务器 我正在使用 PHP 来做到这一点 因此 PHP代码是客户端 C 代码是监听服务器 该问题出现在大图像上 例如 70KB 图像 它在小图像上工作正常 比如5KB
  • Django - 关系“关系”不存在。无法运行 python manage.py migrate?

    所以我很愚蠢 我去删除了 django 应用程序中的一个表 因此打开 psql 并运行 Drop table 然后桌子掉了 然后我删除了我的模型并运行 python manage py migrate 然后出现此错误 django db u
  • 将核心类放在 Web 根目录之上 - 好还是坏主意?

    我们正在开发几个在我们自己的服务器上运行的 Web 应用程序 这些应用程序将共享许多核心类作为其 MVC 设置的一部分 我正在考虑将这些类放在 Web 根目录之上 以便所有应用程序都可以仅使用一份副本来 autoload 这些类 而不必担心
  • Android WebView 未加载移动网站

    我的应用程序显示来自 RSS 源的文章列表 当选择一篇文章时 它会在 Web 视图中显示该文章 问题是网络视图显示的是桌面网站而不是移动版本 我似乎不明白为什么 网页视图代码 package com kentuckyfarmbureau k
  • NodeJS 和 Mongo - 多个用户同时发送请求时的意外行为

    我们一直在使用 NodeJS 和 mongo 通过 mongoose 来执行一个非常简单的 save 我们有一个名为 highlights 的模型 其中包含引用 responses 的 ObjectId 数组 这是突出显示模型声明的相关部分
  • 量角器:等待方法不起作用

    我尝试使用 wait 方法代替 sleep 但它不起作用 我有代码 browser actions click filter field perform browser sleep 3000 if baloon info isPresent
  • 剪辑路径插入圆?

    是否可以创建一个插入圆形剪辑路径 以便剪辑路径可以有效地在中心的 div 中切出一个孔 而不是仅显示中心 div 应该全部显示 除了在中心切出一个孔以创建如下内容 我想使用剪辑路径或类似的东西 这样我就可以在 div 后面添加内容 图像和内
  • Tomcat - Servlet init() 在启动时调用两次

    我对独立 Tomcat 服务器 未与 Apache 链接 有疑问 当 Tomcat 启动时 servlet 的 init 方法被调用两次 即启动两个 servlet 更令人担忧的是 这些似乎是由不同的类加载器加载的 只有一个 Java 进程