JSP-EL表达式和JSTL标签库

JSTL仅是JSP表达式语言,而EL既是HTML也是JSP表达式语言,全称是Expression Language。
基本语法格式:
${ EL Expression}

${"Hello world"}  //输出字符串常量
${str} //输出字符串变量str的值
${3+2} //输出3+2的结果
package demo;
/**
 * 定义一个用户类
 * @author Administrator
 *
 */
public class User {
    private int id;
    private String name;
    private String classname;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getClassname() {
        return classname;
    }
    public void setClassname(String classname) {
        this.classname = classname;
    }
    public User(int id, String name, String classname) {
        this.id = id;
        this.name = name;
        this.classname = classname;
    } 
    public User(){};


}
<!--这是一个jsp文件 -->
<%@page import="java.util.Map"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page import="demo.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!--以下这两个taglib引用不可少  -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%--JSTL中的 <c:out value="hello world!" />
    <c:set var="a" value="David" />
    <c:out value="${a}" /> --%>
    <%
request.setAttribute("user", new User(1, "张三", "1班"));
List<User> list = new ArrayList<User>();
list.add(new User(2, "李四", "2班"));
list.add(new User(1, "张三", "1班"));
list.add(new User(3,"王五","3班"));
pageContext.setAttribute("List", list);
Map<String,User>map=new HashMap<String,User>();
map.put("u1", new User(3,"王五","3班"));
pageContext.setAttribute("Map", map);
    %>
    ${user.classname}<!-- 默认是调用User类中的get方法 -->
    <br /> 
    ${List[0].name} 
    <br/>
    ${Map["u1"].name}<!-- ①-->
    <br/>
    ${Map.u1.name }<!-- ②-->
    <br/>
    ${null}<!--不显示,只有通过如下方式 -->
    <%
        String str = null;
        out.println(str);
    %>
<%--JSTL中的 <c:forEach var="i" begin="1" end="5" step="2">
    <c:out value="${i}"/>
    </c:forEach>
    </br>
    <c:forEach begin="1" end="3"  step="1" varStatus="i">
       <li> ${i.index}</a></li>
    </c:forEach>
    </br>
    <c:forEach var="item" items="${List}" varStatus="status" >
        a ${status.begin}:${item.name} 
    </c:forEach>  --%>


</body>
</html>

【注意】①,②两处虽然写法不同,但是“.”与“ [ ]”都可以访问对象的属性。
不过,当属性的名字包含有空格,点号等复杂符号时,使用“.”来访问对象的属性将会出现异常。

操作符

算术操作符(+,-,*,/,%)
逻辑操作符(&&,||,!或and,or,not)
XML操作符
lt <
le <=
gt >
ge >=
比较操作符(>,>=,<,<=,==,!==)—可以自动转换数据类型
空操作符(empty)//当值为null时返回true
这里写图片描述

EL中的函数

JSP EL允许您在表达式中使用函数。这些函数必须被定义在自定义标签库JSTL中,所以在使用这些函数之前必须在JSP中引入标准函数的声明
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

${fn:length("Get my length")}<!--获取一个字符串的长度-->

下面是JSTL中自带的方法列表以及其描述
这里写图片描述
这里写图片描述
这里写图片描述

EL隐含对象

EL支持下表列出的隐含对象:
这里写图片描述

这里写图片描述

pageContext对象

是JSP中pageContext对象的引用。通过pageContext对象,可以访问request对象。比如,访问request对象传入的查询字符串:

${pageContext.request.queryString}

Scope对象
pageScope,requestScope,sessionScope,applicationScope变量用来访问存储在各个作用域层次的变量。

比如,需要显式访问在applicationScope层的box变量,可以这样来访问:applicationScope.box。

param和paramValues对象

它们用来访问参数值,通过使用request.getParameter方法和request.getParameterValues方法。

举例来说,访问一个名为order的参数,可以这样使用表达式:${param.order},或者${param["order"]}

接下来的例子表明了如何访问request中的username参数:

<%
request.setAttribute("username","jack");
%>
<p>${param["username"]}</p>

【注】param对象返回单一的字符串,而paramValues对象则返回一个字符串数组。

header和headerValues对象
它们是用来访问信息头,通过使用 request.getHeader方法和request.getHeaders方法。举例来说,要访问一个名为user-agent的信息头,可以这样使用表达式:${header.user-agent},或者${header["user-agent"]}

自定义函数
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值