JSP学习笔记(4)-Javabean
按照sun公司的定义,Javabean是一个可重复使用的软件组件,实际上Javabean是一种Java类,通过封装属性和方法成为具有某种功能或处理某个业务的对象,简称Bean,Javabean基于java语言,自然不依赖平台,它具有的特点:
- 可以实现代码的重复利用
- 易编写、易维护、易使用
- 可以在任何安装了Java运行环境的平台上使用,并且不需要重新编译
JSP页面可以将数据的处理过程指派给一个或者几个bean来完成,即JSP页面调用bean完成数据的处理,并将有关处理结果存放在bean中,然后JSP页面负责显示bean中的数据。JSP页面的主要工作是负责显示数据,而不是处理数据。
1.编写JavaBean
Javabean分为可视组件和非可视组件,在JSP中主要使用非可视组件。
Javabean实际上就是一个类,对于编写这个类,有些规则:
- 如果类的成员变量是xxx,为了获取或更改成员变量的值,也就是获取或更改属性,必须提供:getXxx()和setXxx()两个方法。
- 对于boolean类型的成员变量,允许使用is代替get和set
- 类中声明的方法的访问属性必须是public
- 类中的构造方法必须是public,无参的
非可视组件包括了工具Javabean和值Javabean。
- 值JavaBean严格遵循了JavaBean的命名规范,通常用来封装表单数据,作为信息的容器。
- 工具JavaBean可以不遵循JavaBean规范,通常用于封装业务逻辑,数据操作等,例如连接数据库,对数据库进行增、删、改、查和解决中文乱码等操作。工具JavaBean可以实现业务逻辑与页面显示的分离,提高了代码的可读性与易维护性。
Bean的字节码文件目录
我们都知道,一个Java程序要运行,必须先要将其编译成字节码文件,再由JVM解释运行,那么Tomcat该如何找到这个字节码文件呢?
Tomcat提供了特定的文件目录,只要将字节码文件保存到该目录下,Tomcat服务器就能找到并执行。
当前项目目录下:\WEB-INF\classes,根据类编写时包名,在classes下建立相应的目录,把字节码文件放在相应目录下即可。
至于源码目录,设置与否都可以,一般会设置相关目录,方便项目更改,源码存放目录没有什么要求。在eclipse中源码文件一般是在"项目/src"下。
2.创建与使用JavaBean
2.1.使用Bean
JSP页面使用JSP的动作标记useBean来加载使用bean;
useBean标记的语法格式:
<jsp:useBean id="bean的名字(其实就是bean类一个对象)" class="创建bean的字节码(相当于导入要使用的类的字节码文件)" scope="bean的有效范围"/>
或者
<jsp:useBean id="bean的名字(其实就是bean类一个对象)" class="创建bean的字节码(相当于导入要使用的类的字节码文件)" scope="bean的有效范围">
</jsp:useBean>
2.2.Bean的加载原理
JSP页面使用JSP的动作标记useBean来加载一个bean,JSP引擎首先根据useBean给出的bean的id及scope,在一个同步块中查找JSP引擎内置pageContent对象中是否含有这样的bean,如果存在,JSP引擎就分配给用户;如果不存在,就根据class指定的字节码创建一个JSP动作标记useBean要求的bean,并将创建的bean添加到pageContent内置对象中。
画个图看看
2.3.bean的有效范围(生命周期)
scope的取值决定了bean的生命周期,可取的值有page、session、request、applicarion。下面对不同取值说明
- page:只在当前页面有效,直到页面执行完毕。当两个用户同时访问一个JSP页面时,一个用户对自己的bean属性改变不会影响到另一个用户,取值为session、request也是。
- session:在用户访问的Web服务目录的各个页面都有效,知道用户的会话(session)消失。
- request:只在当前页面有效,直到响应结束。bean的request存活时间比page存活时间长,因为JSP引擎认为页面执行完毕后,响应才算结束。
- application:JSP引擎为Web服务目录下所有的JSP页面分配一个共享的bean,当多个用户同时访问一个JSP页面时,任何一个用户对自己bean属性更改都会影响到其他用户。
3.获取和修改Bean属性
3.1.使用getProperty动作标记获取bean的属性值
使用getProperty获取bean的属性值后,会将值用串的形式发送到用户的浏览器。语法如下:
<jsp:getProperty name="bean的id的名字(也就是对象名)" property="bean的属性"/>
或
<jsp:getProperty name="bean的id的名字(也就是对象名)" property="bean的属性">
</jsp:getProperty> 该指令相当于<%=bean.getXxx()%>
3.2.使用setProperty动作标记设置bean的属性值
(1)将bean属性的值设置成一个表达式的值或字符串
<!--将bean属性的值设置成一个表达式-->
<jsp:setProperty name="bean的id的名字" property="bean的属性" value="<%=表达式%>"/>
<!--将bean属性的值设置成一个字符串-->
<jsp:setProperty name="bean的id的名字" property="bean的属性" value=字符串/>
如果将表达式的值设置为bean属性的值,表达式值的数据类型必须和bean属性的数据类型一致;如果将字符串设置成bean属性,这个字符串会自动转化长bean的属性的类型。
Java将字符串转化成其他数据类型的方法:
- 转化成int:Integer.parseInt(String s);
- 转化成long:Long.parseLong(String s);
- 转化成float:Float.parseFloat(String s);
- 转化成double:Double.parseDouble(String s);
这些方法都可能会发生NumberFormatException异常。
(2)通过HTTP表单的参数的值来设置bean的相应属性的值
- 用HTTP表单的所有参数的值设置bean相对应的属性值
<jsp:setProperty name="bean的id的名字" property="*"/>
此方法没有具体指定bean属性的值对于表单中哪个参数指定的值,系统会自动匹配,但要求bean属性的名字必须在表单中有名称相同的参数名字相对应,JSP引擎会自动将参数的字符串值转换成bean相对应的属性的值。
- 用HTTP表单的某个参数的值设置bean某个属性值
<jsp:setProperty name="bean的 id的名字 property="属性名" param="参数名"/>
此方法具体指定了bean属性的值将对应表单中哪个参数名指定的值,不要求property给出的bean属性的名字和param给出的参数名一致。
用HTTP表单设置bean属性值时,只有提交了表单,对应的setProperty标记才会被执行。
JSP学习笔记(4)-Javabean的更多相关文章
- JSP 学习笔记1
JSP 学习笔记 JSP是Servlet的一种特殊形式,每个JSP页面就是一个Servlet实例--JSP页面有系统编译成Servlet,Servlet再负责响应用户请求. 1.JSP注释 < ...
- jsp学习笔记:mvc开发模式
jsp学习笔记:mvc开发模式2017-10-12 22:17:33 model(javabe)与view层交互 view(视图层,html.jsp) controller(控制层,处理用户提交的信息 ...
- JSP学习笔记
JSP学习笔记 Jsp网页主要分为Elements与Template Data两部分. Template Data:JSP Container不处理的部分,例如HTML内容 Elements:必须经由 ...
- JSP学习笔记(三):简单的Tomcat Web服务器
注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...
- java web jsp学习笔记--概述-常用语法,指令,动作元素,隐式对象,域对象
JSP学习笔记 1.什么是jsp JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP/Servlet规范.JS ...
- JSP学习笔记2
<JAVA遇见HTML——JSP篇>学习笔记(下) 1.Javabean Javabeans就是符合某种规范的java类,使用Javabeans的好处是[解决代码的重复编写],减少代码冗余 ...
- (转) jsp学习笔记
fromhttp://www.cnblogs.com/tao975/p/4445070.html 什么是JSP JSP的优势 JSP的劣势 JSP与PHP的比较 JSP工作原理 JSP的九大内置对象 ...
- 重温JSP学习笔记--三大指令九大内置对象
最近在温习javaweb的相关基础知识,鉴于我弄丢了记满了整整一本的笔记,决定以后把笔记和一些学习上的心得以及碰到的一些问题统统都放在网上,今天看了一下jsp的相关基础,以下是笔记: JSP三大指令: ...
- 重温JSP学习笔记--与日期数字格式化有关的jstl标签库
上一篇笔记写的主要是JSTL的core标签库,如果想对一些数字或者日期做一些操作或者在网页上显示指定格式的数字或日期,jstl还提供了另一个fmt标签库,这里简单介绍一下: 第一步,导入标签库: &l ...
随机推荐
- Java直接内存与非直接内存性能测试
什么是直接内存与非直接内存 根据官方文档的描述: A byte buffer is either direct or non-direct. Given a direct byte buffer, t ...
- LoadLinked/StoreConditional (LL/SC)
MIPS中LL/SC指令介绍 MIPS32中的LL.SC指令说明 理解MIPS指令集中的ll (load linked) 和 sc 你用ll指令读取一个内存中的数据并存到一个寄存器,然后在寄存器修改( ...
- centos7系统的进程管理
使用top命令,实时查看后台的进程,会看到以下信息 官方的解释: us: user cpu time (or) % CPU time spent in user space sy: system cp ...
- Python小白学习之路(十六)—【内置函数一】
将68个内置函数按照其功能分为了10类,分别是: 数学运算(7个) abs() divmod() max() min() pow() round() sum() 类型转换(24个) bo ...
- python安装mysqlclient模块时报mysql_config not found解决方法
在配置Flask框架,安装mysqlclient时报一下错误 翻译了一下大概是 mysql_config 文件没找到, 解决方法是安装缺失的文件. sudo apt install libmysql ...
- 从您的帐户中删除 App 及 iTunes Connect 开发人员帮助
iTunes Connect 开发人员帮助 从您的帐户中删除 App 删除您不想继续销售或提供下载,且不会再重新使用其名称的 App.如果您的 App 至少有一个获准的版本,且最新版本处于下列状态之一 ...
- POJ 2260
#include <iostream> #define MAXN 100 using namespace std; int _m[MAXN][MAXN]; int main() { //f ...
- IOC容器02
获取xml文件路径,使用IO读取xml文件,使用Document对象解析xml文件,将xml中的bean的信息注册到BeanDefinition类,将BeanDefinition保存到一个map中:该 ...
- java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification
ListView UI重绘时触发layoutChildren, 此时会校验listView的mItemCount与其Adapter.getCount是否相同,不同报错. ListView.layout ...
- (转)Linux Shell系列教程之(十四) Shell Select教程
本文属于<Linux Shell 系列教程>文章系列,该系列共包括以下 18 部分: Linux Shell系列教程之(一)Shell简介 Linux Shell系列教程之(二)第一个Sh ...