如何指示 Tomcat 从多个路径提供同一个 servlet 实例?
例如,给定 example.com/old-address
和 example.com/new-address
,我想从这两个地址保存同一个 servlet 实例。我不想两次部署 servlet。在没有任何 Apache HTTP 服务器/反向代理 URL 重写的情况下,这是否可以通过独立的 Tomcat 实现?
最佳答案
回答这个问题有很多不同的层次:
- 实际的 servlet 实例(在“类的实例”的意义上)与您无关:应用程序服务器本身决定它想要实例化一个对象的多少个实例。 (通常只有 1 个 - 每个网络应用程序)
- 如果您在服务器的根路径 ("/") 上部署 Web 应用程序,您将能够映射 URL
/old-address
和/new-address
到同一个 servlet(同样,不要担心 实例。我假设你想部署一个 old-address.war 和一个 new-address.war - 在在这种情况下,您将运行完全不同的 Web 应用程序,这些应用程序将通过设计彼此分离。 - 如果您要从一个应用程序名称迁移到另一个应用程序名称,配置适当的重定向(永久重定向,就此而言)实际上是一个优势,这样每个人迟早都会更新他们的书签和链接。
跟进评论:
Servlet 不得在其实例中保留任何状态。请求是并发服务的,状态通过请求和响应对象进入。如果您担心对某些后端资源的并发访问(正如您在对问题的评论中所述):您已经有一个错误的实现并且很幸运没有被它咬伤。即使是单个 servlet 实例也可以处理数千个并发请求(如果容器接受那么多并发连接)。
servlet 对象 的内存消耗也无关紧要(请参阅我对此的评论)
你担心错了。
关于tomcat - 在 Tomcat 中从不同路径提供相同的 servlet 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34995900/