在JSP编程中Application的使用方法详解

  • 来源: 互联网 作者: rocket   2008-03-17/11:57
  • Jsp调用Javeabean命令UseBean中有Scope设置,一般有Application session page等设置,Page就是每页

    重新产生usebean中的javabean新对象,一般情况是用这种,如果多个Jsp程序间为共享数据,可以使用

    session

    而application的意思,该javabean将一直存在,与session相对用户来说,application是相对应用程序

    的,一般来说,一个用户有一个session,并且随着用户离开而消失;而application则是一直存在,类似

    一个servlet程序,类似整个系统的"全局变量",而且只有一个实例。

    MVC中控制功能

    因此application这个特性,很适合用来做MVC中的控制功能,一般传统MVC是用servlet做控制功能,V基

    本是Jsp页面,M就是中间件Javabean之类。

    但是随着Jsp功能的完善和推广,逐渐有替代servlet之趋势,我们在实践中更多使用的也是Jsp,有时为

    了省却麻烦的事情,就使用Jsp代替servlet.尤其是其控制功能。

    实际上,这个控制功能是封装在一个Javabean中,Jsp使用scope=application来调用这个Javabean,这样

    ,具备控制功能的javabean就类似servlet常驻内存,并和后台各种中间件交互操作。

    “首页”的展现

    在实际应用中,我们经常有多个用户要同时访问一个页面,如首页,这个首页中有很多功能要运行,比如

    目录分类,首页程序要从数据库中读入树形数据并展开,输出到首页,这个功能是封装在Javabean中的。

    那么首页Jsp调用这个Javabean时,使用scope=application, 再通过树形数据的缓冲算法,这样,多个用

    户同时访问首页时,首页JSp就无需每次启动Javabean然后再反复读取数据库了。无疑大大提高速度。

    所以如果你的首页Jsp访问量很高,那么就应该在这方面多花点时间优化。

    数据库连接缓冲


    < jsp:useBean id="cods"
    class="oracle.jdbc.pool.OracleConnectionCacheImpl"
    scope="application" />

    < event:application_OnStart>
    < %
    cods.setURL("jdbc:oracle:thin:@HOST:PORT:SID");
    cods.setUser("scott");
    cods.setPassword("tiger");
    cods.setStmtCache (5);
    %>
    < /event:application_OnStart>

    < %@ page import="java.sql.*, javax.sql.*, oracle.jdbc.pool.*" %>
    < !----------------------------------------------------------------
    * This is a JavaServer Page that uses Connection Caching over
    application
    * scope. The Cache is created in an application scope in
    globals.jsa file.
    * Connection is obtained from the Cache and recycled back once
    done.

    --------------------------------------------------------------------!>
    < HTML>
    < HEAD>
    < TITLE>
    ConnCache JSP
    < /TITLE>
    < /HEAD>
    < BODY BGCOLOR=EOFFFO>
    < H1> Hello
    < %= (request.getRemoteUser() != null? ", " +
    request.getRemoteUser() : "") %>
    ! I am Connection Caching JSP.
    < /H1>
    < HR>
    < B> I get the Connection from the Cache and recycle it back.
    < /B>
    < P>
    < %
    try {
    Connection conn = cods.getConnection();
    Statement stmt = conn.createStatement ();
    ResultSet rset = stmt.executeQuery ("SELECT ename, sal " +
    "FROM scott.emp ORDER BY ename");
    if (rset.next()) {
    %>
    < TABLE BORDER=1 BGCOLOR="C0C0C0">
    < TH WIDTH=200 BGCOLOR="white"> < I>Employee Name< /I> < /TH>
    < TH WIDTH=100 BGCOLOR="white"> < I>Salary< /I> < /TH>
    < TR> < TD ALIGN=CENTER> < %= rset.getString(1) %> < /TD>
    < TD ALIGN=CENTER> $< %= rset.getDouble(2) %> < /TD>
    < /TR>
    < % while (rset.next()) {
    %>
    < TR> < TD ALIGN=CENTER> < %= rset.getString(1) %> < /TD>
    < TD ALIGN=CENTER> $< %= rset.getDouble(2) %> < /TD>
    < /TR>
    < % }
    %>
    < /TABLE>
    < % }
    else {
    %>
    < P> Sorry, the query returned no rows! < /P>
    < %
    }
    rset.close();
    stmt.close();
    conn.close(); // Put the Connection Back into the Pool
    } catch (SQLException e) {
    out.println("< P>" + "There was an error doing the query:");
    out.println ("< PRE>" + e + "< /PRE>
    < P>");
    }
    %>
    < /BODY>
    < /HTML>


    使用application缓存数据库的连接,每次使用时,从缓冲中取出,用完就返回。


    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多