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

六月ゝ 毕业季﹏ 提交于 2020-04-06 20:04:44

一、在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的字符串。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!