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. 网页中多个图标在一张图片上,使用css将各图标显示

    现在的网页中显示很多图标算是常态,发现项目中页面上用到的图标都是单个图标单个文件,用的时候直接往页面上挂,这确实很常态. 如果,网站是挂在外网上,或者网速过低,又大量使用图标的情况下,由于浏览器和服务 ...

  2. 渡轮问题Ship

    题目描述 Palmia河从东往西流过Palmia国,把整个国家分成南北两半.河的两岸各有N个城市,北岸的每一个城市都与南岸的一个城市互为友好城市,而且任意两个北岸城市的友好城市都不相同.每一对友好城市 ...

  3. JavaScript一词被《牛津大词典》收录了

    早上看VS Team的推特发了这个图片,以前总爱问Java怎么读,现在好了,有标准发音了. 确定是 扎瓦·死磕瑞普特 ,哈哈,以后不要再念加瓦了. …… Last month JavaScript r ...

  4. POJ 2115 C Looooops扩展欧几里得

    题意不难理解,看了后就能得出下列式子: (A+C*x-B)mod(2^k)=0 即(C*x)mod(2^k)=(B-A)mod(2^k) 利用模线性方程(线性同余方程)即可求解 模板直达车 #incl ...

  5. wParam和lParam两个参数到底是什么意思?

    在Windows的消息函数中,有两个非常熟悉的参数:wParam,lParam. 这两个参数的字面意义对于现在的程序来说已经不重要了,因为它是16位系统的产物,为了保持程序的可移植性,就将它保存了下来 ...

  6. 实用SQL语句大全

    一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...

  7. 字符编码笔记:ASCII,Unicode和UTF-8

    很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的,于是他们把这称为"字节". 再后来,他们又做了一些可以处理 ...

  8. WebStorage记录滚动条位置

    因关注公众号<HTML5学堂>看到这篇文章 "利用本地存储,记录滚动条的位置" ,便好奇敲来试试,然后又看了一些关于WebStorage的资料 附上这篇文章的地址 ht ...

  9. H5学习

    1.html{font-size:62.5%;}//不用font-size:10px的原因:(因为设了62.5%后就有1rem = 10px,便于用rem来指定元素的尺寸,这样响应式的时候可以直接改变 ...

  10. SharePoint 2013 工作流平台的选项不可用

    问题描述 当我想创建一个SharePoint 2013 工作流的时候,打开SharePoint 2013 Designer(一下简称SPD),发现没有SharePoint 2013 工作流的选项.原来 ...