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 {
}
- 如果我转发到 AdminLoginServlet,是否会再次分配参数(errorURL、adminMenuURL 等)?
- 如果我重写 AdminLoginServlet(以及其他从 MainServlet 扩展的 servlet)中的 init 方法...这些属性将永远不会被分配,不是吗?
- 你会怎么做我假装做的事?
谢谢。
- 成员
adminMenuUrl
等是在引擎首次创建servlet时分配的,因为这是调用init()
的时刻。每个用户请求都由不同线程中的同一个 servlet 实例处理。当您将请求转发到 servlet 时,方法 init()
不会被调用。
- 你是对的,因为没有
MainServlet
的实例
- 我不确定您的网络应用应该是什么样子
您应该重命名字段 AdminLoginServlet
和 ValidateServlet
,因为字段名以大写字母开头是不好的做法。
我正在考虑如何创建一个主 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 {
}
- 如果我转发到 AdminLoginServlet,是否会再次分配参数(errorURL、adminMenuURL 等)?
- 如果我重写 AdminLoginServlet(以及其他从 MainServlet 扩展的 servlet)中的 init 方法...这些属性将永远不会被分配,不是吗?
- 你会怎么做我假装做的事?
谢谢。
- 成员
adminMenuUrl
等是在引擎首次创建servlet时分配的,因为这是调用init()
的时刻。每个用户请求都由不同线程中的同一个 servlet 实例处理。当您将请求转发到 servlet 时,方法init()
不会被调用。 - 你是对的,因为没有
MainServlet
的实例
- 我不确定您的网络应用应该是什么样子
您应该重命名字段 AdminLoginServlet
和 ValidateServlet
,因为字段名以大写字母开头是不好的做法。