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里有确定参数值的属性设值,没有参数值的属性保持原值;

 

属性设值

<jsp:setProperty>用来设置已经实例化的Bean对象的属性

方式一

<jsp:setProperty name="zs" property="*"/>

先到scope里找到属性名为zs的属性值--SimpleBean对象,并给SimpleBean对象的所有属性设值;

方式二

<jsp:setProperty name="zs" property="name"/>

只给zs所指的SimpleBean对象的name属性设值,属性的值来自表单当中的同名参数;

其他没有设值的属性保持原值;

方式三

<jsp:setProperty name="zs" property="name" param="password"/>

从表单里取出属性名为password的属性值赋给属性name;

方式四

<jsp:setProperty name="zs" property="name" value="password"/>

直接把"password"赋给zs所指对象的属性name;

value的值必须为String类型;

 

表单Bean的传递

page内置对象

不能传递,表单bean只会保存在当前页面,页面结束,表单bean对象就被销毁,不会传递到另一个组件里;

request内置对象

服务端跳转的request内置对象不会被销毁,表单bean可以通过request内置对象传递给下一个组件;

但客户端跳转不能通过request内置对象传递,因为客户端跳转是客户端重新发送请求,request内置对象会被销毁,不能传递表单bean

session内置对象

只要用户不下线,就可以一直传递表单bean;

application内置对象

<jsp:getProperty name="cb" property="coun"/>
查找顺序:page--request--session--application,只要在前面的内置对象里找到表单bean,就不会再去后面的内置对象里查找; 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章