我正在探索servlet 3.0以编程性地添加servlet的功能,我无法完全得到以下区别:
- createServlet(class< t> clazz(
- addservlet(字符串ServletName,class<?
考虑:
- 方法(1(给出了servlet的实例;
- 方法(1(可能会抛出异常,而方法(2(则不。
(1(有什么用?
我在ServletContextListener
中使用(2(,一切似乎都没有问题。
createServlet
的理由在Javadoc中说明:
返回的servlet实例可以进一步定制 通过呼叫在此ServletContext注册 addservlet(字符串,servlet(。此方法在以下注释>:...此外,此方法支持资源注入如果给定的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);