2017-04-19 47 views
-1

我探索編程添加servlet來的背景下,我不能完全得到之間的差異的Servlet 3.0功能:addservlet VS createservlet servlet上下文方法

  1. createServlet(Class<T> clazz)
  2. addServlet(String servletName, Class<? extends Servlet> servletClass)

考慮到:

  • 方法(1)給出servlet的實例;方法(1)可能拋出異常,而方法(2)不會。

(1)有什麼用?
我在ServletContextListener中使用(2),看起來一切正常,沒有問題。

回答

0

createServlet的原理是在Javadoc指出:

返回servlet實例可以進一步定製之前,它是 通過對 addServlet(字符串,Servlet的)的調用這個ServletContext的註冊。此方法反思了以下註釋的給定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);