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

1、在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类具备一个公共的、无参数的构造方法,其中还包含一个定义的方法:java

public void setTime(long time)

所以,在JSP页面能够把该类当作一个JavaBean来看待,且认为该JavaBean包含一个time的属性。
express

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

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

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

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

2、<jsp:useBean>标签

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

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

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

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

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

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

  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内容将被忽略。

3、<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属性值相同的状况

4、<jsp:getProperty>标签

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

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

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