jsp中的javabean

2023-05-16

一、JavaBean简介

    JavaBean是一种特殊的Java类,它遵从一定的设计模式,
        开发工具和其他组件可以根据这种模式来调用JavaBean。
    JSP中使用的JavaBean非常简单,这种简单JavaBean的设计,具有如下两个特点:
        (1)用作JavaBean的类必须具有一个公共的、无参数的构造方法,
            这个方法可以是通过编译器自动产生的那个默认构造方法。
        (2)JavaBean的属性通过遵循某种规范的公共方法暴露给外部,
            外部的其他程序可以通过Java的反射API来查找JavaBean中
            遵循这一规范的方法,从而发现JavaBean中的属性。

二、JavaBean的属性

    JavaBean的属性简介
        JavaBean的属性与普通Java类的属性的概念不一样,
            JavaBean的属性是以方法定义的形式出现的。
            用于对属性赋值的方法称为属性修改器或setter方法;
            用于读取属性值的方法称为属性访问器或getter方法。
        属性修改器必须以小写的set前缀开始,后跟属性名,且属性名的第一个字母要改为大写。
        属性访问器必须以小写的get前缀开始,后跟属性名,且属性名的第一个字母要改为大写。
        JavaBean的属性名是根据setter方法与getter方法的名称来生成的,
            setter方法或getter方法中除去前缀“set”和“get”后的部分即为属性名,
            但属性名的首字母必须小写。
            如果一个属性只有访问器,则该属性为只读属性;
            如果一个属性只有修改器,则该属性为只写属性,只写属性比较少见;
            如果一个属性既有修改器,又有访问器,则该属性为读写属性,读写属性最为常见。
        根据属性的复杂性,可以将JavaBean的属性分为简单属性和Indexed属性。
    简单属性
        简单属性就是非数组类型的属性。
        由于属性修改器仅仅是用于设置属性的值,而不用返回任何结果,所以其返回值类型是void;
            简单属性的修改器必须接受一个参数,参数类型由属性的特性决定,可以是任意类型的。
        简单属性的访问器仅仅是用于返回属性的值,它不接受任何参数,但它要返回一个值,
            返回值的类型必须与修改器所接受的参数类型一致。
        如果属性的类型是一个布尔型的逻辑值,不管访问器返回的类型是boolean(基本数据类型)
            还是Boolean(包装数据类型),访问器名称都可以不使用get为前缀,
            而是以is代替。如果JavaBean中同时存在getXxx和isXxx方法,
            那么xxx属性的访问器为isXxx方法。
    Indexed属性
        Indexed属性就是数组类型的属性。
        Indexed属性的修改器有两种重载形式:
            一个是对整个数组进行赋值;另外一个则是对数组中的每个元素进行赋值。
        Indexed属性的访问器也有两种重载形式:
            一个用于返回整个数组;另外一个则是用于返回数组中的单个元素。

三、JavaBean在JSP中的应用

    在JSP中如何使用JavaBean
        如果把JSP页面中的业务逻辑代码封装到一个JavaBean中,JSP页面再调用JavaBean,
            则可提供一种分离显示内容和业务逻辑的简单方式,
            并且有利于软件的组织化、模块化。
        为了能在JSP页面中集成JavaBean组件和支持JavaBean的功能,
            JSP规范专门定义了三个JSP标签:<jsp:useBean>、<jsp:setProperty>
            和<jsp:getProperty>,它们分别用于创建和查找JavaBean的实例对象,
            设置JavaBean对象的属性,读取JavaBean对象的属性。
        对于JSP页面来说,只要一个类具有一个公共的、
            无参数的构造方法,就可以把这个类当做JavaBean来使用。
        如果类中有不接受任何参数的getter方法或只接受一个参数的setter方法,
            就可以把前缀“get”或“set”后面的部分当作一个属性名来引用。
    <jsp:useBean>标签
        <jsp:useBean>标签用于在某个指定的
            域范围(application、session、request、pageContext等)中
            查找一个指定名称的JavaBean对象,
            如果存在则直接返回该JavaBean对象的引用,
            如果不存在则实例化一个新的JavaBean对象,
            并将它按指定的名称存储在指定的域范围中。
            <jsp:useBean>标签的语法定义如下:
            <jsp:useBean
                id="beanInstanceName"
                scope="page | request | session | application"
                {
                    class="package.class" |
                    type="package.class" |
                    class="package.class" type="package.class" |
                    beanName="{package.class | <%=expression %>}" type="package.class"
                }
            />
        其中,class属性用于指定JavaBean的完整类名,JSP引擎将使用这个类名
            来创建JavaBean的实例对象或作为查找到的JavaBean对象的类型;
            id属性用于指定JavaBean实例对象的引用名称和其存储在域范围中的名称;
            scope属性用于指定JavaBean实例对象所存储的域范围,其取值只能是page、
                request、session和application四个值中的任何一个,其默认值为page。
            type属性用于指定JavaBean实例对象的引用变量的类型,
                它必须是JavaBean对象的类名称、超类名称和所实现的接口名称中的一个。
                默认值为class属性的设置值。
            beanName属性用于指定JavaBean的名称,这个名称不是JavaBean实例对象的
                引用名称,而是JavaBeans规范中定义的一种名称。
        <jsp:useBean>标签首先在指定的域范围中查找指定名称的JavaBean实例对象,
            如果能找到,这时候只需要为<jsp:useBean>标签设置type属性或class属性。
            如果在指定的域范围中查找不到指定名称的JavaBean实例对象,
                那么必须设置class属性或beanName属性来指定产生JavaBean实例对象的
                类名或资源名,class属性和beanName属性不能同时设置。
            因为type属性的默认值为class属性的设置值,所以设置class属性时
                可以省略type属性,而设置beanName属性时必须同时设置type属性。
        <jsp:useBean>标签按容器元素的格式进行使用:
            <jsp:useBean ...>
                Body
            </jsp:useBean>
            这种格式被称之为带标签体的<jsp:useBean>标签,
                Body部分的内容只在<jsp:useBean>标签创建JavaBean的实例对象时才执行。
    <jsp:setProperty>标签
        <jsp:setProperty>标签用于设置JavaBean对象的属性,
            也就是调用JavaBean对象的setter方法,其使用语法如下:
            <jsp:setProperty name="beanInstanceName"
                {
                    property="propertyName" value="{string | <%=expression %>}" |
                    property="propertyName" [ param="parameterName" ] |
                    property="*"
                }
            />
            name属性是必不可少的,它用于指定JavaBean实例对象的名称,
                其值应与<jsp:useBean>标签的id属性值相同。
            property属性是必不可少的,它用于指定JavaBean实例对象的属性名。
            value属性是可选的,它用于指定JavaBean实例对象的某个属性的值。
                value属性的设置值可以是一个字符串,也可以是一个表达式。
                如果value属性的设置值是字符串,
                    那么它将被自动转换成所要设置的JavaBean属性的类型。
                如果value属性的设置值是一个表达式,
                    那么该表达式的结果类型必须与所要设置的JavaBean属性的类型一致。
            param属性是可选的,它用于将一个请求参数的值
                赋值给JavaBean实例对象的某个属性,它可以将作为字符串类型
                返回的请求参数值自动转换成要设置的JavaBean属性的类型。
                如果当前请求消息中没有param属性所指定的请求参数,
                那么<jsp:setProperty>标签什么事情也不做。
            value和param属性不能同时使用,只能使用其中任意一个。
            如果<jsp:setProperty>标签的param属性和value属性都没有设置,则表示
                将当前要设置的JavaBean实例对象的属性设置为与该属性同名的请求参数值。
            property="*",
                表示将请求消息中的参数逐一与JavaBean实例对象中的属性进行比较,
                如果能找到同名的属性,则将该参数值赋给该属性。
        在<jsp:useBean>标签后面除了可以使用<jsp:setProperty>标签
            设置JavaBean的属性外,还可以在JSP脚本片断中调用id属性
            所命名的JavaBean实例对象的setter方法来设置其属性。
    <jsp:getProperty>标签
        <jsp:getProperty>标签用于读取JavaBean对象的属性,
            也就是调用JavaBean对象的getter方法,
            然后将读取的属性值转换成字符串后插入进输出的响应正文中,其使用语法如下:
            <jsp:getProperty name="beanInstanceName" property="PropertyName" />
            其中,name属性用于指定JavaBean实例对象的名称,
            其值应与<jsp:getProperty>标签的id属性值相同,
            property属性用于指定JavaBean实例对象的属性名。
            如果一个JavaBean实例对象的某个属性的值为null,那么,
            使用<jsp:getProperty>标签输出该属性的结果将是一个内容为“null”的字符串。
    使用JavaBean的注意事项
        1、因为JavaBean要被JSP页面调用,所以,
            JavaBean应放置在JSP页面的类装载器或其父级类装载器所能装载的目录里,
            通常放置于Web应用程序下的WEB-INF/classes目录里。
        2、有些版本的Tomcat不会自动重新加载修改过的JavaBean,
            如果JSP页面加载JavaBean以后又修改和重新编译了JavaBean程序,
            那么需要修改JSP页面或者重新启动Tomcat,
            否则,JSP页面使用的仍然是修改前的JavaBean对象。
        3、由于带包名的类无法调用不带包名的类,
            且JSP页面所翻译成的Servlet程序都带有包名,
            所以,JavaBean必须带有包名,不能用默认包名。
        4、在选择存储JavaBean的域范围时,
            如果使用request域能够满足需求的话,则不要使用Session域。

四、JSP开发模式

    MVC设计模式
        MVC(模型-视图-控制器)。
            模型(Model)部分负责管理程序的业务逻辑,
            视图(View)部分负责显示界面,
            控制器(Controller)部分则负责与用户进行交互(接收请求和选择响应视图)。
        采用MVC模式构建的应用系统具有极高的可维护性、可扩展性、可移植性和组件可复用性。
    JSP开发模式
        Sun在早期的JSP规范中定义了两种使用JSP的模式:
            模式一主要采用JSP+JavaBean技术
            模式二主要采用Servlet+JSP+JavaBean技术
    用模式一实现用户登录功能
    用模式二实现用户注册功能
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jsp中的javabean 的相关文章

随机推荐

  • 部署yolov5环境并编译cv_bridge(Jetson Xavier NX)

    1 安装anaconda 在浏览器中找到anaconda官网并下载相关文件 使用以下命令进行安装 xff1a bash Anaconda3 2022 05 Linux aarch64 sh 安装完成后 xff0c 重新打开中断 xff0c
  • 九、PyQt5多线程编程

    xff08 三 xff09 多线程编程 如果一次只完成一件事情 xff0c 那是一个不错的想法 xff0c 但事实上很多事情都是同时进行的 xff0c 所以在Python中为了模拟这种状态 xff0c 引入了线程机制 xff0c 简单地说
  • int和Integer的区别

    int和Integer的区别 1 Integer是int的包装类 xff0c int则是java的一种基本数据类型 2 Integer变量必须实例化后才能使用 xff0c 而int变量不需要 3 Integer实际是对象的引用 xff0c
  • 一起做激光SLAM[六]isam于SLAM位姿因子图优化的使用

    本节目标 xff1a 学习gtsam与isam在二位位姿pose2和三维位姿pose3上的使用 xff0c 并将isam用于位姿的因子图优化 预期效果 xff1a 将ICP匹配带来的瞬间位移变成对之前累积误差的消除 蓝色ICP无图优化 xf
  • java.lang.ClassNotFoundException问题的解决

    作者 xff1a 朱金灿 来源 xff1a https blog csdn net clever101 调试运行一个java项目出现错误 xff0c 错误信息如下 xff1a 严重 Error configuring application
  • Python 获取当前路径(文件及所在文件夹,正斜线)

    参考博客 xff1a http www cnblogs com wind wang p 5822192 html 更多路径读取请参照上述博客 xff08 使用Python 2 x版本 xff09 xff0c 这里只挑出个人认为最直接 常用的
  • 设置 Android Studio 显示 Local Changes 标签页

    参考 xff1a 2020版本idea version control 不见了 解决办法 新版的 jetbrains idea 的 Git 窗口就是之前的 Version Control 窗口 xff0c 但是默认不显示 Local Cha
  • 【C++】C++11 vector 之 emplace_back() 使用场景简单剖析

    emplace 关键字是 C 43 43 11 的一个新特性 emplace back 和 push abck 的区别是 xff1a push back 在向 vector 尾部添加一个元素时 xff0c 首先会创建一个临时对象 xff0c
  • 【C++】nomember named ‘to_string‘ in namespace ‘std’

    在使用 Android Studio 编写 C 43 43 代码时 xff0c 出现如下错误 xff1a nomember named 39 to string 39 in namespace 39 std 39 原因 xff1a 这是因为
  • 【CMake】Make 命令无法正常执行

    问题 在 Linux 系统上使用 CMakeLists txt 编译 C 43 43 项目时 xff0c 执行 cmake 命令之后 xff0c 再执行 make 命令出现了 make 命令不生效的问题 具体的现象是 xff1a cmake
  • 【ProtoBuf】ProtoBuf 通过 proto 文件生成 cc/h 文件

    参考 xff1a protobuf ProtoBuf 通过 proto 文件生成 cc h 文件的步骤如下 xff08 Linux 下 xff09 xff1a 先通过 protobuf 源文件编译出 protoc 可执行文件 span cl
  • 【C++】C++ 单例模式总结(5种单例实现方法)

    本文对 C 43 43 的单例模式进行简单介绍和实现 参考 xff1a C 43 43 线程安全的单例模式总结 xff08 强烈建议阅读原文 xff0c 本文相当于做了总结 xff0c 留作学习 xff0c 并添加了一种新的单例方法 std
  • 【C++】epoll + socket 网络编程实现一个简单的 server

    文章目录 服务端客户端 本着学习 epoll 的态度 xff0c 本文使用 epoll 43 socket 实现了一个简单的 server xff0c 可以接收多个客户端的连接并与之通信 话不多说 xff0c 直接上代码 xff0c 完整的
  • 【已解决】Mac 无法使用 GDB 进行调试的问题

    问题 Mac 初次使用 GDB 进行调试时 xff0c 会出现 xff1a gdb run Starting program usr local bin fabnacci Unable to find Mach task port for
  • 【Git】解决 git pull 提示 Permission denied (publickey) 的问题

    问题 在使用 ssh keygen 创建 github 秘钥时没有使用默认文件 xff0c 而是自定义了 xxx github 的秘钥文件 xff0c 然后将公钥添加到 github 上 之后发现每次 Mac 开机后使用 git pull
  • 【保研复习】数据结构复习笔记

    基于王道数据结构进行的保研面试复习 文章目录 数据结构绪论数据结构1 逻辑结构线性结构线性表栈队列 非线性结构树图集合 xff08 无序 xff09 2 存储结构顺序存储链式存储索引存储散列存储 3 数据的运算 算法特点效率度量时间复杂度空
  • MAVLINK 请求参数和接收参数

    if decodeState 61 61 1 之后是放在mavlink消息解析后面 请求返回参数配置列表 void MavDebug on pushButton 3 clicked mavlink message t msg mavlink
  • JSP与servlet的区别

    一 了解Servlet的概念 Servlet定义 xff1a Servlet是基于Java技术的Web组件 xff0c 由容器管理并产生动态的内容 Servlet引擎作为WEB服务器的扩展提供支持Servlet的功能 Servlet与客户端
  • CSS简单的图片居中

    图片的居中显示 css 有很多方法 xff0c 但在很多情况下有的方法无效 xff0c 这是件很头疼的事情 xff0c 比如 一般设置图片属性 text align center 水平居中 xff0c 但这个方法经常无效 xff0c 很多前
  • jsp中的javabean

    一 JavaBean简介 JavaBean是一种特殊的Java类 xff0c 它遵从一定的设计模式 xff0c 开发工具和其他组件可以根据这种模式来调用JavaBean JSP中使用的JavaBean非常简单 xff0c 这种简单JavaB