无脚本JSP技术

Published: 13 Aug 2012 Category: 编程

为了让网页设计人员不需要学习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