JavaBean
2015-09-01 00:24
645 查看
JavaBean是为了减少JSP中嵌套的Java语言而按一定规则编写的Java类,其目的是为了实现HTML与Java的分离,该类封装了数据和一些经常重复使用的方法。其规则如下:
JavaBean是一个public类;
JavaBean必须有一个不带参数的构造方法;
属性必须私有化;
JavaBean中的私有属性,必须通过public类型的方法供其他程序使用,可以通过访问器和更改器进行操作,格式必须为setXXX()或getXXX(),且属性名第一个字母要大写;
以上要求的格式,是为了通过使用反射技术来实例化JavaBean对象,从而获知JavaBean的属性,进而调用其操作属性的方法来保存数据。
为了在JSP中使用JavaBean对象,JSP提供了三个动作标签,如下
<jsp:useBean>
在使用该标签时,在指定的域内查找或实例化一个对象,若此实例存在则直接返回该实例的引用,否则在指定的域内实例化一个制定的对象;域默认为page,在该page内可以看做为已有对象。具体原理如下:
JSP源码:
<jsp:useBeanid="person" class="domain.Person"scope="page"></jsp:useBean>对应的servlet源码:
domain.Personperson = null;
synchronized(_jspx_page_context)
{
person = (domain.Person)_jspx_page_context.getAttribute("person", PageContext.PAGE_SCOPE);
if (person== null)
{
person =new domain.Person();
_jspx_page_context.setAttribute("person",person,PageContext.PAGE_SCOPE);
}
}
☞useBean标签体内可以嵌套HTML元素,但嵌套的HTML元素只在userBean实例化对象时,才会有效。所以根据实例对象的域不同,HTML元素的有效范围不同。如下:
<body>
<jsp:useBean
id="person1"class="domain.Person"
scope="page">
用户:<input
type="text"><br>
密码:<input
type="password"><br>
</jsp:useBean>
<jsp:useBean
id="person2"class="domain.Person"
scope="session">
用户:<input
type="text"><br>
密码:<input
type="password"><br>
</jsp:useBean>
</body>
<jsp:setProperty>
<body>
<jsp:useBean
id="person"class="domain.Person"
scope="page"></jsp:useBean>
<jsp:setProperty
name="person"
property="name"value="sunshuolei"/>
<%=person.getName()%><br>
<jsp:getProperty
name="person"
property="name"/>
</body>
其实<jsp:getProperty
name="person"
property="name"/>与<%=person.getName()%>是等价的,由此可以看出<jsp:getProperty>获得的结果就是一个字符串。
<jsp:getProperty>
如果一个JavaBean实例对象的某一个属性的值为null,那么使用<jsp:getProperty>标签输出该属性的结果将是一个内容为null的字符串。
总结
JavaBean一般情况下更多的是封装数据和其他业务逻辑方法。
JavaBean是一个public类;
JavaBean必须有一个不带参数的构造方法;
属性必须私有化;
JavaBean中的私有属性,必须通过public类型的方法供其他程序使用,可以通过访问器和更改器进行操作,格式必须为setXXX()或getXXX(),且属性名第一个字母要大写;
以上要求的格式,是为了通过使用反射技术来实例化JavaBean对象,从而获知JavaBean的属性,进而调用其操作属性的方法来保存数据。
为了在JSP中使用JavaBean对象,JSP提供了三个动作标签,如下
标签 | 格式 | 描述 |
<jsp:useBean> | <jsp:useBean id=”xxx” class=”packet.classname” scope=”page|request|session|application”/> | 根据id值来JSP页面中查找或实例化一个JavaBean对象,id值就是实例对象的实例名 |
<jsp:setProperty> | <jsp:setProperty name=”xxx” property=”yyy” value=”zzz”/> | 根据name设置属性yyy的值zzz,其实name值就是useBean的ID值,也即JavaBean实例名xxx |
<jsp:getProperty> | <jsp:getProperty name=”xxx” property=”yyy”> | 获取xxx对象属性yyy的值 |
在使用该标签时,在指定的域内查找或实例化一个对象,若此实例存在则直接返回该实例的引用,否则在指定的域内实例化一个制定的对象;域默认为page,在该page内可以看做为已有对象。具体原理如下:
JSP源码:
<jsp:useBeanid="person" class="domain.Person"scope="page"></jsp:useBean>对应的servlet源码:
domain.Personperson = null;
synchronized(_jspx_page_context)
{
person = (domain.Person)_jspx_page_context.getAttribute("person", PageContext.PAGE_SCOPE);
if (person== null)
{
person =new domain.Person();
_jspx_page_context.setAttribute("person",person,PageContext.PAGE_SCOPE);
}
}
☞useBean标签体内可以嵌套HTML元素,但嵌套的HTML元素只在userBean实例化对象时,才会有效。所以根据实例对象的域不同,HTML元素的有效范围不同。如下:
<body>
<jsp:useBean
id="person1"class="domain.Person"
scope="page">
用户:<input
type="text"><br>
密码:<input
type="password"><br>
</jsp:useBean>
<jsp:useBean
id="person2"class="domain.Person"
scope="session">
用户:<input
type="text"><br>
密码:<input
type="password"><br>
</jsp:useBean>
</body>
<jsp:setProperty>
<body>
<jsp:useBean
id="person"class="domain.Person"
scope="page"></jsp:useBean>
<jsp:setProperty
name="person"
property="name"value="sunshuolei"/>
<%=person.getName()%><br>
<jsp:getProperty
name="person"
property="name"/>
</body>
其实<jsp:getProperty
name="person"
property="name"/>与<%=person.getName()%>是等价的,由此可以看出<jsp:getProperty>获得的结果就是一个字符串。
<jsp:getProperty>
如果一个JavaBean实例对象的某一个属性的值为null,那么使用<jsp:getProperty>标签输出该属性的结果将是一个内容为null的字符串。
总结
JavaBean一般情况下更多的是封装数据和其他业务逻辑方法。
相关文章推荐
- spring常见的面试题
- SSH---Spring减少配置量将公共的配置进行抽象
- 永久空间内存不足 java.lang.OutOfMemoryError: PermGen space
- 细说java.util.HashMap
- 10个实用的但偏执的Java编程技术
- JavaSE总结程序-------书店管理系统
- java高级之类反射
- 10个实用的但偏执的Java编程技术-扣丁学堂
- Complete Guide for Spring Boot Actuator
- Java项目经验
- Complete Guide for Spring Boot Actuator
- Complete Guide for Spring Boot Actuator
- Complete Guide for Spring Boot Actuator
- 安全的Java远程Debug
- JAVA实用教程(一)
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- spring mvc中文乱码解决思路
- SpringSide4遇到的一些事
- java对象与json对象间的相互转换
- 用Java开发代理服务器