Servlets、初始化和扩展

Servlets, init and extends

我正在考虑如何创建一个主 servlet,其余的 servlet 都由此扩展。我有一些属性,我希望我的应用程序中的整个 servlet 都可以访问这些属性,并且我想初始化它们。我认为它可能是这样的:

public abstract class MainServlet extends HttpServlet {

   protected String errorURL = null;
   protected String adminMenuURL = null;
   protected String AdminLoginServlet = null;
   protected String ValidateServlet = null;

   // here, more properties and methods...

   @Override
   public void init() {
       errorURL = context.getInitParameter("errorURL");
       adminMenuURL = context.getInitParameter("adminMenuURL");
       AdminLoginServlet = context.getInitParameter("AdminLoginServlet");
       ValidateServlet = context.getInitParameter("ValidatePicsServlet");
       // here, some more inits...
   }
}

当我像下面这样创建一个新的 Servlet 时...

public class AdminLoginServlet extends MainServlet {

}
  1. 如果我转发到 AdminLoginServlet,是否会再次分配参数(errorURL、adminMenuURL 等)?
  2. 如果我重写 AdminLoginServlet(以及其他从 MainServlet 扩展的 servlet)中的 init 方法...这些属性将永远不会被分配,不是吗?
  3. 你会怎么做我假装做的事?

谢谢。

  1. 成员adminMenuUrl等是在引擎首次创建servlet时分配的,因为这是调用init()的时刻。每个用户请求都由不同线程中的同一个 servlet 实例处理。当您将请求转发到 servlet 时,方法 init() 不会被调用。
  2. 你是对的,因为没有 MainServlet
  3. 的实例
  4. 我不确定您的网络应用应该是什么样子

您应该重命名字段 AdminLoginServletValidateServlet,因为字段名以大写字母开头是不好的做法。