J2EE基础之JavaBean

1、什么是JavaBean?

JavaBean本质上来说就是一个Java类,它通过封装属性和方法成为具有独立功能、可重复使用的,并可以与其他控件通信的组件对象。通过在JavaBean中封装事务逻辑和数据库操作等,然后将JavaBean和JSP语言元素一起使用,可以很好地实现后台业务逻辑的分离,使得JSP页面更加易于维护。

标准的JavaBean类必须满足以下3个条件:

(1)该Java类必须包含没有任何参数的构造函数。例如,一个Student类,则这个类必须包含public Student()这个不带参数的构造函数。

(2)该类需要实现java.io.Serializable接口。实现了Serializable接口的对象可以转换为字节序列,这些字节序列可以完全存储以备重新生成原来的对象。

(3)该类必须要有属性接口。也就是说,每个属性都要有get和set的属性操作方法。例如描述一个学生的类Student,其中有属性名Name,那么这个类中必须同时包含getName()和setName()这两个方法。

 

2、JSP中与JavaBean的相关标签

在JSP中有3个与使用JavaBean操作相关的标准标签:<jsp:userBean>、<jsp:getProperty>和<jsp:setProperty>,可以使用它们设置或者读取JavaBean的属性。

(1)调用JavaBean

<jsp:userBean>标签可以定义一个具有一定生存范围,以及一个唯一ID的JavaBean实现。这样JSP就可以通过这个ID来识别JavaBean,也可以通过id.method类似的语句来操作JavaBean。常用的格式如下:

<jsp:userBean id=”name” class=”包名.classname”  scope=”page|request|application”>

其中,id属性是强制性属性,用来唯一标记一个JavaBean。calss属性用来说明JavaBean的类型。例如,要声明一个类型为Student,id为stud1且作用域为本页面的bean,代码如下:

<jsp:userBean id=”stud1” class=”liu.Student” scope=”page”>

如果指定的id和scope的JavaBean不存在,则将使用class属性指定的类创建一个新的JavaBean。

(2)访问JavaBean属性

<jsp:getProperty>标签用于返回一个已被创建的bean组件的属性值。用法如下:

<jsp:getProperty name=”beanId” property=”propertyName”>

其中,name属性对应JavaBean组件的Id值,preperty属性指明要获取的Java属性名称,这两个属性都是必须的。例如,要想得到Student组件stud1的classNo属性值,代码如下:

<jsp:getProperty name=”stud1” property=”classNo”/>

(3)设置JavaBean属性

<jsp:setProperty>标签用于设定一个已被创建的bean组件的属性值,用法如下:

<jsp:setProperty name=”beanId” property=”propertyName” value=”propertyValue”>

其中,name属性对应JavaBean组件的id值,property属性指明要想设定属性值得属性名,value属性为设定的属性值,这个值既可以是字符串也可以是表达式。如果是一个字符串,那么它就会被转换为Bean属性的类型。如果是一个表达式,那么它的类型就将要和设定属性值的类型一致。例如,利用setProperty设定Student组件stud1的classNo属性,代码如下:

<jsp:setProperty name=”stud1” property=”classNo” vlaue=”20160001”>

 

3、JavaBean生命周期

每个JavaBean都有一个生命周期,Bean只有在它定义的生命周期范围(作用域)里才能使用,在它的生命周期范围外将无法访问到它。JSP为它设定的生命周期范围有page、request、session和application。可以在<jsp:userBean>标签中利用Scope属性来声明JavaBean的生命周期范围。具体说明如下:

(1)page范围

设置Scope属性为page的Bean生命周期是最短的,也是JavaBean的默认值。作用范围为:当一个网页由JSP程序产生并传递到客户端后,属于page范围的Bean也将被清除,生命周期结束。使用page作为Bean的生命周期的格式如下:
      <jsp:userBean id=”Bean_name” scope=”page” class=”包名.className”/>

在JSP页面中可以无限次修改page范围的Bean的属性值,但是,当页面关闭时,所有的变动都会丢失,而恢复到最初状态。

(2)request范围

生命周期范围为request的Bean与request对象的生命周期相同。当在JSP页面中使用<jsp:forward>操作指令转向另一个JSP程序,或者使用<jsp:include>指令导入另外的JSP页面时,第一个JSP页面会把request对象传递到下一个JSP页面。属于request作用域的JavaBean组件也将伴随着request对象送出,被第二个JSP页面接收。

JSP内置对象request存取其他对象的方法是setAttribute()和getAttribute()。如果一个JavaBean对象被设置为request范围时,JSP引擎会把<jsp:useBean>标签中的ID属性值当作索引值,通过setAttribute()方法将新产生的JavaBean对象放置在request对象中,当下一个JSP程序通过forward取得前面传来的request()对象时,就可以通过getAttribute()方法和索引值获取这个Bean对象。

(3)session范围

作用域为session的Bean与session对象的生命周期相同,且Bean在创建它们的会话中始终可以被引用。

(4)application范围

作用域为appllication的Bean的生命周期是最长的。当application范围的JavaBean被实例化后,除非是特意将它删除,否则application范围等我生命周期可以说是和JSP相当。当某个JavaBean属于application范围时,所在同一个JSP引擎下的JSP程序都可以共享这个JavaBean。

 

4、一个有关JavaBean生命周期的应用实例

(1)在MyEclipse中新建一个 Web Project,命名为MyJavaBean

(2)在MyJavaBean项目中新建一个JavaBean类,类名为Student,包名为liu,具体代码如下:

package liu;

public class Student {
private String classNo;
private String Name;
private int age;
private String gender;
private String major; public Student(){ } public String getClassNo() {
return classNo;
} public void setClassNo(String classNo) {
this.classNo = classNo;
} public String getName() {
return Name;
} public void setName(String name) {
Name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getGender() {
return gender;
} public void setGender(String gender) {
this.gender = gender;
} public String getMajor() {
return major;
} public void setMajor(String major) {
this.major = major;
} }

(3)修改index.jsp中代码,具体代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>JavaBean生命周期示例</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head> <body>
<jsp:useBean id="stud1" scope="request" class="liu.Student"/>
<jsp:setProperty name="stud1" property="classNo" value="2016"/>
<jsp:setProperty name="stud1" property="name" value="liu"/>
<jsp:setProperty name="stud1" property="gender" value="Male"/>
<jsp:setProperty name="stud1" property="age" value="20"/>
<jsp:setProperty name="stud1" property="major" value="DataBase"/><br>
你的学号是:
<jsp:getProperty name="stud1" property="classNo"/><br>
<jsp:include page="detail.jsp"/>
</body>
</html>

(4)在MyJavaBean项目中新建一个JSP文件,命名为detail,具体代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'detail.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body>
<jsp:useBean id="stud1" scope="request" class="liu.Student"/>
你的详细信息如下:<br>
Name:<jsp:getProperty name="stud1" property="name"/><br>
Name:<jsp:getProperty name="stud1" property="gender"/><br>
Name:<jsp:getProperty name="stud1" property="age"/><br>
Name:<jsp:getProperty name="stud1" property="major"/><br>
</body>
</html>

(5)打开Tomcat,给MyJavaBean项目配置Tomcat后,打开浏览器输入:http://localhost:8080/MyJavaBean,即可看到如下图结果:

图一:未修改index.jsp运行结果

然后,修改index.jsp文件中相应value值,然后刷新浏览器中打开的页面,即可看到如下结果:

图二:修改index.jsp文件中value值代码后的运行结果

J2EE基础之JavaBean的更多相关文章

  1. J2EE基础总结(1)——J2EE入门

    J2EE诞生的背景 在传统的开发模式(单层应用结构)下.应用普遍存在下面致命缺点: - 数据.页面和业务逻辑在一个逻辑层次中.功能紧密耦合. - 代码重用性极低,可维护性差. - 应用耦合度高,全然没 ...

  2. J2EE基础之JSP

    J2EE基础之JSP 1.JSP简介 JSP是JavaServer的缩写,是由Sun Microsystems公司倡导.许多公司参与一起建立的一种动态网页技术标准.在HTML文件中加入Java程序代码 ...

  3. 剑指Offer——知识点储备-J2EE基础

    剑指Offer--知识点储备-J2EE基础 9.2 jdk 1.8的新特性(核心是Lambda 表达式) 参考链接:http://www.bubuko.com/infodetail-690646.ht ...

  4. J2EE基础之Web服务简介

    J2EE基础之Web服务简介 1.什么是Web服务? 在人们的日常生活中,经常会查询网页上某城市的天气信息,这些信息都是动态的.实时的,它是专业的气象站提供的一种服务.例如,在网上购物时,通常采用网上 ...

  5. J2EE基础之EJB

    J2EE基础之EJB 1.什么是EJB?       EJB(Enterprise Java Beans),是JavaEE中的商业应用组件技术,是JavaEE三大组件(Servlet,JSP,EJB) ...

  6. J2EE基础之Servlet

    J2EE基础之Servlet 1.  什么是Servlet? Servlet即Java服务小程序,是使用应用程序设计接口以及相关类和方法的Java程序.它可以作为一种插件,像Applet程序一样嵌入到 ...

  7. 黑马程序员:Java基础总结----JavaBean 内省

    黑马程序员:Java基础总结 JavaBean 内省   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! JavaBean  内省 软件包 java.beans 包含与开 ...

  8. J2EE基础篇——十三个规范

    背景: 1.企业级应用框架的需求,在很多企业级应用中.比如数据库连接.邮件服务.事务处理等都是一些通用企业需求模块,这些模块假设每次在开发中都由开发者来完毕的话,将会造成开发周期长和代码可靠性差等问题 ...

  9. J2EE 基础知识积累

    1. 面向对象的思维: 1. 有哪些类 那些对象      2. 这些类中,每种类应该具有某种属性和方法      3. 考虑类与类之间应该具有什么样的关系 3. 1. 成员变量可以使用java语言中 ...

随机推荐

  1. C#开发微信门户及应用(45)--微信扫码登录

    在前面随笔<C#开发微信门户及应用(41)--基于微信开放平台的扫码登录处理>介绍了基于微信开放平台接口实现的微信扫码直接登录的过程.本篇介绍对扫码登录的一些改进和处理,以便更方便应用在实 ...

  2. 异步编程系列06章 以Task为基础的异步模式(TAP)

    p { display: block; margin: 3px 0 0 0; } --> 写在前面 在学异步,有位园友推荐了<async in C#5.0>,没找到中文版,恰巧也想提 ...

  3. Mule入门基础

    Mule入门文档 零.前提 在按照本文进行操作之前,假设您的系统已经具备以下前提: 已经安装了Sun公司的JDK1.4或JDK5.0版本,推荐使用JDK5.0. 正确设置了JAVA_HOME环境变量到 ...

  4. Integer 与int 的区别

    int 是java 提供的8 种原始数据类型之一.Java 为每个原始类型提供了封装类,Integer 是java 为int 提供的封装类.int 的默认值为0,而Integer 的默认值为null, ...

  5. What does "size" in int(size) of MySQL mean?

    What does "size" in int(size) of MySQL mean? https://alexander.kirk.at/2007/08/24/what-doe ...

  6. 排列组和在c语言中的应用

    排列组和在c中很常见,但是这个排列组和是通过循环来实现的,和数学中的还是有一点区别的,而且c中的方法也不尽相同,而且我遇到c中的数学问题总会纠结于数学上是怎么实现的但是我自己又不会,所以就没了兴趣,例 ...

  7. 从零开始学Python08作业源码:开发简单的FTP(仅供参考)

    服务器端:server_server.py #!usr/bin/env python # -*- coding:utf-8 -*- # auther:Mr.chen # 描述: import sock ...

  8. 【夯实PHP基础系列】JQuery easyUI的使用

    最近在做一个公司的后台项目中,接触到 JQuery easyUI前端框架,被她简洁的代码和简单有效的ajax交互所深深吸引. 体会有以下3个方面: 1)快速创建表格的能力: 后端程序,比如PHP只需要 ...

  9. 19、ASP.NET MVC入门到精通——Unity

    一.IOC介绍 IOC(Inversion of Control),中文译为控制反转,又称为“依赖注入”(DI =Dependence Injection) IOC的基本概念是:不创建对象,但是描述创 ...

  10. An entity object cannot be referenced by multiple instances of IEntityChangeTracker 的解决方案

    使用EF对建立了关系的表新增记录时出现: An entity object cannot be referenced by multiple instances of IEntityChangeTra ...