编程
方 法一:在 servlet 的 init()方法中缓存数据
当应用服 务器初始化 servlet 实例之后,为客户端请求提供服务之前,它
会调用这个 servlet 的 init()方法。在一个 servlet 的生命周期 中,init()方法
只会被调用一次。通过在 init()方法中缓存一些静态的数据或完成一些只需要执
行一次的、耗时的操作,就可大大地提高系统性能。
例如,通 过在 init()方法中建立一个 JDBC 连接池是一个最佳例子,假设
我们是用 jdbc2.0 的 DataSource 接口来取得数据库连接,在通常的情况 下,
我们需要通过 JNDI 来取得具体的数据源。我们可以想象在一个具体的应用中,
如果每次 SQL 请求都要执行一次 JNDI 查询的话,那系统性能将会急剧下 降。
解决方法是如下代码,它通过缓存 DataSource,使得下一次 SQL 调用时仍然
可以继续利用它:
以下是引用片段:
publicclassControllerServletextendsHttpServlet{
privatejavax.sql.DataSourcetestDS=null;
publicvoidinit(ServletCon'gcon'g)throwsServletException
{
super.init(con'g);
Contextctx=null;
try{
ctx=newInitialContext();
testDS=(javax.sql.DataSource)ctx.lookup("jdbc/testDS");
}catch(NamingExceptionne){ne.printStackTrace();}
}catch(Exceptione){e.printStackTrace();}
}
publicjavax.sql.DataSourcegetTestDS(){
returntestDS;
}
...
...
}
方 法 2:禁止 servlet 和 JSP 自动重载(auto-reloading)
Servlet/JSP 提供了一个实用的技术,即自动重载技术,它为开发人员提
供了一个好的开发环境,当你改变 servlet 和 JSP 页面后而不必重启应 用服务
器。然而,这种技术在产品运行阶段对系统的资源是一个极大的损耗,因为它