1.EL的作用
JSP2.0要把html和css分离、要把html和javascript分离、要把Java脚本替换成标签。标签的好处是非Java人员都可以使用。
JSP2.0 – 纯标签页面,即:不包含<% … %>、<%! … %>,以及<%= … %>
EL(Expression Language)是一门表达式语言,它对应<%=…%>。我们知道在JSP中,表达式会被输出,所以EL表达式也会被输出。
2.EL的格式
格式:${…}
3.关闭EL
如果希望整个JSP忽略EL表达式,需要在page指令中指定isELIgnored=”true”。
如果希望忽略某个EL表达式,可以在EL表达式之前添加“\”,例如:${1 + 2}。
4.运算符
+ 加
- 减
* 乘
/或div 除
%或mod 取余
==或eq 等于
!=或ne 不等于
<或lt 小于
>或gt 大于
<=或le 小于等于
>=或ge 大于等于
&&或and 并且
!或not 非
||或or 或者
empty 是否为空
注:EL不显示null
当EL表达式的值为null时,会在页面上显示空白,即什么都不显示
5.el操作list array map
1.操作List和数组: list[0]、 {arr[0]};
2.操作bean的属性: person.name、 {person[‘name’]},对应person.getName()方法;
3.操作Map的值: map.key、 {map[‘key’]},对应map.get(key)。
6.EL内置对象
EL一共11个内置对象,无需创建即可以使用。这11个内置对象中有10个是Map类型的,最后一个是pageContext对象。
1.pageScope
2.requestScope
3.sessionScope
4.applicationScope
5.param;
6.paramValues;
7.header;
8.headerValues;
9.initParam;
10.cookie;
11.pageContext;
7.域相关内置对象
域内置对象一共有四个:
1.pageScope: pageScope.name等同与pageContext.getAttribute(“name”);2.requestScope: {requestScope.name}等同与request.getAttribute(“name”);
3.sessionScoep: sessionScope.name等同与session.getAttribute(“name”);4.applicationScope: {applicationScope.name}等同与application.getAttribute(“name”);
1.如果在域中保存的是JavaBean对象,那么可以使用EL来访问JavaBean属性。因为EL只做读取操作,所以JavaBean一定要提供get方法,而set方法没有要求。
2.全域查找:${person}表示依次在pageScope、requesScopet、sessionScope、appliationScope四个域中查找名字为person的属性。
8.请求参数相关内置对象
param和paramValues这两个内置对象是用来获取请求参数的。
1.param:Map<String,String>
类型,param对象可以用来获取参数,与request.getParameter()方法相同。不过el表达式不会输出null
2.paramValues:paramValues是Map<String, String[]>
类型,当一个参数名,对应多个参数值时可以使用它。
9.请求头相关内置对象
header和headerValues是与请求头相关的内置对象:
1.header:Map<String,String>
类型,用来获取请求头。
2.headerValues:headerValues是Map<String,String[]>
类型。当一个请求头名称,对应多个值时,使用该对象。
10.应用初始化参数相关内置对象
initParam:initParam是
Map<String,String>
类型。它对应web.xml文件中的<context-param>
参数。
11.Cookie相关内置对象
cookie:cookie是
Map<String,Cookie>
类型,其中key是Cookie的名字,而值是Cookie对象本身。
12.pageContext对象
pageContext:pageContext是PageContext类型!可以使用pageContext对象调用getXXX()方法,例如pageContext.getRequest(),可以${pageContext.request}。也就是读取JavaBean属性!!!
13.EL函数库
1.EL函数库是由第三方对EL的扩展
2.EL函数库就是定义一些有返回值的静态方法。然后通过EL语言来调用它们!当然,不只是JSTL可以定义EL函数库,我们也可以自定义EL函数库。
3.EL函数库中包含了很多对字符串的操作方法,以及对集合对象的操作。
14.使用el函数库需要导入标签库
因为是第三方的东西,所以需要导入。导入需要使用taglib指令!
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
15.EL函数库介绍
1.String toUpperCase(String input):
2.String toLowerCase(String input):
3.int indexOf(String input, String substring):
4.boolean contains(String input, String substring):
5.boolean containsIgnoreCase(String input, String substring):
6.boolean startsWith(String input, String substring):
7.boolean endsWith(String input, String substring):
8.String substring(String input, int beginIndex, int endIndex):
9.String substringAfter(String input, String substring):hello-world, “-“
10.substringBefore(String input, String substring):hello-world, “-“
11.String escapeXml(String input):把字符串的“>”、“<”。。。转义了!
12.String trim(String input):
13.String replace(String input, String substringBefore, String substringAfter):
14.String[] split(String input, String delimiters):
15.int length(Object obj):可以获取字符串、数组、各种集合的长度!
16.String join(String array[], String separator):
jstl标签库
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
request.setAttribute("basePath", basePath);
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'MyJsp.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
out标签:<br>
<c:out value="aaa" /><br>
<c:out value="${basePath}"/><br>
<c:out value="${aa }" default="bbb"/><br>
<%
request.setAttribute("a", "<script> 这里会运行js代码</script>");
%>
<c:out value="${a}" escapeXml="false"/><br>
set标签:<br>
<c:set scope="session" value="value" var="name"/><br>${name }
remove标签:<br>
<c:remove var="name"/><br>${name}<br>
url标签:会自动进行url重写<br>
项目路径: <c:url value="/"/><br>
路径保存到a中<c:url value="/" var="a" scope="request"/>${a }<br>
输出servlet路径<c:url value="/servlet1" /><br>
输出路径参数<c:url value="/servlet1" >
<c:param name="username">zhang</c:param>
<c:param name="password">dong</c:param>
</c:url>
<br>
if标签:<br>
<c:if test="${not empty a }">
<c:out value="${a }"></c:out>
aaaa
</c:if>
<c:set value="10" var="aa"></c:set>
if else if else标签:<br>
<c:choose>
<c:when test="${ 0>aa }"> 你好,我是负数 </c:when>
<c:when test="${ aa>10}">你好我大于10</c:when>
<c:otherwise>你好我大于等于0小于等于10</c:otherwise>
</c:choose>
<br>
foreach for循环 标签:<br>
<c:forEach var="ii" begin="1" end="20" step="5" >
${ii }<Br>
</c:forEach>
<%
String arr[] = {"123","456","789"};
request.setAttribute("arr", arr);
Map map =new HashMap();
map.put("name", "name");
map.put("pwd", "pwd");
request.setAttribute("map", map);
request.setAttribute("data", new Date());
%>
<br>
foreach 遍历数组 标签:<br>
<c:forEach var="it" items="${arr}" >
<c:out value="${ it}"></c:out>
</c:forEach><br>
foreach 遍历map 标签:<br>
<c:forEach var="item" items="${map }" varStatus="vs">
<c:out value="${item.key }:${item.value }"></c:out>${item.key }:${item.value } <br>
<c:if test="${vs.first }">
${item.key }:${item.value }
</c:if>
<br>
</c:forEach>
时间格式化 标签:<br>
<fmt:formatDate value="${data }" pattern="YYYY-MM-DD hh:mm:ss"/><br>
数字格式化标签:<br>
<fmt:formatNumber value="2.0" pattern="0.00"/><br>
<fmt:formatNumber value="2000.0000" pattern="#.##"/><br>
</body>
</html>