El和JSTL
El和JSTL:
EL:
出现问题:
使用传统方式获得request对象中的值有以下缺点:
1.必须导入包
2.进行类型的强制转化
3.层次结构比较复杂
EL表达式的好处:
使用EL表达式获取请求数据一获取用户请求数据
获取请求头数据获取cookie数据
使用EL表达式获取作用域数据-获取作用域数据
作用域查找顺序
获取指定作用域中的数据使用EL表达式进行运算算术运算
关系运算-逻辑运算
el表达式简化
name:${param.name}
<%--
Created by IntelliJ IDEA.
User: 17612
Date: 2021/6/23
Time: 7:42
To change this template use File | Settings | File Templates.
El表达式:
Experssion Language:一种表达式语言,语法简答
语法规则:${experssion},可以使用.或者中括号来获取属性值或者指定索引位置的对象
获取值的时候,直接使用作用域中的key即可,然后使用.来引用属性,使用[]来获取指定索引位置的对象
作用域:
pageContext--->request----->session---->applicaiton
获取作用域的数据的顺序:
从小的作用域开始查询,如果找到则返回对应的值,不接着向大范围寻找数据
当四种作用域中存在相同key的属性的时候,可以通过pageScop,requestScop,sessionScop获取指定作用域的数据
El表达式可以进行算数运算和关系运算
直接在表达式中写入算法操作即可,如果是关系运算,返回true或者false
注意:在el表达式中的+表示加法操作而不是字符串连接符
获取Cookie数据
//获取请求头
逻辑运算
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%-- 使用传统方式获取作用域中的值--%>
name:<%=request.getParameter("name")%>
pwd:<%=request.getParameter("pwd")%>
name:${param.name}
<%-- EL表达式可以进行算数运算和关系运算--%>
<%-- 使用el表达式进行运算--%>
${1+2}
${1-2}
${1*2}
${1>2?"男":"女"}
<%-- //获取请求头--%>
${header}
${header["host"]}
${headerValues["accept-language"]}
<%-- 获取Cookie数据--%>
${cookie}
${cookie.JSESSIONID}
${true || fasle}
</body>
</html>
JSTL标签库:
JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL)JSTL是标签语言!JSTL 标签使用以来非常方便,它与JSP动作标签一样,只不过它不是JSP内置的标签,需要我
们自己导包,以及指定标签库而已!
如果你使用MyEclipse开发JavaWeb,那么在把项目发布到Tomcat时,你会发现,MyEclipse会在lib目录下存放jstl的Jar包!如果你没有使用MyEclipse开发那么需要
自己来导入这个JSTL的Jar包:jstl-1.2.jar.
代码以及说明:
<%@ page import="java.util.HashMap" %><%--
Created by IntelliJ IDEA.
User: 17612
Date: 2021/6/23
Time: 11:22
To change this template use File | Settings | File Templates.
JSTL:
帮助我们在jsp页面中添加复杂的逻辑判断,避免逻辑代码和页面标签混为一谈
JSTL是EL的扩展,同时,JSTL依赖于EL。为了方便的从作用域中获取值
JSTL的导入:
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
标签分类:
核心标签库:
函数标签库:
xml标签库:
SQL标签库:
标签学习:
输出标签:<c:out value="哈哈"></c:out>
value 填写要输出的值
default:默认值
<c:set var="java" value="pageContext"></c:set> 向作用域设置属性值
var:表示参数的key
value:表示参数的值
scop:表示向哪个作用域设置属性值
注意:当只配置这两个属性的时候,默认是想pageContext作用域中设置属性,可以通过参数来做选择向哪个作用域设置
<c:remove var="java"></c:remove> 删除作用域中的数据
var:表示参数的key
scop:删除指定作用域的数据
注意:如果没有指定scope属性,默认就会把所有作用域中的参数删除
<c:if test="${a>5}">
逻辑判断标签 if判断
test:填写逻辑判断表达式
var:条件表达式的结果存储变量
scope:结果变量存储的作用域
<c:choose><c:when test="${age>10}">进行多重逻辑判断,类似于switch
<c:forEach begin="0" end="3" step="2" varStatus="sta" items="${map}">
begin:起始值
end:结束值
step:步长
varStatus:循环状态的变量值名称
var:集合数据的每条记录的迭代值
items:从作用域中获取的数据
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<c:out value="哈哈"></c:out>
<c:out value="hehei"></c:out>
<c:out value="request"></c:out>
<%--向作用域设置属性值--%>
<c:set var="java" value="pageContext"></c:set>
<c:set var="java" value="request"></c:set>
<c:set var="java" value="session"></c:set>
<%--删除作用域的数据--%>
<c:remove var="java"></c:remove>
<c:out value="${java}"></c:out>
<%--逻辑判断--%>
<c:set var="a" value="6"></c:set>
<c:if test="${a>5}">
<h1>jstl 0s easy</h1>
</c:if>
<c:set var="age" value="30"></c:set>
<c:choose>
<c:when test="${age>10}">
<h1>小孩</h1>
</c:when>
<c:when test="${age>20}">
<h1>少年</h1>
</c:when>
<c:when test="${age>30}">
<h1>青年</h1>
</c:when>
<c:otherwise>
<h1>i dont`t know</h1>
</c:otherwise>
</c:choose>
<%-- 循环标签--%>
<c:forEach begin="0" end="3" step="2" varStatus="sta">
${sta.index}---${sta.count}---${sta.first}---${sta.last}
当前循环的状态
</c:forEach>
<%
HashMap<String,String> map = new HashMap<>();
map.put("1","111");
map.put("2","222");
map.put("3","333");
%>
<c:forEach begin="0" end="3" step="2" varStatus="sta" items="${map}">
${i.key}
${i.value}
</c:forEach>
</body>
</html>