JSP WEB开发(二) JavaBean
目录
JavaBean
JavaBean特征
JavaBean的标签
JavaBean 的范围
标签
JavaBean
JavaBean 是一种符合某些命名和设计规范的 Java 类,它是一种可重用组件技术,主要用于封装数据,执行负责的计算任务,封装事务逻辑等。JavaBean 的实质是一种具有特定结构和行为的 Java 类,它遵循一定的规则和约定,使得它们易于编写、测试和使用。
JavaBean 必须满足以下几个条件:
- 必须有一个无参构造函数;
- 属性私有化,对外提供公共的 getter 和 setter 方法;
- 遵循驼峰命名法,例如:name -> getName(), setName()
简单示例
public class Student {private String name;private int age;public Student() {}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;}
}
封装了一个学生的姓名和年龄信息:在这个例子中,Student 类有两个属性:name 和 age,分别对应着姓名和年龄。这两个属性都是私有的,对外提供了对应的 getter 和 setter 方法,以供外部程序读取和设置这些属性的值。
JavaBean 还可以通过反射机制动态地访问和修改其属性,这使得它们在 Web 开发中非常有用。例如,你可以将一个 JavaBean 对象绑定到一个 HTML 表单,当用户提交表单时,自动将表单的数据填充到 JavaBean 中,然后将 JavaBean 发送到服务器进行处理。
JavaBean 还可以被序列化,这意味着它们可以被保存到磁盘或在网络上传输。这对于构建分布式应用程序非常有用。
JavaBean特征
JavaBean是一个public类
一定使用了package语句进行打包,并且声明的打包路径非sun公司声明使用的路径。
有一个无参数的构造方法
属性一般是私有的(即用private修饰),以保证数据的完整性和封装性
对属性值的获取有相应的getXxx()方法,并且此方法是公有的(即用public修饰)若要获取的属性为boolean类型则可以使用isXxx()方法
对属性值的设置有相应的setXxx()方法,并且此方法也是公有的(即用public修饰)
JavaBean的标签
在 JSP 中,我们可以使用三个标签来操作 JavaBean:<jsp:useBean>、<jsp:setProperty> 和 <jsp:getProperty>
<jsp:useBean> 标签:这个标签用于在网页中创建一个 Bean 对象。它可以在页面中查找已经存在的 Bean 对象,如果没有找到则创建一个新的 Bean 对象。
<jsp:useBean id="myBean" scope="request" class="com.example.MyBean"/>
id参数指定了 Bean 的名称,scope参数指定了 Bean 的作用域,class参数指定了 Bean 的类名。
<jsp:setProperty> 标签:这个标签用于为 Bean 对象中的属性赋值。
<jsp:setProperty name="myBean" property="*" />
name参数指定了 Bean 的名称,property参数指定了要设置的属性名。星号*表示设置所有的属性。
<jsp:getProperty> 标签:这个标签用于获取 Bean 对象中属性的值。
<jsp:getProperty name="myBean" property="propertyName"/>
name参数指定了 Bean 的名称,property参数指定了要获取的属性名。这三个标签的主要作用是在 JSP 页面中创建并使用 JavaBean 对象。
这三个标签主要作用是在JSP页面中创建并使用JavaBean对象,然后在“MVC”模式下的Web项目开发中,JavaBean主要是在Servlet中创建并使用。
// 在 Servlet 中创建并设置 JavaBean
MyBean myBean = new MyBean();
myBean.setName("Tom");
myBean.setAge(18);
request.setAttribute("myBean", myBean);// 在 JSP 页面中使用 JavaBean
<jsp:useBean id="myBean" scope="request" class="com.example.MyBean"/>
<jsp:setProperty name="myBean" property="*" />
<p>姓名:${myBean.name}</p>
<p>年龄:${myBean.age}</p>
我们在 Servlet 中创建了一个名为
myBean的 JavaBean 对象,并设置了它的属性。然后我们将这个对象放在了请求中。在 JSP 页面中,我们使用<jsp:useBean>标签找到了这个对象,然后使用<jsp:setProperty>标签设置了它的属性,最后使用 EL 表达式${}获取了它的属性值。
JavaBean 的范围
JavaBean 的范围是指在哪个范围内有效,主要有四种:page、request、session 和 application。
- Page:表示当前页面,即该 JavaBean 只在当前页面有效,一旦离开当前页面,该 JavaBean 就会被销毁。
- Request:表示一次请求,即该 JavaBean 只在当前请求有效,一旦请求结束,该 JavaBean 就会被销毁。
- Session:表示一次会话,即该 JavaBean 只在当前会话有效,一旦会话结束,该 JavaBean 就会被销毁。
- Application:表示整个应用,即该 JavaBean 在整个应用中都有效,直到应用关闭才会被销毁。
<jsp:useBean id="logBean" scope="page" class="mypack.LogBean" />
建了一个名为
logBean的 JavaBean,它的作用域是page,也就是说,这个 JavaBean 只在当前页面有效。如果你想要让这个 JavaBean 在整个应用中都有效,你可以将scope设置为application:你也可以将scope设置为request或者session,这样 JavaBean 就会在请求或者会话中有效。
需要注意的是,不同的作用域会影响到 JavaBean 的生命周期。一般来说,如果 JavaBean 不需要在整个应用中都有效,那么最好将其作用域设置为最小的作用域,这样可以减少内存的消耗。
另外,JavaBean 的作用域也会影响它的可见性。例如,如果一个 JavaBean 的作用域是 page,那么只有当前页面才能看到它;如果它的作用域是 request,那么所有在同一个请求中的页面都可以看到它;如果它的作用域是 session,那么所有在同一会话中的页面都可以看到它;如果它的作用域是 application,那么所有页面都可以看到它。
标签
<jsp:useBean>
标签是用来创建一个 Bean 对象的
<jsp:useBean id="beanname" class="package.class" [scope="page|request|session|application"] />
这个标签创建了一个
package.class类的一个对象,对象的名字是beanname。scope参数指定了该对象的作用范围,可能的取值有四个:page、request、session、application。
eg.
<jsp:useBean id="myBean" scope="request" class="bean.SampleBean" />
在这个例子中,我们创建了一个名为
myBean的 Bean 对象,它的作用域是request,也就是说,这个 Bean 对象只在当前请求有效。
<jsp:setProperty>
标签用于设置一个Bean对象的属性。这个标签通常与 <jsp:useBean> 标签一起使用,后者用来创建或查找一个Bean实例
<jsp:setProperty name="beanName" property="propertyName"value="propertyValue" />
name: 指定要操作的Bean的名字。property: 指定要为该Bean的哪个属性赋值。value: 指定给属性赋的值。
eg.假设我们有一个名为 "myBean" 的Bean,它有一个名为 "sample" 的属性。我们可以用以下方式来设置这个属性
<jsp:useBean id="myBean" class="com.example.MyBean" />
...
<jsp:setProperty name="myBean" property="sample" value="Hello, JSP!" />
首先通过
<jsp:useBean>创建了一个名为 "myBean" 的 Bean 实例,并指定了它的类是 "com.example.MyBean"。然后,我们使用<jsp:setProperty>来设置 "myBean" 的 "sample" 属性的值为 "Hello, JSP!"
注意:<jsp:setProperty> 只能对简单类型的属性(如 String、int 等)进行赋值。如果需要为复杂类型(如自定义类)的属性赋值,则需要使用 <jsp:setProperty> 标签和 <jsp:getProperty> 标签配合使用。
<jsp:getProperty>
是 JavaServer Pages (JSP) 中的一个标签,用于从页面中获取已存在的 bean 对象的属性值,并将其显示到页面上。
<jsp:getProperty name="beanName" property="propertyName"/>
name: 指定要获取其属性值的 bean 名称。property: 指定要获取的 bean 属性名称。
eg.假设我们有一个名为 "myBean" 的 bean,它有一个名为 "sample" 的属性。我们可以使用 <jsp:getProperty> 标签将此属性的值输出到页面上
<jsp:useBean id="myBean" class="com.example.MyBean" />
...
<jsp:getProperty name="myBean" property="sample"/>
通过
<jsp:useBean>创建了一个名为 "myBean" 的 bean 实例,并指定了它的类是 "com.example.MyBean"。然后,我们使用<jsp:getProperty>将 "myBean" 的 "sample" 属性的值输出到页面上。
<jsp:setProperty>
可以用来设置一个Bean对象的属性,但这次是从传入参数(通常是来自表单提交的数据)中取值。这种情况下,param 属性被用来指定传入参数的名字。
<jsp:setProperty name="beanName" property="propertyName"param="paramName" />
name: 指定要操作的Bean的名字。property: 指定要为该Bean的哪个属性赋值。param: 指定传入参数的名字。
eg. 假设我们有一个名为 "myBean" 的Bean,它有一个名为 "sample" 的属性。并且,我们在一个表单中有一个名为 "sample" 的输入字段。我们可以这样设置 "myBean" 的 "sample" 属性:
<form action="your_jsp_page.jsp"><input type="text" name="sample" /><input type="submit" value="Submit" />
</form>
...
<jsp:useBean id="myBean" class="com.example.MyBean" />
...
<jsp:setProperty name="myBean" property="sample" param="sample" />
在这个例子中,当用户提交表单后,"sample" 输入框中的值会被传递到 "your_jsp_page.jsp" 页面。然后,我们使用
<jsp:setProperty>来设置 "myBean" 的 "sample" 属性的值为用户输入的值。
<jsp:setProperty> 标签也可以一次性为多个Bean对象的属性赋值,而不需要一一列出每个属性。在这种情况下,property 属性被设为 "*" 表示匹配所有传入参数。
<jsp:setProperty name="beanName" property="*" />
name: 指定要操作的Bean的名字。
eg,假设我们有一个名为 "myBean" 的Bean,它有多个属性。而且,在一个表单中有多个输入字段,它们的名字分别对应了 "myBean" 的各个属性名。我们可以这样设置 "myBean" 的属性:
<form action="your_jsp_page.jsp"><input type="text" name="name" /><input type="text" name="age" /><input type="text" name="email" /><input type="submit" value="Submit" />
</form>
...
<jsp:useBean id="myBean" class="com.example.MyBean" />
...
<jsp:setProperty name="myBean" property="*" />
在这个例子中,当用户提交表单后,"your_jsp_page.jsp" 页面会接收到 "name", "age", 和 "email" 这三个参数。然后,我们使用
<jsp:setProperty property="*">来设置 "myBean" 的相应属性的值为用户输入的值。
相关文章:
JSP WEB开发(二) JavaBean
目录 JavaBean JavaBean特征 JavaBean的标签 JavaBean 的范围 标签 JavaBean JavaBean 是一种符合某些命名和设计规范的 Java 类,它是一种可重用组件技术,主要用于封装数据,执行负责的计算任务,封装事务逻辑等。JavaBean 的实…...
G2.【C语言】EasyX绘制颜色窗口
1.窗口 窗口:宽度*高度(单位都是像素) #include <stdio.h> #include <easyx.h> int main() {initgraph(640, 480);getchar();return 0; } 640是宽,480是高 2.操作窗口的三个按钮 #include <stdio.h> #incl…...
异构计算技术与DTK异构开发套件
异构计算技术与DTK异构开发套件 费林分类法:SISD SIMD MISD MIMD 指令流I和数据流D MIMD不同存储结构: UMA均匀存储访问模型NUMA非均匀存储访问模型Cluster集群 现在以Cluster为主 DTK异构开发套件 生态结构 异构并行编程模型是什么 HIPÿ…...
数据结构之“栈”(全方位认识)
🌹个人主页🌹:喜欢草莓熊的bear 🌹专栏🌹:数据结构 前言 栈是一种数据结构,具有" 后进先出 "的特点 或者也可见说是 ” 先进后出 “。大家一起加油吧冲冲冲!! …...
vue项目打包部署后 浏览器自动清除缓存问题(解决方法)
vue打包部署后 浏览器缓存问题,导致控制台报错ChunkLoadError: Loading chunk failed的解决方案 一、报错如下: 每次build打包部署到服务器上时,偶尔会出现前端资源文件不能及时更新到最新,浏览器存在缓存问题,这时在…...
解决vscode配置C++编译带有中文名称报错问题
在新电脑上安装vscode运行带有中文路径和中文名称的C代码时遇到报错 根据别人的教程将laugh.json文件中"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",改成了"program": "${fileDirname}\\output\\test.exe",&#x…...
A61 STM32_HAL库函数 之 TIM扩展驱动 -- C -- 所有函数的介绍及使用
A61 STM32_HAL库函数 之 TIM扩展驱动 -- C -- 所有函数的介绍及使用 1 该驱动函数预览1.24 HAL_TIMEx_OnePulseN_Stop1.25 HAL_TIMEx_OnePulseN_Start_IT1.26 HAL_TIMEx_OnePulseN_Stop_IT1.27 HAL_TIMEx_ConfigCommutationEvent1.28 HAL_TIMEx_ConfigCommutationEvent_IT1.29 …...
使用瀚高数据库开发管理工具进行数据的备份与恢复---国产瀚高数据库工作笔记008
使用瀚高数据库,备份 恢复数据 然后找到对应的目录 其实就是hgdbdeveloper,瀚高的数据库开发管理工具 对应的包中有个dbclient 这个目录,选中这个目录以后,就可以了,然后 在对应的数据库,比如 data_middle 中,选中 某个模式,比如bigdata_huiju 然后右键进行,点击 恢复,然…...
css 选择器汇总
目录 所有选择器伪类选择器 所有选择器 选择器用法id选择器#myid类选择器.myclassname标签选择器div,h1,p相邻选择器h1p子选择器ul > li后代选择器li a通配符选择器*属性选择器a[rel“external”]伪类选择器a:hover, li:nth-child 伪类选择器 在CSS3中新增了一个结构伪类选…...
My Greedy Algorithm(贪心算法)之路(一)
引子:我们之前,其实也遇到过贪心算法,0,1背包就是一个典型的贪心算法问题,那今天我就来开始my-Greedy Algorithm的道路。 什么是贪心算法? 我愿称贪心算法为贪婪鼠目寸光,贪心算法(Greedy Alg…...
Win11 Python3.10 安装pytorch3d
0,背景 Python3.10、cuda 11.7、pytorch 2.0.1 阅读【深度学习】【三维重建】windows10环境配置PyTorch3d详细教程-CSDN博客 1,解决方法 本来想尝试,结果发现CUB安装配置对照表里没有cuda 11.7对应的版本,不敢轻举妄动&#x…...
kotlin 中 string array 怎么表示
在 Kotlin 中,字符串数组可以使用 Array<String> 类型表示。你可以通过多种方式来创建和初始化字符串数组。以下是几种常见的方法: 使用 arrayOf 函数: val stringArray arrayOf("Hello", "World", "Kotli…...
ffmpeg使用bmp编码器把bgr24编码为bmp图像
version #define LIBAVCODEC_VERSION_MAJOR 60 #define LIBAVCODEC_VERSION_MINOR 15 #define LIBAVCODEC_VERSION_MICRO 100 note 不使用AVOutputFormat code void CFfmpegOps::EncodeBGR24ToBMP(const char* infile, const char* width_str, const char* height_str…...
基于YOLOv10+YOLOP+PYQT的可视化系统,实现多类别目标检测+可行驶区域分割+车道线分割【附代码】
文章目录 前言视频效果必要环境一、代码结构1、 训练参数解析2、 核心代码解析1.初始化Detector类2. torch.no_grad()3. 复制输入图像并初始化计数器4. 调用YOLOv10模型进行目标检测5. 提取检测结果信息6. 遍历检测结果并在图像上绘制边界框和标签7. 准备输入图像以适应End-to-…...
计算机网络之令牌总线
上文内容:什么是以太网 1.令牌总线工作原理 在总线的基础上,通过在网络结点之间有序地传递令牌来分配各结点对共享型总线的访问权利,形成闭合的逻辑环路。 完全采用半双工的操作方式,只有获得令牌的结点才能发送信息ÿ…...
策略模式的应用
前言 系统有一个需求就是采购员审批注册供应商的信息时,会生成一个供应商的账号,此时需要发送供应商的账号信息(账号、密码)到注册填写的邮箱中,通知供应商账号信息,当时很快就写好了一个工具类࿰…...
如何使用uer做多分类任务
如何使用uer做多分类任务 语料集下载 找到这里点击即可 里面是这有json文件的 因此我们对此要做一些处理,将其转为tsv格式 # -*- coding: utf-8 -*- import json import csv import chardet# 检测文件编码 def detect_encoding(file_path):with open(file_path,…...
【HICE】转发服务器实验
1.在本地主机上操作 2.在客户端操作设置主机的IP地址为dns 3.测试,客户机是否能ping通...
MATLAB-分类CPO-RF-Adaboost冠豪猪优化器(CPO)优化RF随机森林结合Adaboost分类预测(二分类及多分类)
MATLAB-分类CPO-RF-Adaboost冠豪猪优化器(CPO)优化RF随机森林结合Adaboost分类预测(二分类及多分类) 分类CPO-RF-Adaboost冠豪猪优化器(CPO)优化RF随机森林结合Adaboost分类预测(二分类及多分类…...
绝区贰--及时优化降低 LLM 成本和延迟
前言 大型语言模型 (LLM) 为各行各业带来了变革性功能,让用户能够利用尖端的自然语言处理技术处理各种应用。然而,这些强大的 AI 系统的便利性是有代价的 — 确实如此。随着 LLM 变得越来越普及,其计算成本和延迟可能会迅速增加,…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...
