目录
一、JavaBean是什么
二、创建JavaBean
三、在JSP中使用JavaBean
1、按照Java语法直接使用
2、<jsp:useBean>动作
Bean的加载原理
scope属性的不同取值
3、<jsp:setProperty>动作
设置为一个表达式的值或字符序列
通过表单的参数的值来设置Bean的相应属性的值
4、<jsp:getProperty>动作
四、例子
举例一编辑
登陆系统
求三角形的面积
注册系统
一、JavaBean是什么
JavaBean实质上是一个Java的类,但它又有自己独特的地方,通常一个标准的JavaBean应遵循如下规范:
- 实现java.io.Serializable接口(JSP中使用可以不要)
- 必须存在一个public、无参的构造方法
- 成员变量private、成员方法public、类public
- 获取属性值getXxx()、修改属性值setXxx、isXxx()
这个类的对象称为一个JavaBean,简称Bean
二、创建JavaBean
三、在JSP中使用JavaBean
1、按照Java语法直接使用
运行结果:
2、<jsp:useBean>动作
使用JSP动作标记useBean加载使用bean:(实例化一个JavaBean对象)
<jsp:useBean id="bean的名字" class="创建bean的类" scope="bean有效范围"/>
//或
<jsp:useBean id="bean的名字" class="创建bean的类" scope= "bean有效范围"></jsp:useBean>
//例如:
<jsp:useBean id="circle" class="tom.jiafei.Circle" scope="page" />
Bean的加载原理
Tomcat服务器首先在Tomcat服务器管理的pageContent内置对象中查找是否含有这样的Bean。如果这样的Bean存在,Tomcat服务器就分配这样的Bean给用户;如果在pageContent中没有查找到JSP动作标记要求的Bean,就根据class指定的类创建一个Bean,并将所创建的Bean添加到pageContent中。
通过Tomcat服务器创建Bean的过程可以看出,首次创建一个新的Bean需要用相应类的字节码文件创建对象,当某些JSP页面再需要同样的Bean时,Tomcat服务器直接将pageContent中已经有的Bean分配给JSP页面,提高了JSP使用Bean的效率。
若修改了字节码文件,则需要重启Tomcat服务器才能使用新的字节码文件
scope属性的不同取值
作用范围 | 含义 |
page | 只能在用户访问的当前的页面使用(包括通过include指令静态包含的页面有效); 不同用户的page bean互不相同,互相独立 |
request | 可以在处理同一个请求的任意一个页面中使用,直到该页面执行完毕向客户端发出响应或产生新的请求为止 不同用户的request bean互不相同,互相独立 |
session | 可以在同一次会话的任意一个页面中使用,直到会话结束; 不同用户的session bean互不相同,互相独立; 如果用户访问Web服务目录多个页面,那么每个页面id相同的session bean是同一个bean |
application | 有效范围是当前Web服务目录下的各个页面,存活时间直到服务器重新启动; Tomcat服务器为访问Web服务目录的所有用户分配一个共享的bean; 任何一个用户对自己application bean的属性的改变,都会影响到其他的用户(不同Web服务目录的application bean互不相同) |
举例:
3、<jsp:setProperty>动作
用于设置和访问Bean的属性
-
设置为一个表达式的值或字符序列
<jsp:setProperty name="bean的id " property="bean的属性"value= "<%=expression%>"/>
//value给出的值的类型要和bean的属性的类型一致
<jsp:setProperty name="bean的id " property="bean的属性" value= "字符序列" />
-
通过表单的参数的值来设置Bean的相应属性的值
//1、用表单的所有参数的值设置bean相对应的属性值
//要求Bean属性名必须在表单中有名称相同的参数名字相呼应
//Tomcat服务器会自动将参数的字符串值转换为Bean的相对应的属性的值
<jsp:setProperty name= "bean的id的名字" property="*" />
//2、用表单的某个参数的值设置bean的某个属性值
<jsp:setProperty name= "bean的名字" property="属性名" param= "参数名" />
4、<jsp:getProperty>动作
获取Bean的属性值,并将这个值以串的形式发送给用户的浏览器
<jsp:getProperty name="bean的id " property="bean的属性" />
<jsp:getProperty name="bean的id " property="bean的属性"></jsp:getProperty>
当JSP页面使用getProperty标记获取属性xxx的值时,必须保证bean有相应的getXxx方法,即对方法的名字的命名有特殊的要求
让request调用setCharacterEncoding方法设置编码为utf-8,以避免显示bean的属性值出现乱码现象
四、例子
举例一
登陆系统
求三角形的面积
package javabean.data;public class Triangle {private double a,b,c,s;private boolean ok;public boolean isOk() {if(a+b>c && a+c>b && b+c>a){ok=true;}return ok;}public double getS() {if(ok){double p=(a+b+c)/2;s=Math.sqrt(p*(p-a)*(p-b)*(p-c));}return s;}public double getA() {return a;}public void setA(double a) {this.a = a;}public double getB() {return b;}public void setB(double b) {this.b = b;}public double getC() {return c;}public void setC(double c) {this.c = c;}}
注册系统
package javabean.data;public class UserRegisterBean {private String name,sex,adress;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getAdress() {return adress;}public void setAdress(String adress) {this.adress = adress;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}