JavaBean基础学习总结
学习目标:
- 掌握JavaBean的基本定义格式。
- 掌握Web目录的标准结构。
- 掌握JSP中对JavaBean支持的三个标签,即<jsp:useBean>,<jsp:setProperty>,<jsp:getProperty>。
一.JavaBean的基本定义格式:
- JavaBean的优点:可将Html和java代码分离,对日后代码维护带来方便,在开发过程中将常用的程序写成JavaBean组件,当JSP使用时,只需要调用JavaBean组件来执行用户所需要的功能即可,不用重复编写代码,节省开发时间。
- 在JSP开发过程应用JavaBean的标签操作java程序是,对java程序类的要求:
1.所以的类必须声明为public class,这样才可以被外部所访问。
2.类中所有属性都必须封装,即使用private声明。
3.封装的属性必须编写setter,getter方法。
4.一个JavaBean至少有一个无参的构造方法。
如下代码:
package org.lxh.JavaBean; public class JavaBeanDemo {
private String name;//封装属性
private int age;
public JavaBeanDemo(){//无参构造方法 }
public void setName(String name){//属性修改器,setter方法
this.name=name;
}
public void setAge(int age){
this.age=age;
}
public String getName(){//属性的访问器,getter方法
return this.name;
}
public int getAge(){
return this.age;
}
}
二.web目录的标准结构图:
三.JSP中支持的三个JavaBean标签:
- <jsp:useBean>标签:用于在JSP页面中查找或实例化一个JavaBean组件。
- <jsp:setProperty>标签:用于在JSP页面中设置一个JavaBean组件的属性。
- <jsp:getProperty>标签:用于在JSP页面中获取一个JavaBean组件的属性。
3.1.<jsp:useBean>标签
<jsp:useBean>标签用于在指定的域范围内查找指定名称的JavaBean对象,如果存在则直接返回该JavaBean对象的引用,如果不存在则实例化一个新的JavaBean对象并将它以指定的名称存储到指定的域范围中。
常用语法:
<jsp:useBean id="beanName" class="package.class" scope="page|request|session|application"/>
"id"属性用于指定JavaBean实例对象的引用名称和其存储在域范围中的名称。
"class"属性用于指定JavaBean的完整类名(即必须带有包名)。
"scope"属性用于指定JavaBean实例对象所存储的域范围,其取值只能是page、request、session和application等四个值中的一个,其默认值是page。
<jsp:useBean>标签使用实例代码:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--
在jsp中使用jsp:useBean标签来实例化一个Java类的对象
<jsp:useBean id="person" class="org.lxh.JavaBean.*" scope="page"/>
<jsp:useBean>:表示在JSP中要使用JavaBean。
id:表示生成的实例化对象,凡是在标签中看见了id,则肯定表示一个实例对象。
class:此对象对应的包.类名称
scope:此javaBean的保存范围,四种范围:page、request、session、application
--%>
<jsp:useBean id="person" class="org.lxh.JavaBean.*" scope="page"/>
<%
//person对象在上面已经使用jsp:useBean标签实例化了,因此在这里可以直接使用person对象
//使用setXxx方法为对象的属性赋值
//为person对象的name属性赋值
person.setName("小小高");
//为person对象的Sex属性赋值
person.setSex("男");
//为person对象的Age属性赋值
person.setAge(21);
%>
<!DOCTYPE HTML>
<html>
<head>
<title>jsp:useBean操作实例</title>
</head> <body>
<%--使用getXxx()方法获取对象的属性值 --%>
<h2>姓名:<%=person.getName()%></h2>
<h2>性别:<%=person.getSex()%></h2>
<h2>年龄:<%=person.getAge()%></h2>
</body>
</html>
3.2、<jsp:useBean>执行原理
上面我们在index.jsp中使用<jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/>实例化了一个gacl.javabean.study.Person类的对象,那么这个peson对象是怎么实例化出来的呢?index.jsp在执行的过程中首先会翻译成一个servlet,因此我们可以通过查看index.jsp页面生成的servlet的java代码来查看peson对象的实例化过程
找到tomcat服务器下的"work\Catalina\localhost\项目名称\org\apache\jsp"这个目录,就可以看到将index.jsp页面翻译成servlet的java源码了。
使用文本编辑器打开index_jsp.java文件,在_jspService方法中可以看到person对象的创建过程。
下面我们来分析一下上述生成的代码:
gacl.javabean.study.Person person = null;
synchronized (_jspx_page_context) {
person = (gacl.javabean.study.Person) _jspx_page_context.getAttribute("person", PageContext.PAGE_SCOPE);
if (person == null){
person = new gacl.javabean.study.Person();
_jspx_page_context.setAttribute("person", person, PageContext.PAGE_SCOPE);
}
}
首先是定义一个person对象,值是null
gacl.javabean.study.Person person = null;//定义一个空的person对象
然后是使用pageContext对象的getAttribute方法获取存储在PageContext.PAGE_SCOPE域中的Person对象
person = (gacl.javabean.study.Person) _jspx_page_context.getAttribute("person", PageContext.PAGE_SCOPE);
如果在PageContext.PAGE_SCOPE域中的Person对象没有找到person对象,那么就创建一个新的person对象,然后使用pageContext对象的setAttribute方法将新创建的person存储在PageContext.PAGE_SCOPE域中
if (person == null){
person = new gacl.javabean.study.Person();
_jspx_page_context.setAttribute("person", person, PageContext.PAGE_SCOPE);
}
也就是说,在index.jsp中使用<jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/>来实例化person对象的过程实际上是执行了上述的java代码来实例化Person对象。这就是<jsp:useBean>标签的执行原理:"首先在指定的域范围内查找指定名称的JavaBean对象,如果存在则直接返回该JavaBean对象的引用,如果不存在则实例化一个新的JavaBean对象并将它以指定的名称存储到指定的域范围中。
3.3、带标签体的<jsp:useBean>标签
语法:
<jsp:useBean ...>
Body
</jsp:useBean>
功能:
Body部分的内容只在<jsp:useBean>标签创建JavaBean的实例对象时才执行。这种做法用得不多,了解一下即可
3.4、<jsp:setProperty>标签
<jsp:setProperty>标签用于设置和访问JavaBean对象的属性。
语法格式一:
<jsp:setProperty name="beanName" property="propertyName" value="string字符串"/>
语法格式二:
<jsp:setProperty name="beanName" property="propertyName" value="<%= expression %>" />
语法格式三:
<jsp:setProperty name="beanName" property="propertyName" param="parameterName"/>
语法格式四:
<jsp:setProperty name="beanName" property= "*" />
name属性用于指定JavaBean对象的名称。
property属性用于指定JavaBean实例对象的属性名。
value属性用于指定JavaBean对象的某个属性的值,value的值可以是字符串,也可以是表达式。为字符串时,该值会自动转化为JavaBean属性相应的类型,如果value的值是一个表达式,那么该表达式的计算结果必须与所要设置的JavaBean属性的类型一致。
param属性用于将JavaBean实例对象的某个属性值设置为一个请求参数值,该属性值同样会自动转换成要设置的JavaBean属性的类型。
<jsp:setProperty>标签使用范例1:使用jsp:setProperty标签设置person对象的属性值,代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--
在jsp中使用jsp:useBean标签来实例化一个Java类的对象
<jsp:useBean id="person" class="org.lxh.JavaBean.*" scope="page"/>
<jsp:useBean>:表示在JSP中要使用JavaBean。
id:表示生成的实例化对象,凡是在标签中看见了id,则肯定表示一个实例对象。
class:此对象对应的包.类名称
scope:此javaBean的保存范围,四种范围:page、request、session、application
--%>
<jsp:useBean id="person" class="org.lxh.JavaBean.*" scope="page"/> <%--
使用jsp:setProperty标签设置person对象的属性值
jsp:setProperty在设置对象的属性值时会自动把字符串转换成8种基本数据类型
但是jsp:setProperty对于复合数据类型无法自动转换
--%>
<jsp:setProperty property="name" name="person" value="小小高"/>
<jsp:setProperty property="sex" name="person" value="男"/>
<jsp:setProperty property="age" name="person" value="21"/>
<%--
birthday属性是一个Date类型,这个属于复合数据类型,因此无法将字符串自动转换成Date ,用下面这种写法是会报错的
<jsp:setProperty property="birthday" name="person" value="1988-05-07"/>
--%>
<jsp:setProperty property="birthday" name="person" value="<%=new Date()%>"/>
<!DOCTYPE HTML>
<html>
<head>
<title>jsp:setProperty操作实例</title>
</head> <body>
<%--使用getXxx()方法获取对象的属性值 --%>
<h2>姓名:<%=person.getName()%></h2>
<h2>性别:<%=person.getSex()%></h2>
<h2>年龄:<%=person.getAge()%></h2>
<h2>出生日期:<%=person.getBirthday()%></h2>
</body>
</html>
<jsp:setProperty>标签使用范例2:使用请求参数为bean的属性赋值,代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--
在jsp中使用jsp:useBean标签来实例化一个Java类的对象
<jsp:useBean id="person" class="org.lxh.JavaBean.*" scope="page"/>
<jsp:useBean>:表示在JSP中要使用JavaBean。
id:表示生成的实例化对象,凡是在标签中看见了id,则肯定表示一个实例对象。
class:此对象对应的包.类名称
scope:此javaBean的保存范围,四种范围:page、request、session、application
--%>
<jsp:useBean id="person" class="org.lxh.JavaBean.*" scope="page"/> <%--
jsp:setProperty标签可以使用请求参数为bean的属性赋值
param="param_name"用于接收参数名为param_name的参数值,然后将接收到的值赋给name属性
--%>
<jsp:setProperty property="name" name="person" param="param_name"/> <!DOCTYPE HTML>
<html>
<head>
<title>jsp:setProperty操作实例</title>
</head> <body>
<%--使用getXxx()方法获取对象的属性值 --%>
<h2>姓名:<%=person.getName()%></h2>
</body>
</html>
<jsp:setProperty>标签使用范例3:用所有的请求参数为bean的属性赋值,代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--
在jsp中使用jsp:useBean标签来实例化一个Java类的对象
<jsp:useBean id="person" class="org.lxh.JavaBean.*" scope="page"/>
<jsp:useBean>:表示在JSP中要使用JavaBean。
id:表示生成的实例化对象,凡是在标签中看见了id,则肯定表示一个实例对象。
class:此对象对应的包.类名称
scope:此javaBean的保存范围,四种范围:page、request、session、application
--%>
<jsp:useBean id="person" class="org.lxh.JavaBean.*" scope="page"/> <%--
jsp:setProperty标签用所有的请求参数为bean的属性赋值
property="*"代表bean的所有属性
--%>
<jsp:setProperty property="*" name="person"/> <!DOCTYPE HTML>
<html>
<head>
<title>jsp:setProperty标签使用范例</title>
</head> <body>
<%--使用getXxx()方法获取对象的属性值 --%>
<h2>姓名:<%=person.getName()%></h2>
<h2>性别:<%=person.getSex()%></h2>
<h2>年龄:<%=person.getAge()%></h2>
</body>
</html>
3.5、<jsp:getProperty>标签
<jsp:getProperty>标签用于读取JavaBean对象的属性,也就是调用JavaBean对象的getter方法,然后将读取的属性值转换成字符串后插入进输出的响应正文中。
语法:
<jsp:getProperty name="beanInstanceName" property="PropertyName" />
name属性用于指定JavaBean实例对象的名称,其值应与<jsp:useBean>标签的id属性值相同。
property属性用于指定JavaBean实例对象的属性名。
如果一个JavaBean实例对象的某个属性的值为null,那么,使用<jsp:getProperty>标签输出该属性的结果将是一个内容为“null”的字符串。
范例:使用jsp:getProperty获取bean对象的属性值,代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--
在jsp中使用jsp:useBean标签来实例化一个Java类的对象
<jsp:useBean id="person" class="org.lxh.JavaBean.*" scope="page"/>
<jsp:useBean>:表示在JSP中要使用JavaBean。
id:表示生成的实例化对象,凡是在标签中看见了id,则肯定表示一个实例对象。
class:此对象对应的包.类名称
scope:此javaBean的保存范围,四种范围:page、request、session、application
--%>
<jsp:useBean id="person" class="org.lxh.JavaBean.*" scope="page"/> <%--
使用jsp:setProperty标签设置person对象的属性值
jsp:setProperty在设置对象的属性值时会自动把字符串转换成8种基本数据类型
但是jsp:setProperty对于复合数据类型无法自动转换
--%>
<jsp:setProperty property="name" name="person" value="小小高"/>
<jsp:setProperty property="sex" name="person" value="男"/>
<jsp:setProperty property="age" name="person" value="21"/>
<%--
birthday属性是一个Date类型,这个属于复合数据类型,因此无法将字符串自动转换成Date ,用下面这种写法是会报错的
<jsp:setProperty property="birthday" name="person" value="1988-05-07"/>
--%>
<jsp:setProperty property="birthday" name="person" value="<%=new Date()%>"/>
<!DOCTYPE HTML>
<html>
<head>
<title>jsp:getProperty操作实例</title>
</head> <body>
<%--使用jsp:getProperty标签获取对象的属性值 --%>
<h2>姓名:<jsp:getProperty property="name" name="person"/></h2>
<h2>性别:<jsp:getProperty property="sex" name="person"/></h2>
<h2>年龄:<jsp:getProperty property="age" name="person"/></h2>
<h2>出生日期:<jsp:getProperty property="birthday" name="person"/></h2>
</body>
</html>
JavaBean基础学习总结的更多相关文章
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
- Spring Framework基础学习
Spring Framework基础学习 Core support for dependency injection,transaction management,web applications,d ...
- MacOS下SpringBoot基础学习
学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"springboot"获取视频和教程资料! b站在线视 ...
- salesforce 零基础学习(五十二)Trigger使用篇(二)
第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...
- 如何从零基础学习VR
转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...
- IOS基础学习-2: UIButton
IOS基础学习-2: UIButton UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...
- HTML5零基础学习Web前端需要知道哪些?
HTML零基础学习Web前端网页制作,首先是要掌握一些常用标签的使用和他们的各个属性,常用的标签我总结了一下有以下这些: html:页面的根元素. head:页面的头部标签,是所有头部元素的容器. b ...
- python入门到精通[三]:基础学习(2)
摘要:Python基础学习:列表.元组.字典.函数.序列化.正则.模块. 上一节学习了字符串.流程控制.文件及目录操作,这节介绍下列表.元组.字典.函数.序列化.正则.模块. 1.列表 python中 ...
- python入门到精通[二]:基础学习(1)
摘要:Python基础学习: 注释.字符串操作.用户交互.流程控制.导入模块.文件操作.目录操作. 上一节讲了分别在windows下和linux下的环境配置,这节以linux为例学习基本语法.代码部分 ...
随机推荐
- 《DSP using MATLAB》Problem 8.36
上代码: function [wpLP, wsLP, alpha] = lp2lpfre(wplp, wslp) % Band-edge frequency conversion from lowpa ...
- Python全栈开发:XML与parse对比
#!/usr/bin/env python # -*- coding;utf-8 -*- """ ET.XML和ET.parse的对比 1.返回对象差异: ET.XML: ...
- idea-----idea的项目中output框出现乱码
找到tomcat的安装目录中的logging.properties 我的在这里:E:\tools\tomcat\apache-tomcat-8.5.38\conf 改其中的参数 修改前 java.u ...
- Oracle Database 18c数据库安装步骤
1.Oracle官网登录下载https://login.oracle.com/mysso/signon.jsp WINDOWS.X64_180000_db_home.zip 2.D盘根目录新建文件夹: ...
- 以代码的方式管理quartz定时任务的暂停、重启、删除、添加等
[前言]在项目的管理功能中,对定时任务的管理有时会很常见.因为我们不能指望只在配置文件中配置好定时任务就行了,因为如果要控制定时任务的 “暂停” 呢?暂停之后又要在某个时间点 “重启” 该定时任务呢? ...
- 查看python安装位置和已安装库的相关操作
打开cmd.exe, *查看python安装位置 where python *查看已安装库 pip list 或者pip freeze *查看可以更新的第三方库 pip list --outdated ...
- hdu6088 组合数+反演+拆系数fft
题意:两个人van石头剪子布的游戏一共n盘,假设A赢了a盘,B赢了b盘,那么得分是gcd(a,b),求得分的期望*\(3^{2*n}\) 题解:根据题意很明显有\(ans=3^{n}*\sum_{a= ...
- JEECG-Boot 项目介绍——基于代码生成器的快速开发平台(Springboot前后端分离)
Jeecg-Boot 是一款基于代码生成器的智能开发平台!采用前后端分离架构:SpringBoot,Mybatis,Shiro,JWT,Vue&Ant Design.强大的代码生成器让前端和后 ...
- [原创]mysql 5.6安装配置,主从分离,读写分离简单教程
文章中参考使用了多个博客的资料,汇总而成!其流程准确性被人亦本人实践! https://blog.csdn.net/qq_35206261/article/details/81321201 https ...
- Django入门之基础篇01
这是第一篇Django(花音:浆够)入门博客,学习Django的初衷是为了开发自己的个人小小网站(虽然有了博客园,还是想建立自己的博客,因为自主定制,香香香~!)