JavaBean的编写与使用
JavaBean的编写
- Sun公司对于JavaBean的定义是:JavaBean是一个可重复使用的软件部件
- JavaBean是描述Java的软件组件模型,是Java程序的一种组件结构,也是Java类的一种
- JavaBean提供给外部操作接口,而实现过程无需外部调用知道
- 应用JavaBean的主要目的是实现代码重用,便于维护和管理。在Java开发模型中,通过JavaBean可以无限扩充Java程序的功能,通过JavaBean的组合可以快速地生成新的应用程序
- JavaBean传统的应用是在可视化领域,自从JSP诞生后,JavaBean更多的应用在了非可视化领域
- 非可视化的JavaBean,也就是没有GUI的JavaBean,在JSP程序中常用来封装事物逻辑,数据库操作等,可以很好地实现业务逻辑和前台程序(如JSP文件)的分离,使系统具有更好的健壮性和灵活性
- JavaBean实质上是一个Java类,但是有它独有的特点:
- JavaBean是公共的类
- 构造函数没有输入参数
- 属性必须声明为private,方法必须声明为public
- 用一组set方法设置内部属性
- 用一组get方法获取内部属性
- JavaBean是一个没有主方法的类(但可以编写main方法进行JavaBean功能的测试),一般的Java类默认继承Object类,而Bean不需要这种继承
- BeanDemo1.java
package javaBean; public class BeanDemo1 { private String name = null; private String pass = null; public BeanDemo1() { } public void setName(String value) { this.name = value; } public void setPass(String value) { this.pass = value; } public String getName() { return name; } public String getPass() { return pass; } }
- 语法说明:
- BeanDemo1.class是一个很典型的JavaBean,其中name和pass是该JavaBean的两个属性,外部可以通过get,set方法对这些属性进行操作
JavaBean的使用
- 在改进的JSP开发模式中,采用的就是JavaBean+JSP的模式
- JavaBean和JSP技术的结合不仅可以实现表现层和商业逻辑层的分离,还可以提高JSP程序的运行效率和代码重用的程度,并且可以实现并行开发,是JSP编程总常用的技术
- JSP中提供了以下动作元素来实现对JavaBean的操作
- < jsp:useBean>
- < jsp:setProperty>
- < jsp:getProperty>
1.< jsp:useBean>操作
- < jsp:useBean>可以定义一个具有一定生存范围以及一个唯一id的JavaBean的实例,JSP页面通过指定id来识别JavaBean,也可以通过id.method语句来调用JavaBean中的方法
- 在执行过程中,< jsp:useBean>首先会尝试寻找已经存在的具有相同id和scope值的JavaBean实例,如果没有就会自动创建一个新的实例
- 基本语法:
<jsp:useBean id="beanName" scope="page|request|session|application" >class="packageName.className"/>
- < jsp:useBean>标签的基本属性
属性名 功能 id javaBean对象的唯一标识,代表了一个JavaBean对象的实例。它具有特定的存在范围(page scope 代表了JavaBean对象的生存空间,可以是page,request,session,application中的一种,默认为page class 代表了JavaBean对象的class名字,需要特别注意的是大小写要完全一致 2.< jsp:setProperty>操作
- 基本语法:
<jsp:setProperty name="beanName" last_syntax/>
- < jsp:useBean>标签的基本属性
属性名 功能 name javaBean对象的唯一标识,代表了一个JavaBean对象的实例。它具有特定的存在范围(page property 代表了JavaBean对象的生存空间,可以是page,request,session,application中的一种,默认为page param 代表了JavaBean对象的class名字,需要特别注意的是大小写要完全一致 value 代表了赋给JavaBean的属性property的具体值 - 语法说明:
- 使用< jsp:setProperty>标签可以设置JavaBean的属性值
- name属性代表了已经存在的并且具有一定生存范围(scope)的JavaBean实例
- last_syntax代表的语法如下:
- property="*"
- property=“propertyName”
- property=“propertyName” param=“parameterName”
- property=“propertyName” value=“propertyValue”
3.< jsp:getProperty>操作
- 基本语法:
<jsp:getProperty name="beanName" property="propertyName"/>
- < jsp:useBean>标签的基本属性
属性名 功能 name 代表了想要获得属性值的JavaBean的实例,JavaBean实例必须在前面用< jsp:useBean>定义 property 代表了想要获得值的那个property的名字 - 语法说明:
- 使用< jsp:getProperty>可以得到JavaBean实例的属性值,并将其转换为java.lang.String,最后放置在隐含的Out对象中
- JavaBean实例必须在< jsp:getProperty>前面定义
1.JSP文件中调用javaBean
- BeanDemo1.java
package javaBean; public class BeanDemo1 { private String name = null; private String pass = null; public BeanDemo1() { } public void setName(String value) { this.name = value; } public void setPass(String value) { this.pass = value; } public String getName() { return name; } public String getPass() { return pass; } }
- BeanDemo1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>第一个JavaBean实例</title> </head> <body> <jsp:useBean id="first" class="javaBean.BeanDemo1"></jsp:useBean> <% first.setName("wangxiaoyang"); first.setPass("008"); %> <h3>调用getProperty获得的值为:</h3> 用户名: <jsp:getProperty name="first" property="name"/> 密码: <jsp:getProperty name="first" property="pass" /> <jsp:setProperty property="name" name="first" value="liusheng"/> <jsp:setProperty property="pass" name="first" value="888"/> <h3>应用setProperty后调用getProperty获得的值为:</h3> 用户名:<%=first.getName() %> 密码:<%=first.getPass() %> </body> </html>
2.JavaBean与HTML表单的交互
- Login.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登录页面</title> <script type="text/javascript"> function check(){ if(Login.name.value==""){ alert("请输入用户名!"); Login.name.focus(); return false; } if(Login.pass.value==""){ alert("请输入密码!"); Login.pass.focus(); return false; } } </script> </head> <body> <form action="LoginBean.jsp" name="Login" method="post" onsubmit="return check()"> <table border="1" align="center" bgcolor="#229988"> <tr><th colspan="2">用户登录</th></tr> <tr bgcolor="#993344"> <td>用户名:</td> <td><input type="text" name="name"></td> </tr> <tr> <td bgcolor="#993344">密码:</td> <td><input type="password" name="pass"></td> </tr> <tr> <td> </td> <td> <input type="submit" name="submit" value="提交"> <input type="reset" name="reset" value="重置"> </td> </tr> </table> </form> </body> </html>
- LoginBean.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>用户登录</title> </head> <body> <jsp:useBean id="Login" class="javaBean.LoginBean"></jsp:useBean> <jsp:setProperty property="*" name="Login"/> <% int Result = Login.check(); if(Result==1){ %> <h3>欢迎<%=Login.getName()%>进入电子商城</h3> <% } if(Result==0){ %> <h3>登录失败!点击<a href="javascript:history.back(-1)">这里</a>重新登录!</h3> <% } %> </body> </html>
- LoginBean.java
package javaBean; public class BeanDemo1 { private String name = null; private String pass = null; public BeanDemo1() { } public void setName(String value) { this.name = value; } public void setPass(String value) { this.pass = value; } public String getName() { return name; } public String getPass() { return pass; } public int check() { if(name.equals("liusheng")&&pass.equals("888")) { return 1; }else { return 0; } } }