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