在web.xml中初始化HttpServlet的方法

时间:2017-08-25 20:22:13

标签: servlets web-applications controller initialization web.xml

我为我的webapp编写了一个控制器类,它继承自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>

上述代码不起作用,因为param值不是set属性。我在param-value中需要的是一个新的ClientsProvider()对象。在这种情况下,是否仍然可以在web.xml中执行init()工作?谢谢!

1 个答案:

答案 0 :(得分:1)

web.xml无法执行此操作,因为在启动时将不会有ClientProvider的实例。您可以使用DI之类的Spring Framework容器来执行此操作。如果您不想使用任何框架,可以将完整的限定类名称作为String传递,并在servlet中使用Class.forName(...)

constructor