【问题标题】:Servlet init method override necessary必须重写 Servlet 初始化方法
【发布时间】:2023-12-20 18:53:01
【问题描述】:

在 Servlet 中,我通过 web.xml 的 init param 标签发送初始化数据。为什么我需要重写init方法来读取参数,我可以在我的doGet方法中通过getServletConfig().getInitParameter("someName")检索值!

另外,和config一样,我可以用这个方法访问初始化参数:request.getServletContext().getInitParameter("xyz");

为什么我需要重写 init 方法,并确保还设置了超类配置对象等?

【问题讨论】:

  • 这正是他们设计的方式。事后看来,这似乎没有必要,除非他们计划让人们使用 ServletConfig 包装器或类似的东西。

标签: java servlets overriding init


【解决方案1】:

我认为它可以用于 servlet 资源或字段的 init,因为 servlet init 只在 servlet 加载和卸载时引起(这种情况很少发生)。它在你的代码中增加了一些值参数的独立性,如果你只重写一次 init-method 你的 init servlet 而不是每次有人向你的 servlet 发送请求时,你也可以在不更改代码的情况下更改参数

【讨论】:

    【解决方案2】:

    你重写的init方法不是用来设置init参数的,这是由调用你的init方法的超类中的方法init(ServletConfig config)完成的,由容器调用-

    public void init(ServletConfig config) throws ServletException {
       this.config = config;
       this.init();
    }
    

    调用超类的init方法也没有意义,因为它是空的-

    public void init() throws ServletException {
    
    }
    

    如果您想在第一次请求之前执行一些其他所需的代码,您可以覆盖 init 方法。例如 - 创建数据库连接、设置一些日志记录详细信息等。如果这不适用于您的代码,您可以忽略它。

    【讨论】: