虽然我无法真正想到这种情况的实际用例,但我纯粹打算将其作为一个好奇心驱动的问题。
我理解servlet容器保存在servlet创建的所有实例上,并将请求线程委托给这些实例。保持这些实例的管理也是有意义的,以避免不必要的调用来改变容器范围之外的servlet实例的生命周期。
但是真的没有办法访问servlet实例吗?
答案 0 :(得分:6)
在Servlet 2.1之前(已有十多年历史),您可以使用ServletContext#getServlet()
。然而,从那以后它被弃用了。仅仅因为它是一个糟糕的设计。如果要从请求 - 响应链中的servlet内部调用另一个servlet,只需使用RequestDispatcher#include()
。如果要调用另一个servlet的非servlet特定方法,那么现在只需将该代码重构为一个单独的Java类,然后可以在两个servlet中导入/使用它。
答案 1 :(得分:2)
容器只创建一个Servlet实例,并使用相同的实例来提供多个请求。有“SingleThreadModel”,如果你实现,容器会创建Servlet的多个实例,但现在已弃用。
答案 2 :(得分:0)
不通过标准的Servlet API(所以答案是否定的。)
然而,您可以使用您对实际实现的了解以及反射的讨厌技巧来掌握实现用于保存servlet实例的数据结构(所以答案是肯定的)。
然而,servlet容器可能有一个SecurityManager,禁止使用所述讨厌的技巧(所以答案可能就是这样)。