JSP WEB开发(二) JavaBean

目录

JavaBean

JavaBean特征

JavaBean的标签

 JavaBean 的范围

标签

JavaBean

JavaBean 是一种符合某些命名和设计规范的 Java 类,它是一种可重用组件技术,主要用于封装数据,执行负责的计算任务,封装事务逻辑等。JavaBean 的实质是一种具有特定结构和行为的 Java 类,它遵循一定的规则和约定,使得它们易于编写、测试和使用。

JavaBean 必须满足以下几个条件:

  1. 必须有一个无参构造函数;
  2. 属性私有化,对外提供公共的 getter 和 setter 方法;
  3. 遵循驼峰命名法,例如: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。

  1. Page:表示当前页面,即该 JavaBean 只在当前页面有效,一旦离开当前页面,该 JavaBean 就会被销毁。
  2. Request:表示一次请求,即该 JavaBean 只在当前请求有效,一旦请求结束,该 JavaBean 就会被销毁。
  3. Session:表示一次会话,即该 JavaBean 只在当前会话有效,一旦会话结束,该 JavaBean 就会被销毁。
  4. 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 类的一个对象,对象的名字是 beannamescope 参数指定了该对象的作用范围,可能的取值有四个:pagerequestsessionapplication

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" 的相应属性的值为用户输入的值。

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

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

相关文章

智能化客户服务:提升效率与体验的新模式

在数字化浪潮的推动下&#xff0c;客户服务领域正经历着一场深刻的变革。智能化客户服务的兴起&#xff0c;不仅重塑了企业与客户之间的互动方式&#xff0c;更在提升服务效率与增强客户体验方面展现出了巨大潜力。本文将深入探讨智能化客户服务的新模式&#xff0c;分析其如何…

Error in onLoad hook: “SyntaxError: Unexpected token u in JSON at position 0“

1.接收页面报错 Error in onLoad hook: "SyntaxError: Unexpected token u in JSON at position 0" Unexpected token u in JSON at position 0 at JSON.parse (<anonymous>) 2.发送页面 &#xff0c;JSON.stringify(item) &#xff0c;将对象转换为 JSO…

InspireFace-商用级的跨平台开源人脸分析SDK

InspireFace-商用级的跨平台开源人脸分析SDK InspireFaceSDK是由insightface开发的⼀款⼈脸识别软件开发⼯具包&#xff08;SDK&#xff09;。它提供了⼀系列功能&#xff0c;可以满⾜各种应⽤场景下的⼈脸识别需求&#xff0c;包括但不限于闸机、⼈脸⻔禁、⼈脸验证等。 该S…

运维锅总详解CPU

本文从CPU简介、衡量CPU性能指标、单核及多核CPU工作流程、如何平衡 CPU 性能和防止CPU过载、为什么计算密集型任务要选择高频率CPU、超线程技术、CPU历史演进及摩尔定律等方面对CPU进行详细分析。希望对您有所帮助&#xff01; 一、CPU简介 CPU&#xff08;中央处理器&#…

2024年马蹄杯专科组第三场初赛 解题报告 | 珂学家

前言 题解 VP了这场比赛&#xff0c;整体还是偏简单&#xff0c;最难的题是数论相关&#xff0c;算一道思维题。 也看了赛时榜单&#xff0c;除了数论&#xff0c;大模拟和图论题也是拦路虎。 打工人 有趣的一道数学题&#xff0c;有点绕 很像数列和 ∑ i 1 i n i n ∗ …

14-20 Vision Transformer用AI的画笔描绘新世界

概述 毫无疑问,目前最受关注且不断发展的最重要的主题之一是使用人工智能生成图像、视频和文本。大型语言模型 (LLM) 已展示出其在文本生成方面的卓越能力。它们在文本生成方面的许多问题已得到解决。然而,LLM 面临的一个主要挑战是它们有时会产生幻觉反应。 最近推出的新模…

06-6.4.5 关键路径

&#x1f44b; Hi, I’m Beast Cheng &#x1f440; I’m interested in photography, hiking, landscape… &#x1f331; I’m currently learning python, javascript, kotlin… &#x1f4eb; How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以…

Apispec,一个用于生成 OpenAPI(Swagger)规范的 Python 库

目录 01什么是 Apispec&#xff1f; 为什么选择 Apispec&#xff1f; 安装与配置 02Apispec 的基本用法 生成简单的 API 文档 1、创建 Apispec 实例 2、定义 API 路由和视图 3、添加路径到 Apispec 集成 Flask 和 Apispec 1、安装…

Buuctf之SimpleRev做法

首先&#xff0c;查个壳&#xff0c;64bit&#xff0c;那就丢进ida64中进行反编译进来之后&#xff0c;我们进入main函数&#xff0c;发现里面没什么东西&#xff0c;那就shiftf12搜索字符串&#xff0c;找到关键字符串&#xff0c;双击进入然后再选中该字符串&#xff0c;ctrl…

东莞惠州数据中心机房搬迁方案流程

进入21世纪以来&#xff0c;数据中心如雨后春笋般在各行各业兴建起来&#xff0c;经过近20年的投产运行&#xff0c;大量的数据中心机房存在容量不足、机房陈旧、设备老化无法支撑业务发展的情况&#xff0c;产生机房改造、搬迁需求。为安全、可靠地完成机房搬迁&#xff0c;减…

【JVM 的内存模型】

1. JVM内存模型 下图为JVM内存结构模型&#xff1a; 两种执行方式&#xff1a; 解释执行&#xff1a;JVM是由C语言编写的&#xff0c;其中有C解释器&#xff0c;负责先将Java语言解释翻译为C语言。缺点是经过一次JVM翻译&#xff0c;速度慢一点。JIT执行&#xff1a;JIT编译器…

7 动态规划

下面的例子不错&#xff1a; 对于动态规划&#xff0c;能学到不少东西&#xff1b; 你要清楚每一步都在做什么&#xff0c;划分细致就能够拆解清楚&#xff01; xk. - 力扣&#xff08;LeetCode&#xff09; labuladong的算法笔记-动态规划-CSDN博客 动态规划是一种强大的算法…

nginx的正向代理和反向代理以及tomcat

nginx的正向代理和反向代理&#xff1a; 正向代理以及缓存配置&#xff1a; 代理&#xff1a;客户端不再是直接访问服务端&#xff0c;通过代理服务器访问服务端。 正向代理&#xff1a;面向客户端&#xff0c;我们通过代理服务器的IP地址访问目标范围端。 服务端只知道代理…

绝区叁--如何在移动设备上本地运行LLM

随着大型语言模型 (LLM)&#xff08;例如Llama 2和Llama 3&#xff09;不断突破人工智能的界限&#xff0c;它们正在改变我们与周围技术的互动方式。这些模型早已集成到我们的手机中&#xff0c;但到目前为止&#xff0c;它们理解和处理请求的能力还非常有限。然而&#xff0c;…

【C++】模板进阶--保姆级解析(什么是非类型模板参数?什么是模板的特化?模板的特化如何应用?)

目录 一、前言 二、什么是C模板&#xff1f; &#x1f4a6;泛型编程的思想 &#x1f4a6;C模板的分类 三、非类型模板参数 ⚡问题引入⚡ ⚡非类型模板参数的使用⚡ &#x1f525;非类型模板参数的定义 &#x1f525;非类型模板参数的两种类型 &#x1f52…

使用 ESP32-WROOM + DHT11 做个无屏温湿度计

最近梅雨天&#xff0c;有个房间湿度很大&#xff0c;而我需要远程查看温湿度&#xff0c;所以无所谓有没有显示屏&#xff0c;某宝上的温湿度计都是带屏的&#xff0c;如果连WIFI查看温湿度操作也比较麻烦&#xff0c;还需要换电池&#xff0c;实在不能满足我的需求&#xff0…

剖析DeFi交易产品之UniswapV3:交易路由合约

本文首发于公众号&#xff1a;Keegan小钢 SwapRouter 合约封装了面向用户的交易接口&#xff0c;但不再像 UniswapV2Router 一样根据不同交易场景拆分为了那么多函数&#xff0c;UniswapV3 的 SwapRouter 核心就只有 4 个交易函数&#xff1a; exactInputSingle&#xff1a;指…

Vue进阶(四十五)Jest集成指南

文章目录 一、前言二、环境检测三、集成问题汇总四、拓展阅读 一、前言 在前期博文《Vue进阶&#xff08;八十八&#xff09;Jest》中&#xff0c;讲解了Jest基本用法及应用示例。一切顺利的话&#xff0c;按照文档集成应用即可&#xff0c;但是集成过程中遇到的问题可能五花八…

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第55课-芝麻开门(语音 识别 控制3D纪念馆开门 和 关门)

【WEB前端2024】3D智体编程&#xff1a;乔布斯3D纪念馆-第55课-芝麻开门&#xff08;语音识别控制3D纪念馆开门和关门&#xff09; 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtn…

KVM使用命令行添加新磁盘(注:支持热插拔)

1、使用qemu-img创建格式为qcow2的磁盘 [rootkvm ~]# qemu-img create -f qcow2 /var/lib/libvirt/images/test-disk.qcow2 15G 2、显示虚拟机硬盘列表&#xff0c;查看未使用的target [rootkvm ~]# virsh domblklist kvm-client 3、添加硬盘到kvm-client虚拟机中 [rootkvm…