因工作需要 需要学习jsp方面的知识 这篇博客文章写得比较全面 我记录下:

一、什么是JavaBean

  JavaBean是一个遵循特定写法的Java类,它通常具有如下特点:

  • 这个Java类必须具有一个无参的构造函数
  • 属性必须私有化。
  • 私有化的属性必须通过public类型的方法暴露给其它程序,并且方法的命名也必须遵守一定的命名规范。

javaBean范例:

 1 package gacl.javabean.study;
2
3 /**
4 * @author gacl
5 * Person类就是一个最简单的JavaBean
6 */
7 public class Person {
8
9 //------------------Person类封装的私有属性---------------------------------------
10 // 姓名 String类型
11 private String name;
12 // 性别 String类型
13 private String sex;
14 // 年龄 int类型
15 private int age;
16 //是否已婚 boolean类型
17 private boolean married;
18 //---------------------------------------------------------
19
20 //------------------Person类的无参数构造方法---------------------------------------
21 /**
22 * 无参数构造方法
23 */
24 public Person() {
25
26 }
27 //---------------------------------------------------------
28
29 //------------------Person类对外提供的用于访问私有属性的public方法---------------------------------------
30 public String getName() {
31 return name;
32 }
33
34 public void setName(String name) {
35 this.name = name;
36 }
37
38 public String getSex() {
39 return sex;
40 }
41
42 public void setSex(String sex) {
43 this.sex = sex;
44 }
45
46 public int getAge() {
47 return age;
48 }
49
50 public void setAge(int age) {
51 this.age = age;
52 }
53
54 public boolean isMarried() {
55 return married;
56 }
57
58 public void setMarried(boolean married) {
59 this.married = married;
60 }
61 //---------------------------------------------------------
62 }

  JavaBean在J2EE开发中,通常用于封装数据,对于遵循以上写法的JavaBean组件,其它程序可以通过反射技术实例化JavaBean对象,并且通过反射那些遵守命名规范的方法,从而获知JavaBean的属性,进而调用其属性保存数据。

二、JavaBean的属性

  JavaBean的属性可以是任意类型,并且一个JavaBean可以有多个属性。每个属性通常都需要具有相应的setter、 getter方法,setter方法称为属性修改器,getter方法称为属性访问器。
  属性修改器必须以小写的set前缀开始,后跟属性名,且属性名的第一个字母要改为大写,例如,name属性的修改器名称为setName,password属性的修改器名称为setPassword。 
  属性访问器通常以小写的get前缀开始,后跟属性名,且属性名的第一个字母也要改为大写,例如,name属性的访问器名称为getName,password属性的访问器名称为getPassword。 
  一个JavaBean的某个属性也可以只有set方法或get方法,这样的属性通常也称之为只写、只读属性。

三、在JSP中使用JavaBean

  JSP技术提供了三个关于JavaBean组件的动作元素,即JSP标签,它们分别为:

  • <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>标签使用范例:

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 <%--
3 在jsp中使用jsp:useBean标签来实例化一个Java类的对象
4 <jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/>
5 ┝<jsp:useBean>:表示在JSP中要使用JavaBean。
6 ┝id:表示生成的实例化对象,凡是在标签中看见了id,则肯定表示一个实例对象。
7 ┝class:此对象对应的包.类名称
8 ┝scope:此javaBean的保存范围,四种范围:page、request、session、application
9 --%>
10 <jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/>
11 <%
12 //person对象在上面已经使用jsp:useBean标签实例化了,因此在这里可以直接使用person对象
13 //使用setXxx方法为对象的属性赋值
14 //为person对象的name属性赋值
15 person.setName("孤傲苍狼");
16 //为person对象的Sex属性赋值
17 person.setSex("男");
18 //为person对象的Age属性赋值
19 person.setAge(24);
20 //为person对象的married属性赋值
21 person.setMarried(false);
22 %>
23 <!DOCTYPE HTML>
24 <html>
25 <head>
26 <title>jsp:useBean标签使用范例</title>
27 </head>
28
29 <body>
30 <%--使用getXxx()方法获取对象的属性值 --%>
31 <h2>姓名:<%=person.getName()%></h2>
32 <h2>性别:<%=person.getSex()%></h2>
33 <h2>年龄:<%=person.getAge()%></h2>
34 <h2>已婚:<%=person.isMarried()%></h2>
35 </body>
36 </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对象的创建过程,如下所示:

1      gacl.javabean.study.Person person = null;
2 synchronized (_jspx_page_context) {
3 person = (gacl.javabean.study.Person) _jspx_page_context.getAttribute("person", PageContext.PAGE_SCOPE);
4 if (person == null){
5 person = new gacl.javabean.study.Person();
6 _jspx_page_context.setAttribute("person", person, PageContext.PAGE_SCOPE);
7 }
8 }

  下面我们来分析一下上述生成的代码:

  首先是定义一个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对象的属性值

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 <%--
3 在jsp中使用jsp:useBean标签来实例化一个Java类的对象
4 <jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/>
5 ┝<jsp:useBean>:表示在JSP中要使用JavaBean。
6 ┝id:表示生成的实例化对象,凡是在标签中看见了id,则肯定表示一个实例对象。
7 ┝class:此对象对应的包.类名称
8 ┝scope:此javaBean的保存范围,四种范围:page、request、session、application
9 --%>
10 <jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/>
11
12 <%--
13 使用jsp:setProperty标签设置person对象的属性值
14 jsp:setProperty在设置对象的属性值时会自动把字符串转换成8种基本数据类型
15 但是jsp:setProperty对于复合数据类型无法自动转换
16 --%>
17 <jsp:setProperty property="name" name="person" value="白虎神皇"/>
18 <jsp:setProperty property="sex" name="person" value="男"/>
19 <jsp:setProperty property="age" name="person" value="24"/>
20 <jsp:setProperty property="married" name="person" value="false"/>
21 <%--
22 birthday属性是一个Date类型,这个属于复合数据类型,因此无法将字符串自动转换成Date ,用下面这种写法是会报错的
23 <jsp:setProperty property="birthday" name="person" value="1988-05-07"/>
24 --%>
25 <jsp:setProperty property="birthday" name="person" value="<%=new Date()%>"/>
26 <!DOCTYPE HTML>
27 <html>
28 <head>
29 <title>jsp:setProperty标签使用范例</title>
30 </head>
31
32 <body>
33 <%--使用getXxx()方法获取对象的属性值 --%>
34 <h2>姓名:<%=person.getName()%></h2>
35 <h2>性别:<%=person.getSex()%></h2>
36 <h2>年龄:<%=person.getAge()%></h2>
37 <h2>已婚:<%=person.isMarried()%></h2>
38 <h2>出生日期:<%=person.getBirthday()%></h2>
39 </body>
40 </html>

运行效果如下:

  

<jsp:setProperty>标签使用范例2:使用请求参数为bean的属性赋值

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 <%--
3 在jsp中使用jsp:useBean标签来实例化一个Java类的对象
4 <jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/>
5 ┝<jsp:useBean>:表示在JSP中要使用JavaBean。
6 ┝id:表示生成的实例化对象,凡是在标签中看见了id,则肯定表示一个实例对象。
7 ┝class:此对象对应的包.类名称
8 ┝scope:此javaBean的保存范围,四种范围:page、request、session、application
9 --%>
10 <jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/>
11
12 <%--
13 jsp:setProperty标签可以使用请求参数为bean的属性赋值
14 param="param_name"用于接收参数名为param_name的参数值,然后将接收到的值赋给name属性
15 --%>
16 <jsp:setProperty property="name" name="person" param="param_name"/>
17
18 <!DOCTYPE HTML>
19 <html>
20 <head>
21 <title>jsp:setProperty标签使用范例</title>
22 </head>
23
24 <body>
25 <%--使用getXxx()方法获取对象的属性值 --%>
26 <h2>姓名:<%=person.getName()%></h2>
27 </body>
28 </html>

运行结果如下:

  

<jsp:setProperty>标签使用范例3:用所有的请求参数为bean的属性赋值

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 <%--
3 在jsp中使用jsp:useBean标签来实例化一个Java类的对象
4 <jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/>
5 ┝<jsp:useBean>:表示在JSP中要使用JavaBean。
6 ┝id:表示生成的实例化对象,凡是在标签中看见了id,则肯定表示一个实例对象。
7 ┝class:此对象对应的包.类名称
8 ┝scope:此javaBean的保存范围,四种范围:page、request、session、application
9 --%>
10 <jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/>
11
12 <%--
13 jsp:setProperty标签用所有的请求参数为bean的属性赋值
14 property="*"代表bean的所有属性
15 --%>
16 <jsp:setProperty property="*" name="person"/>
17
18 <!DOCTYPE HTML>
19 <html>
20 <head>
21 <title>jsp:setProperty标签使用范例</title>
22 </head>
23
24 <body>
25 <%--使用getXxx()方法获取对象的属性值 --%>
26 <h2>姓名:<%=person.getName()%></h2>
27 <h2>性别:<%=person.getSex()%></h2>
28 <h2>年龄:<%=person.getAge()%></h2>
29 </body>
30 </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对象的属性值

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 <%--
3 在jsp中使用jsp:useBean标签来实例化一个Java类的对象
4 <jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/>
5 ┝<jsp:useBean>:表示在JSP中要使用JavaBean。
6 ┝id:表示生成的实例化对象,凡是在标签中看见了id,则肯定表示一个实例对象。
7 ┝class:此对象对应的包.类名称
8 ┝scope:此javaBean的保存范围,四种范围:page、request、session、application
9 --%>
10 <jsp:useBean id="person" class="gacl.javabean.study.Person" scope="page"/>
11
12 <%--
13 使用jsp:setProperty标签设置person对象的属性值
14 jsp:setProperty在设置对象的属性值时会自动把字符串转换成8种基本数据类型
15 但是jsp:setProperty对于复合数据类型无法自动转换
16 --%>
17 <jsp:setProperty property="name" name="person" value="白虎神皇"/>
18 <jsp:setProperty property="sex" name="person" value="男"/>
19 <jsp:setProperty property="age" name="person" value="24"/>
20 <jsp:setProperty property="married" name="person" value="false"/>
21 <%--
22 birthday属性是一个Date类型,这个属于复合数据类型,因此无法将字符串自动转换成Date ,用下面这种写法是会报错的
23 <jsp:setProperty property="birthday" name="person" value="1988-05-07"/>
24 --%>
25 <jsp:setProperty property="birthday" name="person" value="<%=new Date()%>"/>
26 <!DOCTYPE HTML>
27 <html>
28 <head>
29 <title>jsp:getProperty标签使用范例</title>
30 </head>
31
32 <body>
33 <%--使用jsp:getProperty标签获取对象的属性值 --%>
34 <h2>姓名:<jsp:getProperty property="name" name="person"/></h2>
35 <h2>性别:<jsp:getProperty property="sex" name="person"/></h2>
36 <h2>年龄:<jsp:getProperty property="age" name="person"/></h2>
37 <h2>已婚:<jsp:getProperty property="married" name="person"/></h2>
38 <h2>出生日期:<jsp:getProperty property="birthday" name="person"/></h2>
39 </body>
40 </html>

运行结果如下:

  

  关于JavaBean方面的内容基本上就这么多了,只需要掌握JavaBean的写法,以及掌握<jsp:useBean>标签,<jsp:setProperty>标签,<jsp:getProperty>标签的使用!

什么是javabean及其用法(转)的更多相关文章

  1. JavaBean基本用法示例(二)

    JavaBean的第二种用法,是接收form组件的请求赋值. 一.修改person类.因为这一次是两个网页之间的数据传输,受中文乱码问题的影响,所以在person类中添加一个用于转码的函数,并且在每一 ...

  2. JavaBean的用法

    JavaBean是一个可重复使用的软件组件,是用Java语言编写的.遵循一定标准的类. JavaBean是Java Web的重要组件,它封装了数据和操作的功能类,供JSP和Servlet调用,完成数据 ...

  3. JavaBean基本用法示例(一)

    一.首先创建一个类person,里面有四个成员:name,sex,age,info,添加四个成员所有的set和get方法. package com.kaly.bean; public class pe ...

  4. jsp中JavaBean的用法

    UserRegisterBean.java:这是JavaBean package JavaBean; public class UserRegisterBean { private String us ...

  5. 什么是javabean及其用法

    一.什么是JavaBean JavaBean是一个遵循特定写法的Java类,它通常具有如下特点: 这个Java类必须具有一个无参的构造函数 属性必须私有化. 私有化的属性必须通过public类型的方法 ...

  6. (九)Javabean与Jsp(来自那些年的笔记)

    目录 JavaBean 在JSP中使用JavaBean 标签用法 带标签体的 JavaBean 标签 setProperty 标签 getProperty 标签 JSP开发模式 案列:使用 模式一 编 ...

  7. Java学习day11-类的成员之三:构造器(构造方法)

    一.构造器(构造方法) 语法格式: 修饰符 类名(参数列表){ 初始化语句: } 构造器的特征: 1.它具有与类相同的名称 2.它不声明返回值类型.(与声明为void不同) 3.不能被static.f ...

  8. JavaBean简介和用法

    一.JavaBean的含义 JavaBean是使用Java语言开发的一个可重用组件,能使Html代码与JAVA代码分离,并节省开发时间,简单的说就是一个包含了setter和getter以及至少一个无参 ...

  9. as 插件GsonFormat用法(json字符串快速生成javabean)

    GsonFormat 主要用于使用Gson库将JSONObject格式的String 解析成实体,该插件可以加快开发进度,使用非常方便,效率高. 插件地址:https://plugins.jetbra ...

随机推荐

  1. python3 文件操作

    步骤:打开文件->操作文件->关闭文件 打开文件 文件句柄 = open('文件路径', '模式') 指定文件编码 文件句柄= open('文件路径','模式',encoding='utf ...

  2. MapReduce shuffle过程剖析及调优

    MapReduce简介 在Hadoop MapReduce中,框架会确保reduce收到的输入数据是根据key排序过的.数据从Mapper输出到Reducer接收,是一个很复杂的过程,框架处理了所有问 ...

  3. How-to: Do Real-Time Log Analytics with Apache Kafka, Cloudera Search, and Hue

    Cloudera recently announced formal support for Apache Kafka. This simple use case illustrates how to ...

  4. 3.20 总结 java程序流程控制

  5. 基于Armitage的MSF自动化集成攻击实践

    基于Armitage的MSF自动化集成攻击实践 目录 0x01 实践环境 0x02 预备知识 0x03 Armitage基础配置 0x04 Nmap:Armitage下信息搜集与漏洞扫描 0x05 A ...

  6. 基于SpringBoot搭建应用开发框架(二) —— 登录认证

    零.前言 本文基于<基于SpringBoot搭建应用开发框架(一)——基础架构>,通过该文,熟悉了SpringBoot的用法,完成了应用框架底层的搭建. 在开始本文之前,底层这块已经有了很 ...

  7. 循环语句--do...while

    do...while循环 格式: 执行流程 执行顺序:①③④>②③④>②③④…②不满足为止. ①负责完成循环变量初始化. ②负责判断是否满足循环条件,不满足则跳出循环. ③具体执行的语句 ...

  8. wget命令使用报错 certificate common name 'xxx' doesn't match requestde host name

    使用wget命令 wget http://www.monkey.org/~provos/libevent-1.2.tar.gz 报如下错 error:certificate common name & ...

  9. 三种dedecms友情链接调用标签

    三种dedecms友情链接调用标签: 1.获取友情链接分类 {dede:flinktype}<span>[field:typename/]</span>{/dede:flink ...

  10. NIO原理及案例使用

    什么是NIO Java提供了一个叫作NIO(New I/O)的第二个I/O系统,NIO提供了与标准I/O API不同的I/O处理方式.它是Java用来替代传统I/O API(自Java 1.4以来). ...