没有脚本的JSP

使用表达式语言(EL)可以在JSP脚本中避免Java代码,有助于实现前端人员和后端人员的分工明确。

本章内容

  • EL中的变量
  • EL中的操作符
  • EL中的函数
  • 标准动作

在JSP中,脚本代码包括:声明、scriptlet和表达式。与bean有关的标准动作如下:

  • jsp:useBean声明和初始化一个bean属性
<jsp:useBean id="beanID" class="foo.BeanID" scope="request" />

jspuseBean找不到对应的属性对象时,它会自己创建一个属性对象
- jsp:getProperty,得到bean的属性值

<jsp:getProperty name="beanID" property="name" />
  • jsp:setProperty设置属性对象的性质值。
<jsp:setProperty name="beanID" property="name" value="chris" />

为了避免jsp:setProperty标准动作在属性有值的情况下覆盖,可以使用有体的jsp:useBean

<jsp:useBean id="beanID" class="foo.BeanID" scope="page" >
    <jsp:setProperty name="beanID" property="name" value="chris" />
</jsp:useBean>

此时只有在新建一个bean时,jsp:setProperty才会执行。

小知识:bean法则

  1. 必须由一个无参数的公共构造器
  2. 必须按命名约定来命名公共的获取方法和设置方法
  3. 设置方法的参数类型和获取方法的返回类型必须一致
  4. 性质名和类型是由获取方法和设置方法得出。
  5. 结合JSP使用时,性质类型必须是String,或者是一个基本类型。

type属性能实现bean的多态引用:

<jsp:useBean id="beanID" type="foo.Person" class="foo.Teacher" scope="page" />

这里Person是一个抽象类,Teacher是一个具体的类,对应的servlet代码为:

foo.Person beanID = null;
//得到beanID属性的代码
if(beanID = null){
    beanID = new foo.Teacher();
}

type可以是class类型、抽象类型或者是一个接口,class必须是type的子类或者具体实现。

如果使用了type,但是没有class,则bean必须存在
如果使用了class(有或者没有type),class不能是抽象类,而且必须有一个无参数的公共构造器

scope的值默认为page。

param参数可以把bean的性质值设置为一个请求参数的值,只需要指定请求参数,当请求的参数名和bean的性质名匹配时,甚至可以不用为该性质指定值。

表达式语言

表达式语言都会置于一个${}中。
表达式中的第一个命名变量可以是一个隐式对象,也可以是一个属性。EL中的隐式对象如下:

  • pageScope
  • requestScope
  • sessionScope
  • applicationScope
  • param
  • paramValues
  • header
  • headerValues
  • cookie
  • initParam
  • pageContext

属性包括:

  • 页面作用域属性
  • 请求作用域属性
  • 会话作用域属性
  • 应用作用域属性

EL中使用(.)操作符访问性质和映射值,其中第一个变量可以是一个隐式对象,也可以是一个属性,点号右边可以是一个映射键(如果第一个变量是映射),也可以是一个bean性质(如果第一个变量是JavaBean属性)

${map.key}
${beanID.name}

[]操作符的功能比”.”更强大,这里不再说明。

可以编写EL表达式,由它调用普通java类的静态方法。

  1. 编写有一个公共静态方法的java类
  2. 编写一个标记库描述文件(TLD).TLD提供了定义函数的java类与调用函数的JSP之间的一个映射。
  3. 在JSP中放一个taglib指令。taglib指令告诉容器,“我想使用这个TLD,另外,在JSP中,使用这个TLD的一个函数时,我想用这个名字作为前缀。。。。。”,也就是定义命名空间
  4. 使用EL调用函数。

include指令
include指令告诉容器:复制所有包含文件中的所有内容,再把他粘贴到这个文件中的对应位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值