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操作相关的标准标签:
(1)调用JavaBean
其中,id属性是强制性属性,用来唯一标记一个JavaBean。calss属性用来说明JavaBean的类型。例如,要声明一个类型为Student,id为stud1且作用域为本页面的bean,代码如下:
如果指定的id和scope的JavaBean不存在,则将使用class属性指定的类创建一个新的JavaBean。
(2)访问JavaBean属性
其中,name属性对应JavaBean组件的Id值,preperty属性指明要获取的Java属性名称,这两个属性都是必须的。例如,要想得到Student组件stud1的classNo属性值,代码如下:
(3)设置JavaBean属性
其中,name属性对应JavaBean组件的id值,property属性指明要想设定属性值得属性名,value属性为设定的属性值,这个值既可以是字符串也可以是表达式。如果是一个字符串,那么它就会被转换为Bean属性的类型。如果是一个表达式,那么它的类型就将要和设定属性值的类型一致。例如,利用setProperty设定Student组件stud1的classNo属性,代码如下:
3、JavaBean生命周期
每个JavaBean都有一个生命周期,Bean只有在它定义的生命周期范围(作用域)里才能使用,在它的生命周期范围外将无法访问到它。JSP为它设定的生命周期范围有page、request、session和application。可以在
(1)page范围
设置Scope属性为page的Bean生命周期是最短的,也是JavaBean的默认值。作用范围为:当一个网页由JSP程序产生并传递到客户端后,属于page范围的Bean也将被清除,生命周期结束。使用page作为Bean的生命周期的格式如下:
在JSP页面中可以无限次修改page范围的Bean的属性值,但是,当页面关闭时,所有的变动都会丢失,而恢复到最初状态。
(2)request范围
生命周期范围为request的Bean与request对象的生命周期相同。当在JSP页面中使用
JSP内置对象request存取其他对象的方法是setAttribute()和getAttribute()。如果一个JavaBean对象被设置为request范围时,JSP引擎会把
(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中代码,具体代码如下:
<%&#64; page language&#61;"java" import&#61;"java.util.*" pageEncoding&#61;"UTF-8"%>
<%
String path &#61; request.getContextPath();
String basePath &#61; request.getScheme()&#43;"://"&#43;request.getServerName()&#43;":"&#43;request.getServerPort()&#43;path&#43;"/";
%>DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href&#61;"<%&#61;basePath%>"><title>JavaBean生命周期示例title><meta http-equiv&#61;"pragma" content&#61;"no-cache"><meta http-equiv&#61;"cache-control" content&#61;"no-cache"><meta http-equiv&#61;"expires" content&#61;"0"> <meta http-equiv&#61;"keywords" content&#61;"keyword1,keyword2,keyword3"><meta http-equiv&#61;"description" content&#61;"This is my page">head><body><jsp:useBean id&#61;"stud1" scope&#61;"request" class&#61;"liu.Student"/><jsp:setProperty name&#61;"stud1" property&#61;"classNo" value&#61;"2016"/><jsp:setProperty name&#61;"stud1" property&#61;"name" value&#61;"liu"/><jsp:setProperty name&#61;"stud1" property&#61;"gender" value&#61;"Male"/><jsp:setProperty name&#61;"stud1" property&#61;"age" value&#61;"20"/><jsp:setProperty name&#61;"stud1" property&#61;"major" value&#61;"DataBase"/><br>你的学号是&#xff1a;<jsp:getProperty name&#61;"stud1" property&#61;"classNo"/><br><jsp:include page&#61;"detail.jsp"/>body>
html>
&#xff08;4&#xff09;在MyJavaBean项目中新建一个JSP文件&#xff0c;命名为detail&#xff0c;具体代码如下&#xff1a;
<%&#64; page language&#61;"java" import&#61;"java.util.*" pageEncoding&#61;"UTF-8"%>
<%
String path &#61; request.getContextPath();
String basePath &#61; request.getScheme()&#43;"://"&#43;request.getServerName()&#43;":"&#43;request.getServerPort()&#43;path&#43;"/";
%>DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href&#61;"<%&#61;basePath%>"><title>My JSP &#39;detail.jsp&#39; starting pagetitle><meta http-equiv&#61;"pragma" content&#61;"no-cache"><meta http-equiv&#61;"cache-control" content&#61;"no-cache"><meta http-equiv&#61;"expires" content&#61;"0"> <meta http-equiv&#61;"keywords" content&#61;"keyword1,keyword2,keyword3"><meta http-equiv&#61;"description" content&#61;"This is my page">head><body><jsp:useBean id&#61;"stud1" scope&#61;"request" class&#61;"liu.Student"/>你的详细信息如下&#xff1a;<br>Name:<jsp:getProperty name&#61;"stud1" property&#61;"name"/><br>Name:<jsp:getProperty name&#61;"stud1" property&#61;"gender"/><br>Name:<jsp:getProperty name&#61;"stud1" property&#61;"age"/><br>Name:<jsp:getProperty name&#61;"stud1" property&#61;"major"/><br>body>
html>
&#xff08;5&#xff09;打开Tomcat&#xff0c;给MyJavaBean项目配置Tomcat后&#xff0c;打开浏览器输入&#xff1a;http://localhost:8080/MyJavaBean,即可看到如下图结果&#xff1a;
图一&#xff1a;未修改index.jsp运行结果
然后&#xff0c;修改index.jsp文件中相应value值&#xff0c;然后刷新浏览器中打开的页面&#xff0c;即可看到如下结果:
图二&#xff1a;修改index.jsp文件中value值代码后的运行结果