在本文中,率领你学习曾经实际和失去证实的性能调整技术,它将大大地进步你的servlet和jsp页面的性能,进而晋升J2EE的性能。这些技术的局部用于开发阶段,例如,设计和编码阶段。另一部分技术则与配置相干。

技术1:在HttpServlet init()办法中缓存数据

服务器会在创立servlet实例之后和servlet解决任何申请之前调用servlet的init()办法。该办法在servlet的生命周期中仅调用一次。为了进步性能,在init()中缓存静态数据或实现要在初始化期间实现的代价低廉的操作。例如,一个最佳实际是应用实现了 javax.sql.DataSource接口的JDBC连接池。DataSource从JNDI树中取得。每调用一次SQL就要应用JNDI查找 DataSource是十分低廉的工作,而且重大影响了利用的性能。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;

}

...

...

}

技术2:禁用servlet和Jsp的主动装载性能

当每次批改了Servlet/JSP之后,你将不得不重新启动服务器。因为主动装载性能缩小开发工夫,该性能被认为在开发阶段是十分有用的。然而,它在运行阶段是十分低廉的;servlet/JSP因为不必要的装载,减少类装载器的累赘而造成很差的性能。同样,这会使你的利用因为已被某种类装载器装载的类不能和以后类装载器装载的类不能相互协作而呈现奇怪的抵触景象。因而,在运行环境中为了失去更好的性能,敞开servlet/JSP的主动装载性能。

技术3:管制HttpSession

许多利用须要一系列客户端的申请,因而他们能相互相关联。因为HTTP协定是无状态的,所以基于Web的利用须要负责保护这样一个叫做 session的状态。为了反对必须保护状态的利用,Java servlet技术提供了治理session和容许多种机制实现session的API。HttpSession对象表演了session,然而应用它须要老本。无论何时HttpSession被应用和重写,它都由servlet读取。你能够通过应用上面的技术来进步性能:

在JSP页面中不要创立默认的HttpSession:默认状况下,JSP页面创立HttpSession。如果你在JSP页面中不必HttpSession,为了节俭性能开销,应用下边的页面指令能够防止主动创立HttpSession对象:

以下是援用片段:

< %@ page session="false"%>

不要将大的对象图存储在HttpSession中:如果你将数据当作一个大的对象图存储在HttpSession中,应用服务器每次将不得不解决整个HttpSession对象。这将迫使Java序列化和减少计算开销。因为序列化的开销,随着存储在HttpSession对象中数据对象的增大,零碎的吞吐量将会降落。

用完后开释HttpSession:当不在应用HttpSession时,应用HttpSession.invalidate()办法使sesion生效。

设置超时值:一个servlet引擎网站监控有一个默认的超时值。如果你不删除session或者始终把session用到它超时的时候,servlet引擎将把session从