JSP-EL表达式和JSTL标签库

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

${"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>

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

操做符

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

EL中的函数

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

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

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

EL隐含对象

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

这里写图片描述

pageContext对象jsp

是JSP中pageContext对象的引用。经过pageContext对象,能够访问request对象。好比,访问request对象传入的查询字符串:svg

${pageContext.request.queryString}函数

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

好比,须要显式访问在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"]}

自定义函数