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

Way to initialize HttpServlet in web.xml

我为我的 webapp 写了一个控制器 class,它继承自 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 是另一个 class,我在其中初始化了我在该项目中使用的所有客户端。

现在我想使用 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无法做到这一点,因为启动时不会有ClientProvider的实例。您可以在 servlet 中使用 DI container like the Spring Framework to do that. If you dont want to use any framework, you could pass the full qualified class name as a String and use Class.forName(...)

<context-param>
    <param-name>clientsProvider</param-name>
    <param-value>your.package.ClientsProvider</param-value>
    <!--<param-value>your.package.AnotherClientsProvider</param-value>-->
</context-param>