服務(wù)器會(huì)在創(chuàng)建servlet實(shí)例之后和servlet處理任何請(qǐng)求之前調(diào)用servlet的init()方法。該方法在servlet的生命周期中僅調(diào)用一次。為了提高性能,在init()中緩存靜態(tài)數(shù)據(jù)或完成要在初始化期間完成的代價(jià)昂貴的操作。例如,一個(gè)最佳實(shí)踐是使用實(shí)現(xiàn)了javax.sql.DataSource接口的JDBC連接池。DataSource從JNDI樹中獲得。每調(diào)用一次SQL就要使用JNDI查找DataSource是非常昂貴的工作,而且嚴(yán)重影響了應(yīng)用的性能。Servlet的init()方法可以用于獲取DataSource并緩存它以便之后的重用:
public class ControllerServlet extends HttpServlet
{
private javax.sql.DataSource testDS = null; public void init(ServletConfig config) throws ServletException
{
super.init(config);
Context ctx = null;
try
{
ctx = new InitialContext();
testDS = (javax.sql.DataSource)ctx.lookup("jdbc/testDS");
}
catch(NamingException ne)
{
ne.printStackTrace();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public javax.sql.DataSource getTestDS()
{
return testDS;
}
...
...
}