EL表达式&JSTL
1、EL表达式
1、2EL的特点
1.1、EL得到某个数据时可以自动转换类型自动转换类型
1.2、对于类型的限制更加宽松 2.1、相比较在JSP中嵌入Java代码,EL应用更简单使用简单
1、3什么是EL?
EL即Expression Language(表达式语言)
常用于取值,我们之前在JSP中写java代码必须写在**<%%>**里面。并且取值代码比较繁琐。
而 EL表达式 可以使我们的 取值代码更加简洁
1、4EL的功能
替代JSP页面中的复杂代码(可以说是java代码)
1、5EL的语法/格式
${ EL exprission }
${ bean.name } 或 ${ bean[‘name’] }
在JSP页面的任何静态部分均可通过:${expression}来获取到指定表达式的值
自动转换类型
- List itemEL得到某个数据时可以自动转换类型
- 对于类型的限制更加宽松
1、6EL表达式获取值的方法
EL表达式获取值会从最小作用域优先拿取
作用域大小:pageContest < request < session <application
代码演示:在web目录下创建Test.jsp
<body>
<%
request.setAttribute("key", "value");
%>
<%-- 表达式脚本输出key1的值 --%>
<%=request.getAttribute("key1")%>
<%-- EL表达式输出key1的值 --%>
${key1}
<%-- 表达式脚本输出null值时页面显示null
EL表达式输出null值时页面什么都不显示(空串)--%>
</body>
运行结果:
<body>
<%
//向四个域对象中都保存相同key的值
request.setAttribute("key", "request");
session.setAttribute("key", "session");
application.setAttribute("key", "application");
pageContext.setAttribute("key", "pageContext");
%>
<%-- 使用EL表达式输出key的值 --%>
${key}
</body>
运行结果:由此看出在同一个页面时,pageContext优先级最高
<body>
<%
//向四个域对象中都保存相同key的值
request.setAttribute("key", "request");
session.setAttribute("key", "session");
application.setAttribute("key", "application");
pageContext.setAttribute("key", "pageContext");
%>
<%-- 使用JSP表达式进行跳转--%>
<jsp:forward page="test_02.jsp"></jsp:forward>
</body>
<body>
<h1>过来了</h1> <br>
<h1>值为:${key}</h1>
</body>
运行结果:由此看出在页面发生跳转时,使用EL表达式获取值,优先级最大的是request
1、7EL隐式对象介绍
2.JSTL
2.1 JSTL介绍
JSTL(JavaServer Pages Standard Tag Library,JSP标准标签库)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
JSTL通常会与EL表达式合作实现JSP页面的编码
它与JSP动作标签一样,只不过它不是JSP内置的标签,需要我们自己导包,以及指定标签库而已
2.2 JSTL的使用及分类
要使用JSTL,首先要先下载好jar包(去网上搜索下载即可),下载好后,导入项目的WEN-INF的lib目录下即可,当然,要在jsp中使用JSTL,还得使用@taglib标签,不过不同的分类情况不一样,JSTL标签有以下几种分类。
可以分为4大类和JSTL函数:
- 核心标签:core:核心标签库,学习的重点;
- 格式化标签:fmt:格式化标签库
- SQL标签:sql:数据库标签库,不需要学习了,它过时了;
- XML标签:xml:xml标签库,不需要学习了,它过时了。
核心标签:
在JSP文件开头使用如下语法:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- prefix=“c”:指定标签库的前缀,这个前缀可以随便给值,但大家都会在使用core标签库时指定前缀为c;
- uri=“http://java.sun.com/jstl/core”:指定标签库的uri,它不一定是真实存在的网址,但它可以让JSP找到标签库的描述文件;
2.3、JSTL标准标签库介绍
代码演示:
remove标签的用法
<!-- remove标签的用法 -->
<c:set var="firstName" value="xiaop"></c:set>
<c:out value="${firstName}"></c:out>
<c:set var="lastName" value="liu"></c:set>
<!-- 只能remove某个变量,不能remove掉JavaBean里的属性值 -->
<c:remove var="lastName"/>
<c:out value="${lastName}"></c:out><br>
if标签的用法
<!-- if标签的用法 -->
<form action="index.jsp" method = "post">
<!-- param为EL的隐式对象,获取用户输入的值 -->
<input type = "text" name = "score" value = "${param.score}">
<input type = "submit" value = "提交">
</form>
<!-- var中的变量为boolean类型,取决于test中的表达式 -->
<c:if test="${param.score >= 90}" var="grade" scope="session">
<c:out value="恭喜,成绩优秀"></c:out>
</c:if>
<c:if test="${param.score >= 80 && param.score < 90}">
<c:out value="恭喜,成绩良好"></c:out>
</c:if>
<c:out value="${sessionScope.grade}"></c:out>
forEach标签用法
<!-- forEach标签的用法 -->
<%
List<String> names = new ArrayList<String>();
names.add("liu");
names.add("xu");
names.add("Code");
names.add("Tiger");
request.setAttribute("names", names);
%>
<!-- 获取全部值 -->
<c:forEach var="name" items = "${requestScope.names}">
<c:out value="${name}"></c:out><br>
</c:forEach>
<c:out value="========================"></c:out><br>
<!-- 获取部分值 -->
<c:forEach var="name" items = "${requestScope.names}" begin="1" end="3">
<c:out value="${name}"></c:out><br>
</c:forEach>