addservlet vs createservlet servlet context方法

时间:2017-04-19 13:55:13

标签: java servlets servlet-3.0 servletcontextlistener

我正在探索Servlet 3.0的功能,以编程方式将servlet添加到上下文中,我无法完全区分:

  1. createServlet(Class<T> clazz)
  2. addServlet(String servletName, Class<? extends Servlet> servletClass)
  3. 考虑到:

    • 方法(1)给出了servlet的一个实例;
    • 方法(1)可以抛出异常,而方法(2)则不抛出异常。

    (1)有什么用? 我在ServletContextListener中使用(2),一切似乎都没有问题。

1 个答案:

答案 0 :(得分:0)

createServlet的基本原理在Javadoc中说明:

  

返回的Servlet实例可以在它之前进一步自定义   通过调用注册到此ServletContext   addServlet(字符串,Servlet的)。此方法会针对以下注释对给定的clazz进行内省:...此外,如果给定的clazz表示托管Bean,则此方法支持资源注入

因此,API允许您执行以下操作:

// create a servlet, process annotations and do injections
MyServlet myServlet = context.createServlet(MyServlet.class);

// further customization
myServlet.runSpecialInit(someArg);   

// register
context.addServlet("theName", myServlet);

或者您可以执行以下操作

MyServlet myServlet = new MyServlet();
myServlet.runSpecialInit(someArg);
context.addServlet("theName", myServlet);

但与第一个片段相反,这不会评估注释并进行注射。

您可以将addServlet(String servletName, Class<? extends Servlet> servletClass)视为

的缩写
Servlet servlet = createServlet(servletClass);
addServlet(servletName, servlet);