EL表达式和JSTL标签
Posted XiaoFanMi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EL表达式和JSTL标签相关的知识,希望对你有一定的参考价值。
EL表达式和JSTL标签
EL表达式概述
什么是EL表达式?
- EL即Expression Language(表达式语言)
- 简称EL,通过EL可以简化在JSP开发中对对象的引用,从而规范页面代码,增强程序的可读性及维护性。
EL的功能
替代JSP页面中的复杂代码
EL的特点
- 自动转换类型
- 使用简单
EL表达式语法
以“${”作为开始,以“}”作为结束
直接使用变量名获取值$
例:${ username }
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
request.setAttribute("name","jim");
//1.获取数据 2.强制类型转化 3.响应输出数据
String str = (String)request.getAttribute("name");
out.print(str);
%>
</body>
</html>
使用EL
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${name}
</body>
</html>
El表达式操作符
有算术运算符、比较运算符、逻辑运算符、验证运算符empty与条件运算符、 运算符
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
request.setAttribute("num1", 5);
request.setAttribute("num2", "10");
request.setAttribute("num3", "abc");
%>
<%--算术运算--%>
<%-- ${num1 + num2}--%>
<%-- +只能做加法 ${num1+num3}--%>
<%-- 比较运算 --%>
<%-- ${num1 > num2}--%>
<%-- ${num1 eq num2}--%>
<%-- ${num1 lt num2}--%>
<%-- 判断是否为空 empty "" null 都为true --%>
<%
request.setAttribute("str1", "");
request.setAttribute("str2", "admin");
%>
${empty str1}
${empty str2}
${empty str3}
<%--条件运算符--%>
<input type="checkbox" ${str2 == "admin" ? "checked":""}>
</body>
</html>
运算符”.”
作用 –获取对象属性
创建一个user类
package com.ff.bean;
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
System.out.println("调用getName()");
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
System.out.println("调用getAge()");
return age;
}
public void setAge(int age) {
this.age = age;
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
User user = new User("Jim",11);
request.setAttribute("user",user);
%>
${user.name}<br><%--本质是调用user类中的getName()方法--%>
${user.age}<br>
${user.getName()}<br>
${user.getAge()}<br>
</body>
</html>
EL隐式对象
对象名称 | 说 明 |
---|---|
pageScope | 返回页面范围的变量名,这些名称已映射至相应的值 |
requestScope | 返回请求范围的变量名,这些名称已映射至相应的值 |
sessionScope | 返回会话范围的变量名,这些名称已映射至相应的值 |
applicationScope | 返回应用范围内的变量,并将变量名映射至相应的值 |
–它们可以读取使用JSP内置对象pageContext、request、session以及application的setAttribute()方法所设定的对象的数值-----即getAttribute(String name),却不能取得其他相关信息。
– 例如,要取得session中储存的一个username属性的值,可以利用下面的方法:session.getAttribute(“username”)
–在EL中则使用下面的方法:${sessionScope.username}
–注意:如果没有设定使用EL内置对象的作用范围,则按照pageScope、requestScope、sessionScope和applicationScope的先后顺序读取属性值。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
pageContext.setAttribute("name","pageValue");
application.setAttribute("name","appValue");
request.setAttribute("name","requestValue");
session.setAttribute("name","sessionValue");
%>
${name}
<%--
4个域对象中有相同的属性名
按照 pageContext request session application顺序查找
--%>
${applicationScope.name}<br>
${pageScope.age}<br>
${requestScope.getName()}<br>
${sessionScope.getAge()}<br>
</body>
</html>
JSTL核心标签
什么是JSTL
JSTL(JavaServerPages Standard Tag Library)JSP标准标签库使用JSTL实现JSP页面中逻辑处理
JSTL的环境搭建
–导入标签库jar文件
–在JSP页面添加taglib指令
–使用JSTL标签
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>
条件标签
<c:if test=" " scope="page" var="res"> </c:if>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
request.setAttribute("name", "Tom");
%>
<%--
test="条件表达式 ${num==11}"
var="定义一个变量 键"
scope ="指定存储结果的作用域"
等价pageContext.setAttribute("res",true/false)
--%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:if test="${name == 'Tom' }" scope="page" var="res">
成立
</c:if>
</body>
</html>
迭代标签
<c:forEach items=collection var=name begin=start end=end step=count>
…循环体代码…
第一个示例:
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.ff.bean.User" %>
<%@ page import="java.util.Arrays" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
</head>
<body>
<%
List<User> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
User user = new User("用户"+i,20+i);
list.add(user);
}
request.setAttribute("list",list);
%>
<table border="1" width="400px">
<tr>
<td>序号</td>
<td>姓名</td>
<td>年龄</td>
<td>操作</td>
</tr>
<%--
items=${取出迭代集合或数组}
var = "声明一个变量,接收每次循环中取出的数据"
varStatus = "s" 获取循环状态信息
step = "3" 循环步长为3 默认为1
begin = "0" 开始索引
end = "5" 结束索引
--%>
<c:forEach items="${list}" var="user" varStatus="s" begin="2" end="5" step="2">
<tr>
<td>${s.count} ${s.index} ${s.first} ${s.last} </td>
<td>${user.name}</td>
<td>${user.age}</td>
<td><a href="">删除</a></td>
</tr>
</c:forEach>
</table>
</body>
</html>
第二个示例
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.ff.bean.User" %>
<%@ page import="java.util.Arrays" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
</head>
<body>
<%
String[] str = {"a","b","c"};
request.setAttribute("str",str);
%>
<c:forEach items="${str}" var="str" >
${str}<br>
</c:forEach>
</body>
</html>
迭代标签
<c:forTokens>标记:items属性指定需要迭代的字符串,delims表示分隔符,var表示使用分隔符分割items产生的字符串。
<c:forTokens items=“a🅱️c:d” delims=":" var=“token”>
<c:out value="${token}"/>
< </c:forTokens>>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
</head>
<body>
<%--
本质对拆分后的数组进行遍历
--%>
<%
String str = "a:b:c:de";
request.setAttribute("str",str);
%>
<c:forTokens items="${str}" delims=":" var="s">
${s}<br>
</c:forTokens>
</body>
</html>
JSTL格式化标签
format标签
<%@ page import="java.util.Date" %>
<%@ page import="java.util.Locale" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/fmt" %>
</head>
<body>
<%
request.setAttribute("date",new Date());
request.setAttribute("locale", Locale.JAPAN);
%>
<%-- <c:setLocale value="${locale}"></c:setLocale> 国际化,程序可以适应不同国家的语言--%>
<c:formatDate value="${date}" pattern="yyyy-MM-dd HH : mm : ss"></c:formatDate>
</body>
</html>
以上是关于EL表达式和JSTL标签的主要内容,如果未能解决你的问题,请参考以下文章