JavaWeb学习笔记(十五)--JSP与JavaBean

 

1. 什么是JavaBean

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

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

JavaBean在J2EE开发中,通常用于封装数据,对于遵循以上写法的JavaBean组件,其他程序可以通过反射技术实例化JavaBean对象,并通过反射那些遵循命名规范的方法,从而获取JavaBean的属性和设置属性的值。

JavaBean示例:

package com.domain;

public class Person {

    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

2. JavaBean的属性

JavaBean可以有多个属性,属性可以是任意类型,每个属性通常都需要有相应的setter和getter方法,setter方法称为属性修改器,getter方法称为属性访问器。

setter和getter方法命名必须以set、get开始,其后跟上对应的属性名,属性名第一个字母大写。

一个JavaBean的某个属性也可以只有getter或setter方法,这样的属性称之为只读、只写属性。

3. 在JSP使用JavaBean

JSP技术中提供了三个JavaBean相关的标签:

  • <jsp:useBean>:用于在JSP页面中查找或实例化一个JavaBean组件
  • <jsp:setProperty>:用于在JSP页面中设置一个JavaBean组件的属性。
  • <jsp:getProperty>:用于在JPS页面中获取一个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

示例:

<%@ page import="com.domain.Person" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>useBean示例</title>
</head>
<body>
<jsp:useBean id="person1" class="com.domain.Person"></jsp:useBean>
<%
    out.print(person1);
%>
<br>
<%
    Person person = new Person();
    pageContext.setAttribute("person2", person);
    out.print(person);
%>
<br>
<jsp:useBean id="person2" class="com.domain.Person"></jsp:useBean>
<%
    out.print(person2);
%>
</body>
</html>

运行结果:

person1在使用<jsp:useBean>标签是当前域没有person1对象。person2在使用<jsp:useBean>标签时,当前域中已经存在person对象。

查看翻译后的Servlet,可以看到创建的时候先去指定域查找是否存在对应的JavaBean,存在直接返回,不存在则新创建一个。

3.2 带标签体的<jsp:useBean>标签

语法:

<jsp:useBean ...>
  Body
</jsp:useBean>

功能:Body部分的内容只有在<jsp:useBean>标签创建JavaBean实例对象时才执行。

3.3  <jsp:setProperty>标签

<jsp:setProperty>用于设置JavaBean的属性

语法:

<jsp:setProperty name="beanName" property="propertyName" value="String | <%= experession %>"/>
<jsp:setProperty name="beanName" property="propertyName" param="parameName"/>
<jsp:setProperty name="beanName" property="*" />

name属性用于指定JavaBean对象的名称。

property属性用于指定JavaBeran实例对象的属性名。

value属性用于指定JavaBean对象的某个属性的值,value的值可以是字符串,也可以是表达式,该表达式计算的结果必须与要设置的JavaBean属性的类型一致。

param属性用于将JavaBean实例对象的某个属性之设置为一个请求参数的值,该属性同样会自动转换成要设置的JavaBean属性的类型(只支持8中基本类型的转换,将请求参数的字符串转换成基本类型,并赋值到bean属性中)。

property="*"时,则使用所有请求参数为bean赋值,请求参数名称必须和JavaBean的名称一致。

举例:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>setProperty举例</title>
</head>
<body>
<jsp:useBean id="person1" class="com.domain.Person" />
<jsp:setProperty name="person1" property="name" value="zhangsan"/>
<jsp:setProperty name="person1" property="age" value="18"/>
<%
    out.print(person1);
%>
<br>
<jsp:useBean id="person2" class="com.domain.Person" />
<jsp:setProperty name="person2" property="name" param="name"/>
<jsp:setProperty name="person2" property="age" param="age"/>
<%
    out.print(person2);
%>
<br>

<jsp:useBean id="person3"  class="com.domain.Person"/>
<jsp:setProperty name="person3" property="*"/>
<%
    out.print(person3);
%>


</body>
</html>

运行结果:

3.4  <jsp:getProperty>标签

<jsp:getProperty>标签用于读取JavaBean对象的属性,然后将读取的属性值转换成字符串输出到响应正文中。

语法:

<jsp:getProperty name="beanName" property="propertyName"/>

name属性用于指定实例对象的名称。
property属性用于指定JavaBean实例对象的属性名。

如果一个JavaBean实例对象的某个属性为null,那么使用<jsp:getProperty>标签的输出结果是一个内容为“null”的字符串。

举例:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>getProperty举例</title>
</head>
<body>

<jsp:useBean id="person" class="com.domain.Person"/>
<jsp:setProperty name="person" property="name" value="zhangsan" />
<jsp:setProperty name="person" property="age" value="18" />
name = <jsp:getProperty name="person" property="name"/><br>
age = <jsp:getProperty name="person" property="age"/>

</body>
</html>

运行结果:

 

posted @ 2019-06-01 18:01  暴躁的毛毛熊  阅读(321)  评论(0编辑  收藏  举报