你时常被客户抱怨JSP页面响应速度很慢吗?你想过当客户访问次数剧增时,你的WEB应用能承受日益增加的访问量吗?本文讲述了调整JSP和servlet的一些非常实用的方法,它可使你的servlet和JSP页面响应更快,扩展性更强 。 而且在用户数增加的情况下,系统负载会呈现出平滑上长的趋势 。 在本文中,我将通过一些实际例子和配置方法使得你的应用程序的性能有出人意料的提升 。 其中,某些调优技术是在你的编程工作中实现的 。 而另一些技术是与应用服务器的配置相关的 。 在本文中,我们将详细地描述怎样通过调整servlet和JSP页面,来提高你的应用程序的总体性能 。 在阅读本文之前,假设你有基本的servlet和JSP的知识 。 方法一:在servlet的init()方法中缓存数据 当应用服务器初始化servlet实例之后,为客户端请求提供服务之前,它会调用这个servlet的init()方法 。 在一个servlet的生命周期中,init()方法只会被调用一次 。 通过在init()方法中缓存一些静态的数据或完成一些只需要执行一次的、耗时的操作,就可大大地提高系统性能 。 例如,通过在init()方法中建立一个JDBC连接池是一个最佳例子,假设我们是用jdbc2.0的DataSource接口来取得数据库连接,在通常的情况下,我们需要通过JNDI来取得具体的数据源 。 我们可以想象在一个具体的应用中,如果每次SQL请求都要执行一次JNDI查询的话,那系统性能将会急剧下降 。 解决方法是如下代码,它通过缓存DataSource,使得下一次SQL调用时仍然可以继续利用它: publicclassControllerServletextendsHttpServlet { privatejavax.sql.DataSourcetestDS=null; publicvoidinit(ServletConfigconfig)throwsServletException { super.init(config); 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页面后而不必重启应用服务器 。 然而,这种技术在产品运行阶段对系统的资源是一个极大的损耗,因为它会给JSP引擎的类装载器(classloader)带来极大的负担 。 因此关闭自动重载功能对系统性能的提升是一个极大的帮助 。 
|