JavaBean

学习目的与要求

熟练掌握<jsp:useBean>、<jsp:setProperty>、<jsp:getProperty>等JSP的操作指令。

本章主要内容

  • 编写JavaBean
  • 在JSP中使用JavaBean 

一个JSP页面通过使用HTML标记为用户显示数据(静态部分),页面中变量的声明、程序片以及表达式为动态部分,对数据进行处理。如果Java程序片和HTML标记大量掺杂在一起使用,将不利于JSP页面的扩展和维护。JSP和JavaBean技术的结合不仅可以实现数据的表示和处理分离,而且可以提高JSP程序代码重用的程度,是JSP编程中常用的技术。

1.编写JavaBean 

JavaBean是一个可重复使用的软件组件,是遵循一定标准、用Java语言编写的一个类,该类的一个实例称为一个JavaBea,简称bean。JavaBean具有可重用、升级方便、不依赖与平台的特点。JavaBean又可以分为业务bean和数据bean。

业务bean:用于封装业务逻辑、数据库操作等;

数据bean:用于封装数据。

编写一个JavaBean就是编写一个Java类(该类必须带有包名),这个类创建的一个对像为一个bean,为了让JSP引擎(比如Tomcat)知道这个bean的属性和方法,JavaBean类必须遵守以下规则:              

①如果类的成员变量的名字是name,那么为了获取或更改成员变量的值,在类中必须提供以下两个方法。

  • getName():用来获取属性name。
  • setName():用来修改属性name。

②对于boolean类型的成员变量,允许使用“is”代替上面的“get”和“set”。

③类中方法的访问权限必须是public。

④如果有构造方法,必须提供一个五参数的构造方法。

【例1】创建bean的源文件Rectangle.java(在包com.bean中)。该bean的作用是封装矩形的长宽高,并计算矩形的面积和周长。

Rectangle.java
package com.bean Rectangle{
       private double length;
       private double width;
       public Rectangle(){
       length = 20;
       width = 10;
       }
       public double getLength(){
          return length;
       }
       public void setLength(double length){
          this.length=length;
       }
       public getWidth(){
          return width;
       }
        public void setWidth(double width){
          this.width=width;
       }
       public double computerArea(){
          return length*width;
       }
       public double computerLength(){
          return (length+width)*2;
       }
}

2.在JSP中使用JavaBean

在JSP页面中使用bean时,首先使用page指令的import属性导入创建bean的类,例如

<%@ page import="com.bean.*"%>

2.1 动作标记useBean

useBean动作标记用来查找或者实例化一个JavaBean。useBean标记的格式如下:

<jsp:useBean id="bean的名字" class="创建bean的类" scope="bean的有效范围"/>
或
<jsp:useBean id="bean的名字" type="创建bean的类" scope="bean的有效范围" />
例如:
<jsp:useBean id ="Rectangle" class="com.bean.Rectangle" scope="page" />

【例2】在JSP页面中使用useBean标记获得一个bean,负责创建bean的类是例5-1中的Rectangle类,bean的名字是rectangle,rectangle的scope取值为page。

<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>example5_2.jsp</title>
</head>
<body>
<jsp:useBean id="rectangle" class="com.bean.Rectangle" scope="page"/>
<p>矩形的长是:<%=rectangle.getLength()%>
<p>矩形的宽是:<%=rectangle.getWidth()%>
<p>矩形的面积是:<%=rectangle.computerArea()%>
<p>矩形的周长是:<%=rectangle.computerLength()%>
</body>
</html>

2.2动作标记getProperty

      JavaBean的实质是遵守一定规范的类所创建的对象,用户可以通过两种方式获取bean的属性:

①在Java程序片或表达式中使用bean对象调用getXxx()方法获取bean的属性值,比如例5-2中的语句<%%=rectangle.getWidth()%>;

②先通过<jsp:useBean>标记获得一个bean,再通过<jsp:getProperty>标记获取bean的属性值。

      使用getProperty动作标记可以获得bean的属性值,注意,在使用该动作标记之前必须事先使用useBean动作标记获得一个相应的bean。getProperty动作标记的语法格式如下:

<jsp:getProperty name="bean的名字" property="bean的属性"/>
或
<jsp:getProperty name="bean的名字" property="bean的属性">
</jsp:getProperty>

2.3动作标记setProperty

      除了可以在Java程序片中使用bean对象调用setXxx()方法修改bean的属性值外,还可以使用setProperty动作标记修改bean的属性值。注意,在使用该动作标记会签必须事先使用useBean动作标记获得一个相应的bean。使用setProperty动作标记进行bean属性值的设置有以下三种方式

①用表达式或字符串设置bean的属性

(1)用表达式设置bean的属性:

<jsp:setProperty name="bean的名字" property="bean的属性" value="<%=expression%>"/>

(2)用字符串设置bean的属性:

<jsp:setProperty name="bean的名字" property="bean的属性" value="字符串"/>

      在用表达式修改bean属性值时,表达式值的类型必须与bean的属性类型一致。在用字符串修改bean属性值时,字符串会被转换为bean的属性类型,不能成功转换的可能会抛出NumberFormatException异常。

② 通过HTTP表单参数值设置bean的属性

<jsp:setProperty name="bean的名字" property="*"/>

这时,表单参数的名字必须与bean的名字相同,服务器会根据名字自动匹配,类型会自动转换。 

③任意指定请求参数设置bean的属性

任意指定请求参数设置bean的属性:

<jsp:setProperty name="bean的名字" property="属性名" param="参数名"/>

用户可以根据自己的需要任意选择传递的参数,请求参数名无须与bean属性名相同。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/288154.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【每日一题】2487. 从链表中移除节点-2024.1.3

题目&#xff1a; 2487. 从链表中移除节点 给你一个链表的头节点 head 。 移除每个右侧有一个更大数值的节点。 返回修改后链表的头节点 head 。 示例 1&#xff1a; 输入&#xff1a;head [5,2,13,3,8] 输出&#xff1a;[13,8] 解释&#xff1a;需要移除的节点是 5 &…

LeetCode做题总结 15. 三数之和(未完)

不会做&#xff0c;参考了代码随想录和力扣官方题解&#xff0c;对此题进行整理。 代码思路 思想&#xff1a;利用双指针法&#xff0c;对数组从小到大排序。先固定一个数&#xff0c;找到其他两个。 &#xff08;1&#xff09;首先对数组从小到大排序。 &#xff08;2&…

【vue/uniapp】使用 uni.chooseImage 和 uni.uploadFile 实现图片上传(包含样式,可以解决手机上无法上传的问题)

引入&#xff1a; 之前写过一篇关于 uview 1.x 版本上传照片 的文章&#xff0c;但是发现如果是在微信小程序的项目中嵌入 h5 的模块&#xff0c;这个 h5 的项目使用 u-upload 的话&#xff0c;图片上传功能在电脑上正常&#xff0c;但是在手机的小程序上测试就不会生效&#x…

声明式管理方(yaml)文件

声明式管理方(yaml)文件: 1、适合对资源的修改操作 2、声明式管理依赖于yaml文件&#xff0c;所有的内容都在yaml文件当中。 3、编辑好的yaml文件需要依靠陈述是还是要依靠陈述式的命令发布到k8s集群当中 create只能创建&#xff0c;不能更新。从指定yaml文件中读取配置&#…

【华为机试】2023年真题B卷(python)-考古问题

一、题目 题目描述&#xff1a; 考古问题&#xff0c;假设以前的石碑被打碎成了很多块&#xff0c;每块上面都有一个或若干个字符&#xff0c;请你写个程序来把之前石碑上文字可能的组合全部写出来&#xff0c;按升序进行排列。 二、输入输出 三、示例 示例1: 输入输出示例仅供…

java练习题之常用类Object类,包装类

常用类 应用知识点&#xff1a; Object类 包装类 习题&#xff1a; 1&#xff1a;(Object 类)仔细阅读以下代码&#xff0c;写出程序运行的结果&#xff1b;并简述 和 equals 的区别。 true false 是判断两个变量或实例是不是指向同一个内存空间。 比较两个引用类型的地址&…

声明式管理方法

声明式管理方法&#xff08;yaml&#xff09;文件&#xff1a; 1&#xff0c;适合对资源的修改操作 2&#xff0c;声明式管理依赖于yaml文件&#xff0c;所有的内容都在yamI文件当中 3&#xff0c;编辑好的yaml文件&#xff0c;还是要依靠陈述式命令发布到k8s集群当中 发布的…

Spring见解 1

1.Spring概述 1.1.Spring介绍 ​ Spring是轻量级Java EE应用开源框架&#xff08;官网&#xff1a; http://spring.io/ &#xff09;&#xff0c;它由Rod Johnson创为了解决企业级编程开发的复杂性而创建 1.2.简化应用开发体现在哪些方面&#xff1f; IOC 解决传统Web开发中…

SpringBoot—支付—微信

一、支付流程 1.1、支付准备 1.获取商户号 微信商户平台 申请成为商户 > 提交资料 > 签署协议 > 获取商户号 2.获取 AppID 微信公众平台 注册服务号 > 服务号认证 > 获取APPID > 绑定商户号 3.申请商户证书 登录商户平台 > 选择 账户中心 > 安全…

Kali Linux实现UEFI和传统BIOS(Legacy)引导启动

默认Kali linux安装会根据当前启动的引导模式进行安装 例:以UEFI引导启动安装程序,安装后仅能在UEFI引导模式下进入系统 安装Kali系统 这边基于VirtualBox虚拟机镜像实战操作 首先创建一个Kali虚拟机 这里需要注意,把启动 EFI (只针对某些操作系统)选项勾选上,内存、处理器…

I.MX6ULL_Linux_驱动篇(52)linux CAN驱动

CAN 是目前应用非常广泛的现场总线之一&#xff0c;主要应用于汽车电子和工业领域&#xff0c;尤其是汽车领域&#xff0c;汽车上大量的传感器与模块都是通过 CAN 总线连接起来的。 CAN 总线目前是自动化领域发展的热点技术之一&#xff0c;由于其高可靠性&#xff0c; CAN 总线…

酷雷曼精彩亮相CMC 2023中国元宇宙大会,助力云上VR直播

12月23日&#xff0c;2023中关村论坛系列活动——CMC 2023中国元宇宙大会在石景山首钢园冰壶馆成功举办。酷雷曼VR作为元宇宙领域代表企业之一受邀出席会议&#xff0c;分享元宇宙技术研发成果及应用方案&#xff0c;并为大会提供VR直播技术支持。 大咖云集&#xff0c;共商元宇…

数据库进阶教学——主从复制(Ubuntu22.04主+Win10从)

目录 一、概述 二、原理 三、搭建 1、备份数据 2、主库配置Ubuntu22.04 2.1、设置阿里云服务器安全组 2.2、修改配置文件 /etc/my.cnf 2.3、重启MySQL服务 2.4、登录mysql&#xff0c;创建远程连接的账号&#xff0c;并授予主从复制权限 2.5、通过指令&#xff0c;查…

进程终结之道:kill与pskill的神奇战斗

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 进程终结之道&#xff1a;kill与pskill的神奇战斗 前言基本用法kill命令&#xff1a;基础语法&#xff1a;选项&#xff1a;示例&#xff1a; pskill命令&#xff1a;基础语法&#xff1a;选项&#x…

kbdnecnt.DLL文件缺失,软件或游戏无法启动运行,怎样快速修复?

不少人都在问“kbdnecnt.DLL文件”是什么&#xff1f;为什么电脑总是报错提示说“kbdnecnt.DLL文件缺失&#xff0c;软件无法启动”&#xff1f; 首先&#xff0c;先来了解“kbdnecnt.DLL文件”是什么&#xff1f; kbdnecnt.DLL是Windows操作系统中的一个动态链接库文件&#…

JOSEF约瑟 断电延时继电器 SRTD-220VDC-2H2D 导轨安装

系列型号&#xff1a; SRTD-24VDC-1H1D断电延时继电器&#xff1b;SRTD-110VDC-1H1D断电延时继电器&#xff1b; SRTD-220VDC-1H1D断电延时继电器&#xff1b;SRTD-110VAC-1H1D断电延时继电器&#xff1b; SRTD-220VAC-1H1D断电延时继电器&#xff1b;SRTD-24VDC-2H断电延时继电…

考PMP真的有用吗?看完立马不犹豫了!

其实我个人觉得在你考证之前&#xff0c;值得反思的是&#xff1a;为什么要考这个证书&#xff1f;是因为公司需要&#xff1f;个人职业发展&#xff1f;还是受到新闻报道或广告的影响&#xff0c;觉得PMP证书有价值&#xff0c;只是想了解一下。这样就会导致很多人会说&#x…

golang并发编程-channel

在golang 并发编程里&#xff0c;经常会听到一句话&#xff1a;不要通过共享内存进行通信&#xff0c;通过通信来共享内存。下面我们会介绍下channel, 通过源码的方式去了解channel是怎么工作的。 基本结构 流程图 代码解读 type hchan struct {qcount uint // …

HubSpot邮件营销好用吗?

HubSpot的邮件营销工具通常被认为是非常强大和易用的&#xff0c;但用户的体验和满意度会因个人需求和经验而异。以下是一些通常与HubSpot邮件营销工具相关的优势&#xff1a; 全面的功能&#xff1a; HubSpot的邮件营销工具提供了丰富的功能&#xff0c;包括电子邮件自动化、…

西门子消防主机电源维修控制器BCB8005

火灾自动报警部分主要由各个部位的火灾探测器及手动报警按钮、消火栓按钮等设备组成。火灾探测器就如同火灾报警系统的“眼睛”,通过各自的火灾探测器采集现场的火警信号&#xff0c;实时传送给火灾报警控制器&#xff0c;火灾报警控制器进行各种智能的分析判断后发出火灾报警&…