HttpServlet实现类实例创建规则咨询:多类实例数与共享问题
Servlet实例创建规则解答
问题1:每个HttpServlet实现类是否会创建独立的Servlet实例?
默认情况下,每个HttpServlet实现类都会拥有独立的单例实例——Servlet容器(如Tomcat)会在该Servlet的首个请求到来时初始化一个实例,后续所有指向该Servlet的请求都会复用这个实例,靠多线程机制处理并发请求。不同的HttpServlet实现类之间的实例完全独立,互不干扰。
问题2:两个HttpServlet实现类会创建多少个Servlet实例?
针对给出的MyServlet1和MyServlet2两个实现类,Servlet容器会创建2个独立的实例:MyServlet1对应一个实例,处理/HelloServlet1路径的请求;MyServlet2对应另一个实例,处理/HelloServlet2路径的请求。它们不会共享同一个实例,各自的实例生命周期完全独立。
代码示例
MyServlet1
@WebServlet(name = "MyServlet1",value = "/HelloServlet1") public class MyServlet1 extends HttpServlet { public MyServlet1() { super(); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException { System.out.println("get Request"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException { System.out.println("post Request"); } }
MyServlet2
@WebServlet(name = "MyServlet2",value = "/HelloServlet2") public class MyServlet2 extends HttpServlet { public MyServlet2() { super(); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException { System.out.println("get Request"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException { System.out.println("post Request"); } }
内容的提问来源于stack exchange,提问作者nicks
相关产品推荐
相关产品推荐

