提升JSP應(yīng)用程序的秒招

字號(hào):


    方法一:在servlet的init()方法中緩存數(shù)據(jù)
    當(dāng)應(yīng)用服務(wù)器初始化servlet實(shí)例之后,為客戶端請(qǐng)求提供服務(wù)之前,它會(huì)調(diào)用這個(gè)servlet的init()方法。在一個(gè)servlet的生命周期中,init()方法只會(huì)被調(diào)用一次。通過(guò)在init()方法中緩存一些靜態(tài)的數(shù)據(jù)或完成一些只需要執(zhí)行一次的、耗時(shí)的操作,就可大大地提高系統(tǒng)性能。
    例如,通過(guò)在init()方法中建立一個(gè)JDBC連接池是一個(gè)最佳例子,假設(shè)我們是用jdbc2.0的DataSource接口來(lái)取得數(shù)據(jù)庫(kù)連接,在通常的情況下,我們需要通過(guò)JNDI來(lái)取得具體的數(shù)據(jù)源。我們可以想象在一個(gè)具體的應(yīng)用中,如果每次SQL請(qǐng)求都要執(zhí)行一次JNDI查詢的話,那系統(tǒng)性能將會(huì)急劇下降。解決方法是如下代碼,它通過(guò)緩存DataSource,使得下一次SQL調(diào)用時(shí)仍然可以繼續(xù)利用它:
    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 自動(dòng)重載(auto-reloading)