JavaBean
概念:用纯java代码编写的pojo程序,mvc设计模式的model层
种类:
数据bean:表单bean;结果bean;
表单bean:完成对表单数据的封装
语法要求:属性的名字、个数、类型与表单里参数的名字、个数、类型一致;
结果bean:在hibernate中又叫实体类,封装外部信息,主要封装数据库对应的记录;
语法要求:属性的名字、个数、类型与记录中字段的名字、个数、类型一致;
逻辑bean:业务bean,持久bean
业务bean:封装对业务的操作,完成对请求的操作
持久bean:封装对外部数据(数据库,文件)的操作
优点:
1 易于开发维护
框架自动收集表单结果数据
实现逻辑的封装,事物处理和显示互不干扰
2 提高代码的可复用性
对于通用的事务处理逻辑,数据库操作等都可以封装在JavaBean中,
通过调用JavaBean的属性和方法可快速进行程序设计
3 支持分布式操作
支持同样的代码在不同的程序上
同样的程序,不同的代码分布在不同的服务器上
效率特别高,可以灾难救援
表单bean(收集表单数据)
语法:
1 包声明
2 表单bean主类名和文件名相同(不能出现主方法)
3 属性(私有的)的名字个数和类型要和表单里的参数名字个数和类型一致
4 对外提供public 的get()set()方法
5 显示提供无参的构造方法(标签和框架需要调用无参构造方法来生成bean对象)
部署
² 默认路径在WEB-INF/classes/以包对应的目录结构下(classes需要自己手动创建);
² 存放方式:
® 手动创建文件夹,太麻烦,不推荐;
® 打包编译 javac -d . SimpleBean.java;
命名规范
包命名:全部字母小写:cn.mldn.lxh
类命名:每个单词的首字母大写:SimpleBean
属性名称:第一个单词的首字母小写,之后每个单词的首字母大写:studentName ;
方法命名:与属性命名相同:public void sayHello() ;
常量命名:final类型的常量一般都要大写,接口里的变量都是常量,但却没有大写;
表单Bean的优化
用标签来代替原生Java程序
标签就相当与一行或多行java程序;
实例
<%@page contentType="text/html;charset=gb2312"%>
<jsp:useBean id="zs" scope="page" class="cn.mldn.lxh.SimpleBean"/>
<%
zs.setName("tom") ;
zs.setPassword("123456") ;
%>
<h1>姓名:<%=zs.getName()%></h1>
<h1>密码:<%=zs.getPassword()%></h1>
标签创建对象,导包
<jsp:useBean id="zs" scope="page" class="cn.mldn.lxh.SimpleBean"/>
含义:
先看当前页面的page内置对象里是否有属性名为zs的属性值,没有就创建一个SimpleBean对象:
先找到class属性,从WEB-INF下通过路径的全称找到SimpleBean的字节码文件;
然后会tomcat会自动调用无参的构造方法创建出SimpleBean对象;
把SimpleBean对象以属性名为zs的形式,设到page内置对象里;
再从page内置对象里取出属性名为zs的属性值,赋给变量名为zs的变量;
属性名:
id:既是page内置对象存放SimpleBean对象的属性名,又是存放SimpleBean对象地址的变量名;
scope:存放SimpleBean的内置对象,如果省略默认是page内置对象;
class:指定SimpleBean类的位置;
等价的java代码:
if(page.getAttrribute("zs")==null){
page.setAttribute("zs",new SimpleBean());
}
SimpleBean zs = (SimpleBean)page.getAttribute("zs");
标签收集数据
<jsp:setProperty name="zs" property="*"/>
含义
把表单里的所有参数收集到表单Bean(前提是表单里的名字、个数、类型要和表单Bean里属性的名字、个数、类型一致)
到page里取得属性名为zs的属性值,SimpleBean对象;
给SimpleBean对象所有的属性设值,数据来源表单中的同名参数;
property="*":给zs所指Simplebean对象的所有属性设置,这些值来自表单当中的同名参数;
属性设置可以一次解决,属性的获取必须一个个取;
el表达式输出:不能设值只能输出;
${zs.name};
到scope里找到属性zs的属性值SimpleBean对象,调用他的getName方法;
setProperty有自动转换的功能,但表单里参数的类型,必须和表单Bean里的对应属性的类型一致才能转换,否则就会出现NumberFormatException;
若表单里的参数比表单bean里的属性少,就只给表单bean里有确定参数值的属性设值,没有参数值的属性保持原值;