1
我爲我的webapp編寫了一個控制器類,它繼承自HttpServlet。在web.xml中初始化HttpServlet的方法
public abstract class BaseController extends HttpServlet {
protected ClientsProvider clientsProvider;
@Override
public void init() throws ServletException {
clientsProvider = (ClientsProvider) getServletContext().getAttribute(
"clientsProvider");
if (clientsProvider == null) {
clientsProvider = new ClientsProvider();
getServletContext().setAttribute("clientsProvider", clientsProvider);
}
super.init();
}
CommonsProvider是另一個類,其中我初始化了我在此項目中使用的所有客戶端。
現在我想使用web.xml來完成init()工作,而不是在這裏編寫這樣的init()代碼。像這樣:
<servlet>
<servlet-name>BaseController</servlet-name>
<servlet-class>myproject.controller.BaseController</servlet-class>
<load-on-startup>1</load-on-startup>
<context-param>
<param-name>clientsProvider</param-name>
<param-value>clientsProvider</param-value>
</context-param>
</servlet>
上面的代碼不工作,因爲參數值沒有設置屬性。我需要的參數值是一個新的ClientsProvider()對象。在這種情況下,是否仍然可以在web.xml中執行init()工作?謝謝!
您無法在web.xml中執行該聲明,但您可以使用生命週期偵聽器或過濾器來解決此類橫切問題。 DI框架使用相同的機制。 – eckes