无脚本JSP技术
为了让网页设计人员不需要学习JAVA而便捷的开发jsp,以及JSP中若引入java会导致难以维护(因为代码会给人感觉很乱),所以jsp中一般不使用JAVA脚本。为了代替JAVA代码,主要是使用JSP标准动作、表达式语言EL和标记JSTL。<!--more-->
标准动作
<jsp:useBean>申明和初始化一个bean
Example:
<jsp:useBean id=”person” class=”foo.Person” scope=”request”/>
Id:bean对象的标识符,即这个对象的名字。
Class:对象的类型。
Scope:对象的属性作用域,即这个对象是从哪个作用域得到的。默认为page。
Type:在建立多台bean时使用。
<jsp:getProperty>:获得bean性质的值
Example: <jsp:getProperty name=”person” property=”name”/>
Name:bean对象标识符,与<jsp:useBean>中id匹配。
Property:对象中的属性名。
注意,<jsp:useBean>如果找不到一个名为person的属性对象,他就会创建一个,并把这个对象设置到相应的作用域上面。
在创建属性对象person时,如果需要设置一些属性,可以使用<jsp:setProperty>。
但是,为了设置属性的动作只在创建一个新的对象时使用,<jsp:setProperty>可以放在<jsp:useBean>的体内,如下:
<jsp:useBean id=”person” class=”foo.Person” scope=”request”>
? ? ? ? ?<jsp:setProperty name=”person” property=”name” value=”Yang”>
? ? ? ? ?</jsp:useBean>
什么叫JavaBean,以下是JavaBean的基本法则:
- 有一个无参数的公共构造函数
- 按照约定命名公共的获取和设置方法。如getFoo()和setFoo()。
- 设置方法和获取方法的参数需要相同。如int getFoo()和void setFoo(int foo)。
- 性质的名和类型和获取方法和设置方法对应,而和类中的成员变量没有关系。如class中可以没有int foo的成员变量。
- 结合JSP使用时,性质类型必须是String或者基本类型。
除了<jsp:include>动作外,常用的标准动作还有<jsp:include>,可以引入可重用的模版部件。除了这个标准动作,include指令也可以完成这个功能,不过他们俩内部原理并不相同。如对于插入“head.jsp”来说,Include指令在转换时插入head.jsp的源代码,就相当于把head.jsp的代码复制黏贴到该处。而对于<jsp:include>是在运行时插入head.jsp的响应。
对于<jsp:include>来说,运行时会带来额外的开销。而使用include指令只有在第一个请求时在将jsp文件转换成.class文件时才有开销。从这个角度来说,似乎可以只是用include指令而不是用<jsp:include>动作,但是当我们需要定制包含的内容时,比如我们要告诉head.jsp一些变量来定制我们要得到的内容,就需要使用标准动作来传入变量(<jsp:param>)。
表达式语言EL
在一些更加复杂的场合,如性质不是String或基本类型,而是数组等。此时无法使用JSP动作实现功能,可以使用表达式语言EL。
使用EL语言可以访问不同访问域中的变量,也可以使用EL隐式对象(和JSP隐式对象大体相同)访问一些参数,还可以使用EL函数通过一些配置调用类中的静态函数。
具体的使用方法本文中不再详述。
JSTL