东软实训2-在jsp中使用javaBean
在JSP中可以像使用普通类一样访问JavaBean,在脚本元素中实例化类的对象,调用对象的方法。JSP提供了3个动作元素,和来访问JavaBean。
1.1
动作用于初始化JavaBean,或者定位一个已经存在的JavaBean实例,并把实例的引用赋给一个变量。
元素各属性的含义:
▶id
用于标识JavaBean实例的名字,同时,该名字也是声明的脚本变量的名字,并被初始化为JavaBean实例的引用。要注意指定的名字是区分大小写的,并遵照Java语言变量命名的约定。
▶scope
指定一个范围,在这个范围内,JavaBean实例的引用是可用的,实际上也是指定JavaBean实例的生命周期。可能的取值有:page、request、session和application,默认值是page。
▶class
指定JavaBean对象的完整的限定类名。
▶beanName
指定Bean的名字。该名字被提供给java.beans.Beans类的instantiate()方法,来实例化一个JavaBean。
▶type
指定定义的脚本变量的类型。这个类型可以是Bean类本身,它的父类,或者由Bean类实现的接口。该属性默认的值和class属性的值一样。
动作的行为如下:
(1)JSP容器在元素指定的范围中查找指定id的JavaBean对象。
(2)如果找到相应的对象,并且在元素中指定了type属性,那么JSP容器会试图把找到的对象转换为指定的type。如果类型转换失败,则抛出java.lang.ClassCastException异常。
(3)如果没有在指定的范围内找到对象,并且在元素中没有指定class或beanName属性,则会抛出java.lang.InstantiationException异常
(4)如果没有在指定的范围内找到对象,并且在元素中指定了class属性,则利用这个类创建一个新的对象,将这个对象的引用赋值给由属性id所指定的名字的变量,并将这个对象保存到属性scope指定的范围中(在调用setAttribute()方法时,以属性id指定的名字作为属性名)。
(5)如果没有在指定的范围中找到对象,并且在元素中指定了beanName属性,则用beanName作为参数调用java.beans.Beans类中的instantiate()方法。如果这个方法执行成功,则把新创建的对象的引用赋值给由属性id所指定的名字的变量,并将这个对象保存到属性scope指定的范围中(在调用setAttribute()方法时,以属性id指定的名字作为属性名)。
2.2
动作和一起使用,用来设置JavaBean的简单属性和索引属性。动作使用Bean中的setXXX()方法,在Bean中设置一个或多个属性值。在JSP中,经常使用动作元素将客户端提交的数据保存到JavaBean的属性中。
▶name
Bean实例的名字,它必须是已经在元素中通过id属性定义的名字。Bean的实例必须包含可写(具有setXXX()方法)的属性。
▶property
被设置的属性的名字。如果property属性的值是“*”,标签就会在请求对象中查找所有的请求参数,看是否有参数的名字和Bean属性的名字相同,如果找到匹配的参数和属性,就会按照正确的类型(自动进行类型转换)将参数的值设置为属性的值。如果一个参数的值为空(""),对应的属性的值不会被修改。
▶param
指定请求对象中参数的名字。在设置Bean的属性时,如果请求参数的名字和Bean属性的名字不同,可以用param来指定参数的名字。如果没有使用param,那么就认为请求参数的名字和Bean属性的名字相同。在元素中,不能同时出现param和value属性。
▶value
指定要赋给Bean属性的值。可以用一个请求时属性表达式(a request-time attribute exception)作为value属性的值。在元素中,不能同时出现param和value属性。
3.3
动作用来访问一个Bean的属性,并把属性的值转化成一个String,然后发送到输出流中。如果属性是一个对象,将调用该对象的toString()方法。
语法:
属性含义:
▶name Bean实例的名字,从这个实例中可以得到属性。
▶property 要得到的属性的名字。Bean的实例必须包含可读(具有getXXX()方法)的属性。
在编写JavaBean的时候,有两个地方需要注意:一、必须为JavaBean指定一个包名,否则JSP将无法调用JavaBean;二、让UserBean实现了java.io.Serializable接口,也就是让UserBean对象支持序列化。在JSP中,JavaBean对象常常作为数据的持有者,如果在你的应用开发中,JavaBean对象需要在不同的运行环境中传递,或者需要保存到持久存储设备中,那么应该让JavaBean类实现Serializable接口。如果JavaBean只是在单一的环境中使用,而且也不需要被保存到持久存储设备中,那么JavaBean类就不需要实现Serializable接口。
JavaBean的类和Servlet类放置的位置是一样的,都是放在WEB-INF\classes目录下。
解决在没有关闭浏览器的情况下,重新输入信息,现实的信息是先前提交的信息的两种方式:
1.改变useBean对象的范围,设为page或request,但是这样就会在重新打开页面时无法获取到信息;
2.将动作移到元素的外面调用。
东软实训2-在jsp中使用javaBean的更多相关文章
- java web学习总结(二十八) -------------------JSP中的JavaBean
一.什么是JavaBean JavaBean是一个遵循特定写法的Java类,它通常具有如下特点: 这个Java类必须具有一个无参的构造函数 属性必须私有化. 私有化的属性必须通过public类型的方法 ...
- jsp学习--JavaBean定义和在Jsp中使用JavaBean
一.JavaBean 1.什么是JavaBean JavaBean是一个遵循特定写法的Java类,它通常具有如下特点:>>这个Java类必须具有一个无参的构造函数>>属性必须私 ...
- 东软实训1 -jsp内置对象及其常用方法
JSP 的内置对象及方法详细说明 一. request 对象 客户端的请求信息被封装在 request 对象中,通过它才能了解到客户的需 求,然后做出响应.它是 HttpServletRequest ...
- 东软实训3-servlet基础
Java Servlet技术的核心就是在服务端创建能响应用户请求的对象,被创建的对象习惯上称为一个Servlet对象. 编写一个创建servlet对象的类就是编写一个特殊类的子类,这个特殊的类就是ja ...
- 【东软实训】SQL多表链接
如果一个查询同时涉及两个以上的表,则称之为链接查询,链接查询是关系数据库中最主要的查询,主要包括等值链接查询.非等值链接查询.自身链接查询.外链接查询和复合条件链接查询. 这篇博文我们来对多表链接进行 ...
- 【东软实训】SQLselect及其相关操作
SQL select 及相关操作 SQL是用于访问和处理数据库的标准的计算机语言,我们所使用的的是Oracle SQL 一个数据库通常包含一个或多个表,每个表有一个名字表示,下图即为一个名为“emp” ...
- 东软实训4-JDBC连接数据库
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...
- 逆袭之旅DAY17.东软实训.Oracle.PLSQL.过程,函数,包,练习
2018-07-13 14:54:46 --1.创建一个包,包含一个为雇员加薪的过程,一个为雇员减薪的过程 CREATE OR REPLACE PACKAGE pac_test1 IS PROCEDU ...
- 逆袭之旅DAY16.东软实训.Oracle.匿名块
2018-07-1216:41:19 六.匿名块 .定义匿名块: declare 定义部分: ---可选部分 begin 执行部分: ---必选部分 exception 异常处理部分: ---可选部分 ...
随机推荐
- MOOTOOLS简单操作应用知识
在项目中我们经常需要用到全选/反选.等操作按钮. 基于mootools框架与jquery框架不一致.导致缓慢. $('chkall').addEvent('click',function(){ if( ...
- PHP微信红包的算法实现探讨
header("Content-Type: text/html;charset=utf-8");//输出不乱码,你懂的 $total=10;//红包总额 $num=8;// 分成8 ...
- Xcode-Xcode 7.3 解决不能自动联想问题-备
一.问题: 升级Xcode 7.3 之后发现导入头文件之后,没法自动联想. 二. 解决办法: 打开Xcode --> Target --> BuildSettings --> App ...
- 获取MP3和M4A音乐文件的歌曲信息以及专辑图片--备用
NSBundle* bundle = [NSBundle mainBundle]; NSString* path = [bundle bundlePath]; NSURL * file ...
- 基于verilog的FPGA编程经验总结(XILINX ISE工具)
1.用ISE仿真的时候.所用变量一定要初始化. ISE默认初始量为"XXXXX", 而Quarters是默认为"00000"的, 其实实际上, 下到FPGA里后 ...
- recovery编译汉化
当BoardConfig.mk中定义了recovery的字体且为中文字体时,自动编译为中文版,否则编译为英文版 例如: BOARD_USE_CUSTOM_RECOVERY_FONT := \" ...
- 路由器WDS桥接教程
因为有吧友买了此款路由又不会桥接,因此做这个教程.老鸟自动路过,废话不多说,下面开始讲解. 1.wifi密码破解和路由器用户名和密码部分请自行解决,我只讲桥接部分.首先,在浏览器里输入192.168. ...
- uva 10036 Problem C: Divisibility
题意:能否在一个整数序列的每相邻的两项之间添加一个加减号,使得最终结果能被一个给定整数K<=100整除. dp[i][j]表示第i个数取余k为j的布尔值. #include <cstdio ...
- protocol buffer和当年corba ,和现在SOA有啥异同点
CORBA是对象管理集团(OMG)的一个标准,使得不同语言编写的,运行在不同计算机上的能够协同工作.标准包括分布式计算的通讯协议(GIOP和IIOP),可映射到多种语言的接口描述语言(IDL),对象请 ...
- Xamarin.Forms-webservices访问
虽然xamarin.android/ios 均支持右键添加web引用方式引用webservices,但是xamarin.forms不支持此方式,而如果android/ios各做一套采用抽象方式实现则工 ...