文档章节

JavaBean在JSP中的应用(3个JSP标签)

KYZGJ
 KYZGJ
发布于 2014/04/26 20:13
字数 1553
阅读 2173
收藏 7

一、在JSP中如何使用JavaBean

为了能在JSP页面中集成JavaBean组件和支持JavaBean的功能,JSP规范专门定义了三个JSP标签:<jsp:useBean>、<jsp:setProperty>和<jsp:getProperty>,它们分别用于创建和查找JavaBean的实例对象,设置JavaBean对象的属性,读取JavaBean对象的属性。对于JSP页面来说,只要一个类具有一个公共的、无参数的构造方法,就可以把这个类当做JavaBean来使用,如果类中有不接受任何参数的getter方法或只接受一个参数的setter方法,就可以把前缀get或set后面的部分当着一个属性名来引用。例如,JDK自带的java.util.Date类具有一个公共的、无参数的构造方法,其中还包含一个定义的方法:

public void setTime(long time)

因此,在JSP页面可以把该类当做一个JavaBean来看待,且认为该JavaBean包含一个time的属性。

  • JSP页面按照调用JavaBean的方式对Date类进行调用

<jsp:useBean id="currentDate" class="java.util.Date" />
<jsp:setProperty name="currentDate" property="time" value="1234567" />
<jsp:getProperty name="currentDate" property="time" />

  • JSP页面像调用一个普通Java类的方式调用JavaBean

<%
    java.util.Date currentDate = new java.util.Date();
    currentDate.setTime(1234567);
    out.println(currentDate.getTime());
%>

二、<jsp:useBean>标签

该标签用于在某个指定的域范围(application、session、request、pageContext等)中查找一个指定名称的JavaBean对象,如果存在则直接返回该JavaBean对象的引用。如果不存在则实例化一个新的JavaBean对象,并将它按指定的名称存储在指定的域范围中。常见语法如下:

<jsp:useBean id="beanInstanceName" class="package.class" 
    scope="page|request|session|application" />

其中,class属性用于指定JavaBean的完整类名,JSP引擎将使用这个类名来创建JavaBean的实例对象或作为查找到JavaBean对象的类型;id属性用于指定JavaBean实例对象的引用名称和其存储在域范围的名称;scope属性用于指定JavaBean实例对象所存储的域范围,其默认值是page。

  1. page表示将JavaBean实例对象存储在PageContext对象中,默认存储进page域范围;

  2. request表示将JavaBean实例对象存储在ServletRequest对象中;

  3. session表示将JavaBean实例对象存储在HttpSession对象中。此设置要求当前JSP页面支持Session,即没有将page指令的session属性设置为false;

  4. application表示将JavaBean实例对象存储在ServletContext对象中。

除了上述几个属性,该标签还有:

  • type属性

用于指定JavaBean实例对象的引用变量的类型,它必须是JavaBean对象的类名称、父类名称或所实现的接口名称中的一个。type属性的默认值为class属性的设置值,当JSP引擎将标签翻译成Servlet程序中的代码时,将使用type属性值作为JavaBean对象引用变量的类型。

  • beanName属性

用于指定JavaBean的名称,这个名称不是JavaBean实例对象的引用名称,而是JavaBean规范中定义的一种名称,它将作为传递给java.beans.Beans类的instantiate方法的参数。java.beans.Beans类的instantiate方法可以从这个资源文件中产生JavaBean的实例对象。设置该属性不能同时设置class属性,但必须同时设置type属性。

<jsp:useBean>标签除了可以按照空元素的方式进行使用外,还可以按容器元素的格式进行使用,如:

<jsp:useBean...>
    Body
</jsp:useBean...>

Body部分只在标签创建JavaBean的实例对象时才执行,也就是说,如果scope属性指定的域范围存在id属性指定的JavaBean对象,那Body内容将被忽略。

三、<jsp:setProperty>标签

该标签用于设置JavaBean对象的属性,也就是调用JavaBean对象的setter方法,其语法如下:

<jsp:setProperty name="beanInstanceName" property="propertyName" 
    [ value="{string | <%= expression %>}" | param="parameterName" ] | 
    property="*"    
/>

  • name属性是必不可少的,用于指定JavaBean实例对象的名称,其值应与<jsp:useBean>标签的id属性相同。

  • property属性是必不可少的,用于指定JavaBean实例对象的属性名。

  • value属性是可选的,它用于指定JavaBean实例对象的某个属性的值,value属性的设置值可以是一个字符串,也可以是一个表达式。如果是value属性的设置值是字符串,那么它将自动转换成所要设置的JavaBean属性的类型;如果是表达式,则表达式的结果类型与所要设置的JavaBean属性的类型一致(不一致则报错)

  • param属性是可选的,它用于将请求参数的值赋给JavaBean实例对象的某个属性。如果当前请求消息中没有param属性所指定的请求参数,该标签不会将null赋给JavaBean属性,所设置的JavaBean属性仍将等于其原来的初始值,value和param属性不能同时使用。

  • property="*",这种形式用于对JavaBean实例对象多个属性进行赋值,它表示将请求消息中的参数逐一与JavaBean实例对象中的属性进行比较,如果找到同名的属性,则将该参数赋给该属性,不存在则不会被赋值。

注意:如果param属性和value属性都没有设置,且property="prppertyName",它等效于param属性的设置值与property属性值相同的情况

四、<jsp:getProperty>标签

该标签用于读取JavaBean对象的属性,也就是调用JavaBean对象的getter方法,然后将读取的属性值转换成字符串后插入进输出的响应正文中,其使用语法如下:

<jsp:getProperty name="beanInstanceName" property="PropertyName" />

其中,name属性用于指定JavaBean实例对象的名称,其值应与<jsp:useBean>标签的id属性值相同,property属性用于指定JavaBean实例对象的属性名,如果一个JavaBean实例对象的某个属性的值为null,则该标签输出该属性的结果将是内容为null的字符串。

© 著作权归作者所有

下一篇: JavaBean
KYZGJ
粉丝 6
博文 20
码字总数 27378
作品 0
广州
私信 提问
(JavaEE-08)JSP九大隐式对象

JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) ,然后按照servlet的调用...

_-Leon-_
2014/07/07
174
0
(JavaEE-09)JSP中的MVC与三层架构

JSP开发模式 SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式 JSP+JavaBean模式适合开发业务逻辑不太复杂的web应用...

_-Leon-_
2014/07/11
2.1K
2
javaBean的相关知识和应用

javaBean JavaBean 简介 JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内...

必须往前走
01/11
0
0
Jsp和Servlet的区别与联系

JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP...

watermelon11
02/25
8
0
EL表达式和JSTL标签

EL表达式: EL表达式用于获取数据,在JSP页面中可使用${标识符}的形式,通知JSP引擎调用pageContext.findAttribute()方法,以标识符为关键字从各个域对象中获取对象。如果域对象中不存在标识...

晨曦之光
2012/05/16
193
0

没有更多内容

加载失败,请刷新页面

加载更多

一套基于SpringBoot+Vue+Shiro 前后端分离 开发的代码生成器

一、前言 最近花了一个月时间完成了一套基于Spring Boot+Vue+Shiro前后端分离的代码生成器,目前项目代码已基本完成 止步传统CRUD,进阶代码优化: 该项目可根据数据库字段动态生成 controll...

郑清
今天
7
0
javascript-十六进制随机颜色

<script> // 编写一个函数,获得一个十六进制的随机颜色的字符串(如#20CD4F) // function randomColor(){ // var r = random(0,255).toString(16); // var g = random(0,255).toString(16......

ACKo
今天
3
0
springBoot +mybatis 出现sql 语句在数据库可以查询到,但是赋值到实体类上就没有的情况?

1.不要老是反复查看自己是否写错了,为啥有的能出来有的出不来? 可以查看配置文件中是否配置全: 如果在application.yml 文件中是如下配置: mybatis: mapper-locations: classpath:mapp...

kuchawyz
今天
3
0
正则表达式

一、RegExp对象 进行验证和查找的API 1、创建对象: (1)用/创建(直接量):var reg=/正则/ig,表达式固定不变时使用 (2)用new创建:var reg=new RegExp(‘正则’,‘ig’),表达式需要...

wytao1995
今天
3
0
实战限流(guava的RateLimiter)

关于限流 常用的限流算法有漏桶算法和令牌桶算法,guava的RateLimiter使用的是令牌桶算法,也就是以固定的频率向桶中放入令牌,例如一秒钟10枚令牌,实际业务在每次响应请求之前都从桶中获取...

程序员欣宸
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部