从Tomcat中的不同路径提供相同的servlet实例

时间:2016-01-25 15:13:18

标签: tomcat

如何指示Tomcat从多个路径提供相同的servlet实例?

例如,给定example.com/old-addressexample.com/new-address,我想从这两个地址保存相同的servlet实例。我不想两次部署servlet。这是可能的Tomcat独立,没有任何Apache HTTP服务器/反向代理URL重写?

2 个答案:

答案 0 :(得分:1)

回答这个问题有很多不同的层次:

  • 实际的servlet 实例(在“类的实例”意义上)不是您的业务:应用程序服务器本身决定它想要实例化的对象的实例数。 (通常每个网络应用只有1个)
  • 如果您在服务器的根路径(“/”)上部署Web应用程序,则可以将URL /old-address/new-address映射到同一个servlet(同样,不要'担心实例。我假设您要部署old-address.war和new-address.war - 在这种情况下,您将运行完全不同的Web应用程序,将通过设计彼此分开。
  • 如果您要从一个应用程序名称迁移到另一个应用程序名称,那么配置正确的重定向(永久重定向就此而言)实际上是一个优势,因此每个人迟早都会更新其书签和链接。

跟进评论:

servlet不得在其实例中保留任何状态。请求同时提供,状态通过请求和响应对象进入。如果您担心并发访问某些后端资源(正如您在问题评论中所述):您已经有一个错误的实现,并且幸运的是没有被它咬过。即使是单个servlet实例也可以处理数千个并发请求(如果容器接受那么多并发连接)。

servlet 对象的内存消耗也无关紧要(参见我对此的评论)

你担心错误的事情。

答案 1 :(得分:0)

您可以在web.xml中使用servlet-mapping,如下所示:

<servlet-mapping>
  <servlet-name>yourServletName</servlet-name>
  <url-pattern>/old-address</url-pattern>
  <url-pattern>/new-address</url-pattern>
</servlet-mapping>

url-pattern元素可以在servlet-mapping元素中任意重复。