• 青海“天然林管护+生态扶贫” 5517万亩天然林得到保护 2019-08-17
  • 消除“毒跑道”,关键在标准 2019-08-17
  • 朝韩首脑共同检阅韩国三军仪仗队 2019-08-12
  • 新时代建筑的审美需要 2019-08-11
  • 贸易战,只能是双输。我们是众志成城,美国却不一定。 2019-08-11
  • 扎进深山扶贫 暖了百姓心——省个私企业党委直属企业党组织“精准扶贫丰宁行”活动侧记 2019-08-10
  • 5月份61城房价环比反弹 多地调控政策或再加码 ——凤凰网房产济南 2019-08-06
  • 时隔12载杀回决赛圈 “沙漠之狐”力争不做背景帝 2019-08-06
  • 证监会通报4宗新三板案件 数量接近2017年全年水平 2019-08-05
  • 滴滴计划恢复部分夜间时段订单  2019-07-29
  • 南非发布限量版消防主题邮票 2019-07-29
  • 北京师范大学心理学部许燕教授作“领导干部心理调适”专题报告 2019-07-25
  • 高考评卷在三所高校进行 确保高质高效完成评卷任务 2019-07-25
  • 「社会人」小猪佩奇过气了,但年轻人还爱着它 2019-07-24
  • 粽情粽意 传承文明———我们的节日2018端午节 2019-07-24
  •    
     
    [返回]  
      [JSP下JavaBean生存周期详解]
        作者:张实
     
    [正文]
      JSP由于其强大的生命力在web开发中有很广泛的应用,实际上在JSP开发中,JSP程序中只占用了很少的一部分,大部分是由JavaBean完成的,通过JavaBean可以封装业务逻辑,数据库处理等等,由于有了JavaBean才使得程序更为健壮,易于扩展。所以,详细的了解JavaBean的基础,对于我们开发出高质量的JSP应用程序是很有帮助

    [一、JavaBean在JSP中的基本语法]
    JSP中JavaBean是通过标签<jsp:useBean>来声明实现的,基本语法如下:
       <jsp:userBean id="beanName" class="className" scope="page/request/session/application></jsp:userBean>

    由于我们讨论的是生存周期,在上面语法中通过scope属性来实现的:
      scope="page/request/session/application
      scope的值代表 JavaBean的生存周期,也就是JavaBean的实例id在JSP程序中存在的范围。
    下面看看具体的scope四个值的含义:
      page-JavaBean对象保存在pageContext对象中,有page范围JavaBean实例只能在当前创建这个JavaBean的JSP文件中进行操作,

      这个实例只有在请求返回给客户端后或者转移到另外的JSP页面后才会释放掉。page范围的JavaBean常用于进行一次性操作的JavaBean,这样的Bean用的最多,比如大部分表单提交,Bean的一些计算处理等都可以使用page范围的JavaBean
      request-JavaBean对象保存在request对象中,有request范围的JavaBean实例可以在处理请求所有JSP页面中都存在,这个对象只有在请求全部处理完毕后才会被释放掉,request范围的JavaBean常用于共享同一次请求的JSP页面中,比如判断用户登录功能,如果用户名密码合法就可以forward到一个合法页面中,否则就forward到一个出错页面,当然转移后的页面仍然能够得到用户的输入。
      session-JavaBean对象是保存在session范围的JavaBean实例的生存周期是整个session,只有当session过期后才能释放掉,这样常用于共享同一session的JSP页面,比如购物车一般就是放在session中的或者登陆后的用户信息等也可以在session中,注意<%@page标签中不要设置session=false,否则在这个JSP页面中session将不会起作用,幸好JSP默认session=true,所以可以不必管它了。application-JavaBean对象保存在application对象中,有application范围的JavaBean对象的生存周期是整个application。这就意味着这样的JavaBean的生存周期是整个应用程序,当web Server停掉才会消失掉。这样的常用于共享同一application的JSP程序中,比如程序中一些经常用到配置东西如数据库连接URL,全局的计数器或者是聊天室中人员信息等。

    [二、scope的具体应用]
      上面讲了这么多,大家应用对JavaBean的生存周期有个基本的概念了,在这里我们结合几个简单的例子来看看scope在JavaBean中应用,以便大家能对scope有更深的了解,用来演示的是一个简单的积分处理程序,初始化为o,每一次访问会将积分加上10,我们使用了一个JavaBean文件,用于数值计算处理的,然后在前台使用几个scope设置不同的JSP文件调用这个JavaBean。

    <核心的JavaBean文件>
    public class scope
    {
    //初始化成员变量,scope_count代表积分分值
    int scope_count=10;
    public scope(){} //构造方法
    public int TestNumber(){
    scope_count+=10;
    return scope_count;
    }
    //设置scope_count的值
    public void setNumber(int ber){
    scope_sount=number;
    }

    }
    <page范围的演示>
    下面是为了演示page范围的JSP文件page.jsp文件。
    page.jsp
    <%@ page contentType="text/html";charset=gb2312"%>
    <html><head>
    <title>page范围积分程序演示</title>
    </head>
    <!--初始化JavaBean并生成一个scope的实例-->
    <jsp:useBean id="jinqiao" scope="page" class="com.scope"/>
    <body>
    page范围积分程序演示<br>
    <center>您当前的积分为<%//调用scope中的TestNumber方法得到当前积分
    out.println(jinqiao.TestNumber());%>
    </center>
    </body>
    </html>
      好了,启动web服务器,然后运行这个程序,使用浏览器并点击刷新按钮,看屏幕的变化,你会发现结果总是积分为20,这就说明了TestNumber方法只被执行了一欠,因为jinqiao对象的生存范围是page的,所以只在这个页面有效,每一次调用这个JSP页面都会重新生成一个jinqiao对象,当然积分不会变化了。

    <request范围的演示>
    下面是为了演示request范围的JSP文件request.jsp。
    request.jsp
    <%@ page contentType="text/html";charset=gb2312"%>
    <html><head>
    <title>request范围积分程序演示</title>
    </head>
    <!--初始化JavaBean并生成一个scope的实例-->
    <jsp:useBean id="jinqiao" scope="request" class="com.scope"/>
    <body>
    page范围积分程序演示<br>
    <center>您当前的积分为<%//调用scope中的TestNumber方法得到当前积分
    out.println(jinqiao.setNumber(18));%>
    <jsp:forward page=request.jsp/>
    </center></body></html>

    request1.jsp
    <%@ page contentType="text/html";charset=gb2312"%>
    <html><head>
    <title>page范围积分程序演示</title>
    </head>
    <!--初始化JavaBean并生成一个scope的实例-->
    <jsp:useBean id="jinqiao" scope="request" class="com.scope"/>
    <body>
    request范围积分程序演示<br>
    <center>您当前的积分为<%//调用scope中的TestNumber方法得到当前积分
    out.println(jinqiao.TestNumber());%>
    </center>
    </body>
    </html>

      好了,启动web服务器,然后运行这个程序,使用浏览器并点击刷新按钮,看屏幕的变化,你会发现结果总是积分为28为什么会有这样一个结果呢,因为首先我们在request.jsp文件中调用了jinqiao对象setNumber方法设置积分值为18,然后我们将请求转移到request1.jsp页面,因为同一相应还没有处理完毕,所以在request1.jsp中得到的仍然是同一个jinqiao实例,然后通过jinqiao的TestNumber方法将jinqiao的积分18+10,所以就得到了28了。注意的是<jsp:forward>标签是用来将请求转移的两个页面中的Bean声明包括id名字,request范围等要一模一样才行,这样JSP程序才会认为你要调用的是同一个JavaBean实例

    <session范围的演示>
    下面是为了演示session范围的JSP文件session.jsp文件,
    session.jsp

    ?<%@ page contentType="text/html";charset=gb2312"%>
    <html><head>
    <title>session范围积分程序演示</title>
    </head>
    <!--初始化JavaBean并生成一个scope的实例-->
    <jsp:useBean id="jinqiao" scope="session" class="com.scope"/>
    <body>
    session范围积分程序演示<br>
    <center>您当前的积分为<%//调用scope中的TestNumber方法得到当前积分
    out.println(jinqiao.TestNumber());%>
    </center>
    </body>
    </html>
      好了,启动web服务器,然后运行这个程序,使用浏览器并点击刷新按钮,看屏幕的变化,你会发现结果是变化的,开始时是:您当前的积分为20,然后就是30,40.。。,这就说明了TestNumber()方法被执行了多次,因为jinqiao对象生存范围是session的,所以在整个session有效,每一次刷新这个jsp页面都会调用同一个jinqiao对象,所以积分都是同一个了,
      另外,为了更方便的理解session,可以将上面的session.jsp文件完整的拷贝一份生成session1.jsp文件,在浏览器中执行session.jsp文件,看积分值的变化,然后还使用同一个浏览器,输入session1.jsp文件,你会发现session1.jsp和session.jsp文件的积分值是一模一样的。重新开一个浏览器,注意不用浏览器菜单功能,而是直接从桌面双击一个IE浏览器,而两个浏览器分别运行session.jsp,session1.jsp文件,刷新多次后,你会发现两个浏览器的积分值不一样了,为什么呢?很简单,因为重新打开一个浏览器就相当于重新开一个session。session不同,积分值当然也不同了。

    <application范围的演示>

    application.jsp

    ?<%@ page contentType="text/html";charset=gb2312"%>
    <html>
    <head>
    <title>application范围积分程序演示</title>
    </head>
    <!--初始化JavaBean并生成一个scope的实例-->
    <jsp:useBean id="jinqiao" scope="application" class="com.scope"/>
    <body>
    session范围积分程序演示<br>
    <center>您当前的积分为<%//调用scope中的TestNumber方法得到当前积分
    out.println(jinqiao.TestNumber());%>
    </center>
    </body>
    </html>

      好了,启动web服务器,然后运行这个程序,使用浏览器并点击刷新按钮,看屏幕的变化,你会发现结果是变化的,和前面的session几乎一样,开始时,你当前的积分为20,然后就是30、40.。。,这就说明了TestNubmer()方法被执行了多次,但是它和session有什么不同呢?
      为了解决这个问题,可以将上面的application.jsp文件完整的拷贝一份生成application.jsp文件,重新开一个浏览器,注意不用浏览器的菜单功能,而是直接从桌面双击一个IE浏览器,两个浏览器分别运行application.jsp和application1.jsp文件中,刷新多  次后,你会发现两个浏览器的积分值完全一样,这就是application的区别了,很简单因为重新打开一个浏览器只是重新开了一个session,application是针对于整个服务器应用程序而言的,应用程序没有关闭,jinqiao对象是全局的,所以积分值当然一样了,只有将web服务器重新启动后,才会重新生成一个jinqiao对象,积分值才会重新计算。

    [三、总结]
      本文重点阐述了JSP中的JavaBean的生命周期(scope)问题,到这里,通过前面的例子演示相信大家对于JavaBean的生成周
      期概念已经比较熟悉了,只要再经过一段时间的实际应用,相信大家对于JSP中使用JavaBean都得心应手。

    版权所有:金桥教育 网址:森林狼vs国王04年视频 www.zborg.net 咨询QQ:498912824
    学校地址:长春市同志街桂林路中岚写字楼8楼(桂林路恒客隆同楼右侧) 咨询电话:0431-85679386 85650781
    乘车路线:乘362 62路车<桂林路>站 下车
    短信:发送“java”到916068
  • 青海“天然林管护+生态扶贫” 5517万亩天然林得到保护 2019-08-17
  • 消除“毒跑道”,关键在标准 2019-08-17
  • 朝韩首脑共同检阅韩国三军仪仗队 2019-08-12
  • 新时代建筑的审美需要 2019-08-11
  • 贸易战,只能是双输。我们是众志成城,美国却不一定。 2019-08-11
  • 扎进深山扶贫 暖了百姓心——省个私企业党委直属企业党组织“精准扶贫丰宁行”活动侧记 2019-08-10
  • 5月份61城房价环比反弹 多地调控政策或再加码 ——凤凰网房产济南 2019-08-06
  • 时隔12载杀回决赛圈 “沙漠之狐”力争不做背景帝 2019-08-06
  • 证监会通报4宗新三板案件 数量接近2017年全年水平 2019-08-05
  • 滴滴计划恢复部分夜间时段订单  2019-07-29
  • 南非发布限量版消防主题邮票 2019-07-29
  • 北京师范大学心理学部许燕教授作“领导干部心理调适”专题报告 2019-07-25
  • 高考评卷在三所高校进行 确保高质高效完成评卷任务 2019-07-25
  • 「社会人」小猪佩奇过气了,但年轻人还爱着它 2019-07-24
  • 粽情粽意 传承文明———我们的节日2018端午节 2019-07-24
  • 快三大小规律破解图 北京时时官方网站 北京赛pk10盛世直播 甘肃11选五技巧 北京现场赛车开奖网站 360彩票新时时彩 手机棋牌辅助 福建时时11选五技巧 辽宁风采35走势图 云南彩票开奖查询 有北京时时官方吗 皇冠体育app 老时时号码结果 大地彩票系统 上海今时时乐开奖走势图 pk10开奖网