实际上servlet中的init参数是什么?

时间:2018-02-04 17:03:12

标签: servlets

朋友们告诉我,如果是servlet,init参数的核心含义是什么。 我知道如何在web.xml中初始化它但我不知道为什么它需要它的实际目的是什么?请告诉我一个很好的例子。

2 个答案:

答案 0 :(得分:0)

Javadoc说:"一种可以覆盖的便捷方法,因此无需调用super.init(config)。"

init方法的主要目的是在初始化servlet时允许自定义。

最简单的实现是,当您不想根据应用程序进行任何自定义时,您始终可以调用super.init方法。

要了解不同init参数的含义以及init方法的用途: 想象一下BookManagement系统系统,这里用于添加书籍和从数据库中删除书籍,您将需要数据库连接,您可以通过它来访问数据。现在,当第一个请求调用Servlet的init方法时,数据库连接也只需要创建一次(如果进行连接池,则需要n次),然后初始化数据库连接就是你应该在init方法中做的事情。

来自Softlab example的代码段,我们假设getInitParameter方法从web.xml读取databaseUrl和其他属性

public class DBServlet ... {

        Connection connection = null;

        public void init() throws ServletException {

            // Open a database connection to prepare for requests
            try {
                databaseUrl = getInitParameter("databaseUrl");
                ... // get user and password parameters the same way
                connection = DriverManager.getConnection(databaseUrl,
                                                         user, password);
            } catch(Exception e) {
                throw new UnavailableException (this,
            "Could not open a connection to the database");
            }
        }
        ...
    }

计算访问时间servlet数量的另一个例子:https://docstore.mik.ua/orelly/java-ent/servlet/ch03_03.htm

总结:要进行自定义,例如读取变量的初始值或初始化资源(如数据库连接),可以使用init方法。

答案 1 :(得分:0)

以下是init方法的源代码:

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

public void init() throws ServletException;

建议覆盖到init()方法,而不是init(ServletConfig)。

当覆盖init(ServletConfig)时,必须要做的第一件事就是调用:

super.init(配置); 如果你这样做,那么在你的方法中直接调用getServletContext()将不再导致NPE。