zoukankan      html  css  js  c++  java
  • jsp学习--JavaBean定义和在Jsp中使用JavaBean

    一.JavaBean

    1.什么是JavaBean

    JavaBean是一个遵循特定写法的Java类,它通常具有如下特点:
    >>这个Java类必须具有一个无参的构造函数
    >>属性必须私有化
    >>私有化的属性必须通过public类型的方法暴露给其它程序,并且方法的命名也必须遵守一定的命名规范。
    虽然Sun公司在定义JavaBean规范时,允许Java开发人员把JavaBean设计得可以像Swing组件一样功能强大,但在实际的J2EE开发中,通常只使用到以上JavaBean最基本的特性:
    JavaBean在J2EE开发中,通常用于封装数据,对于遵循以上写法的JavaBean组件,其它程序可以通过反射技术实例化JavaBean对象,并且通过反射那些遵守命名规范的方法,从而获知JavaBean的属性,进而调用其属性保存数据。

    2.JavaBean的属性

    JavaBean的属性可以是任意类型,并且一个JavaBean可以有多个属性。每个属性通常都需要具有相应的setter、 getter方法,setter方法称为属性修改器,getter方法称为属性访问器(like write and read )

    属性修改器必须以小写的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组件的属性。

    1.<jsp:userBean>标签

    <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>执行原理:

    <jsp:useBean id="currentDate" class="java.util.Date"/>
    翻译成的Servlet源码:
    java.util.Date currentDate = null;
    synchronized (_jspx_page_context) {
    currentDate = (java.util.Date)         _jspx_page_context.getAttribute(
    "currentDate", PageContext.PAGE_SCOPE);
    if (currentDate == null){
    currentDate = new java.util.Date();
    _jspx_page_context.setAttribute("currentDate",
    currentDate, PageContext.PAGE_SCOPE);
    }
    }

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

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

    2.<jsp:setProperty>标签

    <jsp:setProperty>标签用于设置和访问JavaBean对象的属性。
    语法格式:
    <jsp:setProperty name="beanName"
    {
        property="propertyName" value="{string | <%= expression %>}" |
        property="propertyName" [ param="parameterName" ] |
        property= "*"
    }/>

    name属性用于指定JavaBean对象的名称
    property属性用于指定JavaBean实例对象的属性名
    value属性用于指定JavaBean对象的某个属性的值,value的值可以是字符串,也可以是表达式。为字符串时,该值会自动转化为JavaBean属性相应的类型,如果value的值是一个表达式,那么该表达式的计算结果必须与所要设置的JavaBean属性的类型一致。  
    param属性用于将JavaBean实例对象的某个属性值设置为一个请求参数值,该属性值同样会自动转换成要设置的JavaBean属性的类型。

    3.<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”的字符串。

    4.例:

    setproperty.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ page import="java.util.*"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>jsp:setproperty</title>
    </head>
    <body>
        <jsp:useBean id="person" class="com.amos.model.Person"></jsp:useBean>
        <br>----------------------------<br>
        <!-- 手工为bean属性赋值 -->
        <jsp:setProperty property="name" name="person" value="hi_amos" />
        <%=person.getName()%>
        <br>
    
        <br>----------------------------<br>
        <!-- 用请求参数给bean赋值 -->
    
        <!-- http://localhost:8080/jsp/setproperty.jsp?username=abc -->
        <jsp:setProperty property="name" name="person" param="username" />
        <%=person.getName()%><br>
    
        <!-- 支持将字符串转换成8种基本常用的数据类型 
          http://localhost:8080/jsp/setproperty.jsp?username=abc&userage=30
          -->
        <jsp:setProperty property="age" name="person" param="userage" />
        <%=person.getAge()%>
    
        <jsp:setProperty property="birthday" name="person"
            value="<%=new Date()%>" />
        <%=person.getBirthday()%>
    
    
        <br>----------------------------<br>
        <!-- 用所有的请求参数为Bean赋值 -->
        <jsp:setProperty property="*" name="person" />
        <%=person.getAge()%>
        <%=person.getName() %>
        <br>----------------------------
        <br>
        <jsp:getProperty property="name" name="person"/>
        <jsp:getProperty property="age" name="person"/>
        <jsp:getProperty property="birthday" name="person"/>    
        
    </body>
    </html>

    Person.java

    package com.amos.model;
    
    import java.util.Date;
    
    public class Person {
        private String name="amosli";
        private Integer age;
        private Date birthday;
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public Date getBirthday() {
            return birthday;
        }
    
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
    }

     

    效果如下图:

  • 相关阅读:
    克如斯卡尔 P1546
    真正的spfa
    第四课 最小生成树 要点
    关于vscode中nullptr未定义
    cmake学习笔记
    python学习笔记
    (BFS 图的遍历) 2906. kotori和迷宫
    (图论基础题) leetcode 997. Find the Town Judge
    (BFS DFS 并查集) leetcode 547. Friend Circles
    (BFS DFS 图的遍历) leetcode 841. Keys and Rooms
  • 原文地址:https://www.cnblogs.com/amosli/p/3606661.html
Copyright © 2011-2022 走看看