抽象servlet - 如何防止实例化

时间:2016-01-15 12:05:30

标签: java servlets

我希望两个Java servlet共享公共init()destroy()方法以及初始化参数。所以很自然地,我实现了抽象servlet public abstract class CommonConnectionServlet extends HttpServlet,实现了所提到的方法。我还在web.xml文件中添加了一些初始化参数。我描述了两个扩展我的抽象servlet的servlet。但是它没有用 - glassfish服务器试图创建CommonConnectionServlet实例,引发异常并且servlet没有启动。

我可以以某种方式阻止抽象servlet的实例化吗?或者,通常声明抽象servlet是一个坏主意吗?

1 个答案:

答案 0 :(得分:2)

抽象servlet很好,如果你愿意,你可以这样做。问题似乎是您在 web.xml 中声明了它。在那里宣布(或注释)作为' servlet'将被实例化。

首先,将其从web.xml中删除。然后,如果我理解正确,您想通过web.xml共享一些参数。最简单的方法是创建"上下文参数"而不是" init-parameters",如下所示:

<web-app>
    <context-param>
        <param-name>name</param-name>
        <param-value>value</param-value>
    </context-param>
    ...
</web-app>

然后,您必须重写您的抽象servlet以首先尝试GenericServlet.getInitParameter(),但如果没有返回任何内容,则重试ServletContext.getInitParameter()。

这种子类servlet可以在需要时覆盖参数,但如果没有,则使用公共共享参数。