EL表达式&&JSTL

EL表达式

在JSP开发中,为了获取Servlet域对象中存储的数据,经常需要书写很多Java代码,这样的做
法会使JSP页面混乱,难以维护,为此,在JSP2.0规范中提供了EL表达式。EL是Expression Language的缩写,它是一-种简单的数据访问语言。

EL语法

${ 表达式}

EL内置对象

分类 内置对象名称 描述
作用域 pageScope page作用域
requestScope request作用域
sessionScope session作用域
applicationScope applicationScope作用域
请求参数 param 获得一个参数
paramValues 获得一组参数
请求头 header 获得一个请求头
headerValues 获得一组请求头
JSP上下文对象 pageContext
全局初始化参数 initParam
cookie cookie

EL的使用

获取数据

${requestScope.commpany }	// 获取字符串
${sessionScope.user.name }	// 获取对象属性
${applicationScope.users[0].name }	// 获取集合属性

注意:当属性名中有特殊符号(如User-Agent),可以使用["name"]

如:requestScope.["User-Agent"]

运算符

运算符类型 返回值
算数运算符 运算结果
逻辑运算符 Boolean
关系运算符 Boolean
三元运算符 运算结果
empty

空值运算符,用以判断:

作用 语法
对象是否为null ${ empty user }
字符串是否不为"" ${ not empty "张三" }
集合是否为0 ${ empty list }

JSTL

JSTL(Java server pages standarded tag library,即JSP标准标签库)是由JCP(Java community Proces)所制定的标准规范,它主要提供给Java Web开发人员一个标准通用的标签库,并由Apache的Jakarta小组来维护。开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。

JSTL有Core、I18N、SQL、XML、Functions五个标签库,但现在只使用Core库。

使用方式

  1. 导入jar包
  • jstl1.2.jarjstl1.12.jar + standard.jar
  1. 引入

使用jsp指令taglib

语法:<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

prefix为标签前缀

  1. 测试

    <c:out value = "Hello world!"></c:out>

Core标签库

if标签

语法:

<c:if test="判断体">
	如果判断题的结果为true
</c:if>

注意:判断体最好在el表达式中书写,如 ${ count == 1},不要写成:${count } == 1

    <%
    request.setAttribute("count", 10);
    %>
    <!-- jstl标签经常会和el配合使用 -->
    <!-- test代表返回boolean的表达式条件(true OR false) -->
    <c:if test="${count == 10 }">
        count == 10	<br>
    </c:if>

forEach标签

语法: 普通for

<C:forEach begin="begin" end="end" [step="step"] items="collection" [var="varName"];>
	body conent
</C:forEach>

语法:增强for

<c:forEach items="collection" var="var">
	body content
</c:forEach>

代码

	<%
		// ==========================================
		List<String> list1 = new ArrayList<String>();
		list1.add("张角");
		list1.add("张宝");
		list1.add("张梁");
		request.setAttribute("listString", list1);
		
		// ==========================================
		User user1 = new User();
		User user2 = new User();
		user1.setId(1);
		user1.setName("吕布");
		user1.setPassword("chitu");
		user2.setId(2);
		user2.setName("貂蝉");
		user2.setPassword("biyuxiuhua");
		
		List<User> list2 = new ArrayList<User>();
		list2.add(user1);
		list2.add(user2);
		request.setAttribute("listUser", list2);
		
		// ==========================================
				
		Map<String, String> map1 = new HashMap<String, String>();
		map1.put("张飞", "丈八蛇矛");
		map1.put("关羽", "青龙偃月刀");
		request.setAttribute("mapString", map1);
		
		// ==========================================
		Map<String, User> map2 = new HashMap<String, User>();
		map2.put("第一猛男", user1);
		map2.put("第一美女", user2);
		request.setAttribute("mapUser", map2);
	%>
	<!-- 遍历List<String> -->
	<h1>遍历List&lt;String&gt;</h1>
	<c:forEach items="${ listString }" var="s">
		${s }
	</c:forEach>
	<br>
	<!-- 遍历List<User> -->
	<h1>遍历List&lt;User&gt;</h1>
	<c:forEach items="${ listUser }" var = "s">
		${ s.id }
		${ s.name }
		${ s.password }
		<br>
	</c:forEach>
	<!-- 遍历Map<String, String> -->
	<h1>遍历Map&lt;String, String&gt;</h1>
	<c:forEach items="${mapString }" var="entry">
		${ entry.key } : ${ entry.value } <br>
	</c:forEach>
	<!-- 遍历Map<String, User> -->
	<h1>遍历Map&lt;String, User&gt;</h1>
	<c:forEach items="${mapUser }" var="entry">
		${ entry.key } : ${ entry.value.id }---${entry.value.name }---${entry.value.password } <br>
	</c:forEach>

EL表达式&&JSTL

EL表达式&&JSTL

上一篇:WebSocket


下一篇:JS 获取元素的偏移量