JSP Actions的使用
JSP actions 使用您可以动态的插入一个文件,重用JavaBeans组件,前进到另一个页面,或为Java 插件生成一个HTML。可以使用的action:
(1) JSP:include --在页面被请求时包含进一个文件。
(2) JSP:useBean--找到或实例化一个JavaBean。
(3) JSP:setProperty--设置一个JavaBean属性。
(4) JSP:getProperty--将JavaBean的属性插入到输出。
(5) JSP:forward--让请求者可以向前到一个新的页面。
(6) JSP:plugin--用OBJECT或EMBED标签为Java plugins生成特定的浏览器的代码。
1.JSP Action include
这个action使您可以在即将生成的页面上包含进一些文件
与include directive不同,这个action是在页面被请求时才将文件包含进来,而,include directive则是在JSP页面被转换为servlet时包含文件。为了提高效率,include action做了一点小小的牺牲,即,它不允许被包含的页面含有一般的JSP代码(例如,不可设置HTTP头),但是,它具有显著的灵活性,如下面的 JSP 代码,它实现将四个不同的片段插入如下的页面。每一次当标题改变的时候,您仅需修改这四个文件而无须更改主要的JSP 页面。
这个action使您能将一个JavaBean装入一个JSP页面。这是一个非常有用的能力,因为它使您可以使用可重用的JAVA类而不需牺牲性能。最简单的语法用于指定一个bean
这通常意味着“实例化一个类的对象通过指定一个类,并将之与一个通过id指定名称的变量绑定”。然而,就象我们看到的,您可以指定一个scope属性来使得bean不仅仅与当前的页面相联系。在这种情形下,得到一个对已存在的bean的引用是非常有用的,而且,仅当没有相同的id和scope的bean存在时才创建一个新的。现在,您已有了bean,您可以通过JSP:setProperty来修改它,或者,通过使用之前用id指定的名字来使用 scriptlet或明确的调用方法。当您说“这个bean有一个称为foo的X类型的属性”,您真正的意思是“这个类有一个称为getFoo的方法,它返回X类型的某类值,还有另一个方法称为setFoo,它以X为参数。”这JSP:setProperty action 将在下一单元详细的介绍,但是现在您既可以给出一个明确的值,给出一个属性来说明此值是从request的参数继承而来,也可以仅仅列出属性来标志此值应该从与属性名同名的参数继承而来。您可以通过调用适用的getXxx方法,或更普遍的,使用JSP:getProperty action,来得到已存在的JSP表达式或scriptlet属性。
请注意,为bean指定的类必须在服务器的规则的类路径下,而不是用来保留当改变时自动装载的类的路径。例如,在Java Web Server上,它和它所用的类必须到类的目录或在lib目录下的一个jar文件内,而不是在servlets的目录下。 以下是bean的原代码:
2.JSP:useBean 的详细用法
最简单的使用bean的方式是:
为了装载bean,需要用JSP:setProperty和 JSP:getProperty来修改和检索bean的属性。且,还有两种别的选项。首先,您可以使用容器的格式
要指出的是,Body部分应该仅在bean第一次实例化时被执行,而不是在每次被找到和使用时。Beans能够被共享,因此,并不是所有的 JSP:useBean 陈述都产生一个新的bean的实例。其次,除了id 或class以外,还有三种属性您可以使用:scope,type,和beanName。指明bean在之上可以被使用的前后关系。有四个可能的值:page,request,session,和application。缺省为page,表明 bean仅在当前页可用(保存在当前的PageContext中)。request的一个值表明bean仅用于当前客户端的请求(保存在 ServletRequest对象中)。Session的值指出在当前的HttpSession的生命周期内,对象对所有的页面可用。最后,application的值指出对象对所有共享ServletsContext的页面可以使用。使用JSP:useBean 仅在没有相同的id和scope 的bean时创建一个新的bean,如果已有则使用之,并忽略以JSP:useBean标志开始和结尾的代码。
type指明将指向对象的变量的类型。这必须与类名相匹配或是一个超类或者是一个实现类的接口。记住,变量的名由id属性来指定。
beanName赋予bean一个名字,您应该在Beans的实例化方法中提供。它允许您给出type和一个beanName,并省略类属性。
3.JSP Action setProperty
这是一个必选属性。它指出哪一个bean的属性将被设置。JSP:usebean必须出现在JSP:setProperty之前。
property这是一个必选属性。表明您将设置哪一个属性。然而,有一个特殊的情况:如果以"*"为值意味着,所有的名称与bean的属性匹配的request参数都将被传递到相应的属性设置方法。
value这是一个可选属性。它指定被设置的属性的值。字符串的值通过相应的对象或包的标准的valueOf方法将自动的转换为 numbers,boolean,Boolean,byte,Byte,char,和Character。例如,boolean或Boolean属性的值 “true”将通过Boolean.valueOf方法转化,而,一个int或Integer属性的值“42”将通过Integer.valueOf转化。您不能同时使用value和param属性,但,两个都不用是允许的。
param这是一个可选属性。它指明了bean的属性应该继承的request的参数。如果当前的request没有这样的一个参数,就什麽也不做:系统并不将 null传给设置属性的方法。因此,您可以使用bean的缺省值。例如下面的这段程序执行“将numberOfItems属性设置为任意numItems request参数的值,如果有这样的一个request参数,否则什么也不做。”
如果您将value和param同时缺省,这和您将param的名称设为bean的属性名相同一样。您可以通过将name的值设置为”*”和省略 value和param来自动的使用与bean的属性相应的request的属性。在这种情况下,服务器将反复的查找可用的属性和request参数来匹配具有相同名字的。
【编辑推荐】