JavaBean(简称Bean)其实是一个Java类,封状了一些常用的复杂的操作,是用JavaBean可利于代码重用,提高程序结构清晰性,这些Java类放在WEB-INF/classes目录内,可以使用<jsp:useBean>进行实例化,并指定一个名字和作用域.具体语法如下:
<jsp:useBean id=“Bean_name” scope=“scope_value” class=“class_name” beanName=“ser_filename” type=“class_or_interface_name” optional properties tags </jsp:useBean>
(1)id:用来表示这个实例
用于在合适的作用域(由作用域属性指定)内查找Bean的标识符,该id可以看成指向对象的变量,利用该id可以对该对象进行操作.该对象区分大小写
(2)scope:表示Bean存在的范围及ID变量名的有效范围
Bean的作用域.此属性是可选的,其缺省值为page.如果在定义的作用域内找不到该Bean则创建它.其有效值如下:
Page:如果该Bean存在于当前JSP页面中,则重用它.如果Bean不在当前JSP页面中,则在当前页面中的请求完成后创建并存储该Bean
Request:如果该Bean不是请求上下文的一部分,将在请求上下文中创建并存储该Bean.
session:如果该Bean存在于当前会话中,则重用该Bean,如果该Bean不存在,将作为会话的一部分创建并存储它.
Application:如果此Bean不存在于web应用程序上下文中,则在应用程序上下文中创建并存储此Bean.
(3)class
Bean的.class文件的名称.如果该Bean不在作用域内,则将它实例化.也可以使用type属性并结合class属性来指定要将何种类型的Bean实例化.如果使用类属性,不要同时指定beanName属性.
(4)beanName
.class文件的名称,Bean包名或者包含该Bean的串行化文件(.ser文件).仅当Bean不存在于指定的作用域中时,才使用此属性.还必须使用类型属性来指定要将何种类型的Bean实例化.beanName属性不能与class属性一起使用.此值区分大小写.
注:使用beanName主要用来实例化一个串行化的Bean,而不是用来从一个类创建一个全新的实例.如果Bean还没有创建,beanName属性传给java.beans.Bean.instantiate()方法,由类加载器对象进行实例化.并首先假定存在一个串行化的Bean(带有扩展名.ser),然后会将其激活.如果这个操作失败,它就会实例化一个新的实例.
串行化:对象通过写出描述自己的状态的数值来记录自己,这个过程称为对象的串行化(serialization)
(5)Type
如果此属性与class或beanName属性一起使用,它指定要实例化的Bean的类或接口.如果type类型未与class或beanName属性一起使用,则不将新的Bean实例化,而且type属性指的是已在作用域内的Bean.该值区分大小写.
(6)Properties tags
<jsp:setProperty>标记列表,它设置实例化的Bean的初始值,例如:
<jsp:useBean id=“connection”class=“com.lxm.conapp.Connection” scope=“session”> <jsp:setProperty name=“connection” property=“timeout” value=“33”> <jsp:setProperty name=“connection” property=“maxUserx” value=“200”> </jsp:useBean>
<jsp:setProperty>主要用于设定JavaBean的属性值.其语法如下:
<jsp:setProperty name=“beanInstanceName” { property=“*”| property=“propertyName” [param=“parameterName”]| property=“propertyName” value=“{String|}” } />
(1)Name=“beanInstanceName”
该属性对应<jsp:useBean>中的id,因此name要和<jsp:useBean>中的id一样.
(2)property
property属性赋予不同的值代表不同的含义.
property=“*”:这种赋值方式表示所有请求参数的所有值,用于匹配Bean中的属性.在Bean中的属性名字必须和request对象中的参数名一致.如果request对象的参数值中有空值,那么对应的Bean属性将不会设定如值.同样的如果Bean中有一个属性没有与之对应的request参数值,那么这个属性同样也不会设定.
property=“propertyName”[param=“parameterName”]:这种赋值方式表示使用request中的一个参数值来指定Bean中的一个属性.在这个语法中,property指定Bean的属性名.Param指定request中的参数名.如果Bean属性和request参数的名字不同,那么就必须得指定property和param,如果同名,那么就只需要指明property就行了.如果参数值为空(或未初始化),对应的Bean属性不被设定.
Property=“propertyName” value=“{String|<%=expression%>}”:
这种赋值方式表示使用指定的值来设定Bean属性.这个值可以是字符串,也可以是表达式.如果是字符串,那么它就会被转换成Bean属性的类型.如果是一个表达式,那么它的类型就必须和它将要设定的属性值的类型一致.如果参数值为空,那么对应的属性值也不会被设定.这种复制方式的弹性最大,可以通过value动态设定JavaBean的属性.另外,需要同学们注意的是不能在一个<jsp:setProperty>中同时使用param和value.
下面四行使用请求参数值来匹配Bean中的属性值:
<jsp:setProperty name=“student” property=“*”/> <jsp:setProperty name=“student” property=“stuName” param=“name”/> <jsp:setProperty name=“student” property=“age” value=“30”/> <jsp:setProperty name=“student” property=“stuName”/>
<jsp:getProperty>主要用于获取JavaBean中的属性值.其语法如下:
<jsp:getProperty name=“beanInstanceName” property=“propertyName”/>
使用<jsp:getProperty>之前,必须用<jsp:useBean>创建它,这个标签的属性值很简单,对他们进行如下说明:
name=“beanInstanceName” :该属性对应<jsp:useBean>的id ,因此name要和<jsp:useBean>的id一样.
property=“propertyName”:是要取得的属性值.如:
<jsp:getProperty name=“student” property=“stuName”/> <jsp:getProperty name=“student” property=“age”/>
<jsp:include>主要用于包含静态和动态文件.其语法如下:
<jsp:include page=“{relativeURL|<%=expression%>}” flush=“true”/>
Page=“{relativeURL|<%=expression %>}”:属性的参数为一个相对路径,或者是代表相对路径的表达式,即所要包含进来的文件位置或经过表达式运算出的相对路径.
Flush=“true”:该属性接受boolean类型的值,假如为true,缓冲区将会被清空,其默认值为false.
<jsp:include>元素容许包含动态文件和静态文件,这两种包含文件的结果是不同的,如果是静态的,那么这种包含仅仅是把所包含文件的内容加入到JSP文件中去,而如果是动态的文件,那么这个被包含文件也会被JSP编译器执行.尽管不能从文件名来判断一个文件是动态还是静态的,但<jsp:include>能够同时处理这两个文件,因此就不需要在包含时在判断此文件是动态的还是静态的.需要说明的是,如果这个包含文件是动态的那么可以用<jsp:param>传递参数名和参数值.如:
<jsp:include page=“login.jsp” flush=“true”> <jsp:param name=“userName” value=“lixiaoming”/> </jsp:include>
<jsp:forward>主要用于将客户端的请求从一个JSP页面转到另一个JSP页面.其语法如下:
<jsp:forward page={“relativeURL”|”<%=expression %>”}/>
或
<jsp:forward page={“relativeURL”|”<%=expression %>”}> <jsp:param name=“paramName” value=“{paramValue|<%=expression%>}”/> </jsp:forward>
page ={“relativeURL”|”<%=expression %>”}/>:这里的属性只是一个表达式或是一个字符串,用于说明将要指向的文件URL.
<jsp:param name=“paramName” value=“{paramValue|<%=expression%>}”/>:表示向一个动态文件发送一个或多个参数.这个文件一定是动态文件.如果想要传递多个参数,则可以在一个JSP文件中使用多个<jsp:param>.其中name指定参数名,value指定参数值.
<jsp:param>标签用来提供key/value的值,与<jsp:include>,<jsp:forward>等标签一起搭配使用,如前面的例子.下面是该标签的语法:
<jsp:param name=“parameterName” value=“parameterValue”/>
该属性有以下两个属性:
name=“parameterName” :该属性值表示parameter的名字.
value=“parameterValue”:该属性表示parameter的值.