我正在探索Servlet 3.0的功能,以编程方式将servlet添加到上下文中,我无法完全区分:
考虑到:
(1)有什么用?
我在ServletContextListener
中使用(2),一切似乎都没有问题。
答案 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);