JSTL与EL表达式
- JSTL一般要配合EL表达式一起使用,来实现在jsp中不出现java代码段。
- EL是指Expression Language简称:主要用于查找作用域中的数据,然后对它们执行简单操作
- JSTL(JSP Standard Tag Library,JSP标准标签库)
- 作用是能够减少我们在jsp中写java代码
核心标签
格式化标签
- 使用JSTL, javaEE1.4平台则必须引用jstl.jar和 standard.jar两个包;(eclipse必须要导包)
EL表达式
1.概念以及作用
- 概念:EL是指Expression Language简称
- 作用:主要用于查找作用域中的数据,然后对它们执行简单操作
EL是取值用的,会从page、request、session、application
基本用法:${name}
标准写法: ${变量名}
代码展示:
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="cn.gok.User"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<!-- el 表达式 作用 : 存取作用域里面的值 还可以进行一些操作 -->
<!-- 标准写法 ${变量名} -->
<%
//普通变量
request.setAttribute("name", "ccgok");
//存一个对象
User u = new User();
u.setName("uanme");
request.setAttribute("u", u);//怎么获取他的名字
Map<String, String> map = new HashMap<>();
map.put("aaa", "aaavalue");
request.setAttribute("map", map);
//
%>
<%-- ${name} --%>
<%-- ${u.name} [默认是从request request没有 回去session sesison 没有 再去 application]
--%>
<!-- 也可以用中括号 但是属性要加引号 ${u["name"]} 获取名字是u这个对象的name属性-->
<%-- ${u["name"]} --%>
<!-- 获取map的某个value的时候 必须使用中括号 -->
${map["aaa"] }
<!-- el的 非空判断 ${empty 变量名 } 空就返回true 非空就false-->
${empty u}
<!-- 亦可以在查找的时候 指定作用域 -->
${sessionScope.map["aaa"] }
</body>
</html>
2.运算符
- 算术运算符 +、-、*、/(或 div)和 %(或 mod)
- 关系运算符 ==(或eq)、!=(或ne)、<(或lt)、>(或gt)、<=(或le) 和 >=(或ge)
- 逻辑运算符 &&(或 and)、||(或or)和 !(或 not)
- 验证运算符(重要)
${empty name}
JSTL
概念以及作用
概念
JSTL(JSP Standard Tag Library,JSP标准标签库)
作用
能够减少我们在jsp中写java代码
怎么使用?
JSTL一般要配合EL表达式一起使用,来实现在jsp中不出现java代码段。
1导入包
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
2在jsp页面前进入
<%@ taglib prefix="cc" uri="http://java.sun.com/jsp/jstl/core"%>
JSP的标签分为核心标签和格式标签
Core的操作作用域变量标签
- 输出 out 用于输出,value 输出的值
<c:out value="11111"></c:out>
- 设置变量 set var=""
<c:set var="aaa" value="1111" ></c:set>
- 移除变量 remove var=""
<c:remove var="aaa"/>
代码展示:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!-- 导入 jstl那句话 prefix 是前缀 uri 该标签库的地址 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%-- 获取输出作用域中变量.
<c:out > 属性: value [default] [escapeXml]
定义作用域中变量
<c:set > 属性: value var [scope]
删除作用域中变量
<c:remove > 属性: var [scope] --%>
<%
//普通变量
request.setAttribute("name", "ccgok");
//
%>
<c:out value="11111"></c:out>
还可以输出el表达式中的值
<br>
<c:out value="${name }"></c:out>
<!-- 变量名字用的var -->
<c:set var="aaa" value="1111" ></c:set>
<br>
<!-- 删除作用域中变量 -->
<c:remove var="aaa"/>
<c:out value="${aaa}"></c:out>
</body>
</html>
Core的条件控制标签
if
单分支 <c:if>
<%
request.setAttribute("ii", 10);
%>
<!-- c:if test="" test跟条件 条件满足就执行if里面的东西 判断的条件要写在${} -->
<c:if test="${ii>3}">输出10大于3</c:if>
<c:if test="${empty ii}">null</c:if>
多分支 <c:choose><c:when> <c:otherwise>
<!-- <if else if() else if() -->
<c:choose>
<c:when test="${ii <= 0}">
太惨了。
</c:when>
<c:when test="${ii > 1000}">
不错的薪水,还能生活。
</c:when>
<c:otherwise>
什么都没有。
</c:otherwise>
</c:choose>
整体代码展示:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!-- 导入 jstl那句话 prefix 是前缀 uri 该标签库的地址 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
request.setAttribute("ii", 10);
%>
<!-- c:if test="" test跟条件 条件满足就执行if里面的东西 判断的条件要写在${} -->
<c:if test="${ii>3}">输出10大于3</c:if>
<c:if test="${empty ii}">null</c:if>
<!-- <if else if() else if() -->
<c:choose>
<c:when test="${ii <= 0}">
太惨了。
</c:when>
<c:when test="${ii > 1000}">
不错的薪水,还能生活。
</c:when>
<c:otherwise>
什么都没有。
</c:otherwise>
</c:choose>
</body>
</html>
循环(重要) <c:forEach>
<!-- c:foreach 用来遍历集合或者数组的 items 要遍历的集合 var每次遍历得到的数据 -->
<c:forEach items="${arr}" var="a">
<c:out value="${a }"></c:out>
</c:forEach>
<c:forEach> 属性:var,items,varStatus,begin,end,step
<%
request.setAttribute("i", 11);
int[] array = { 1, 2, 3, 4, 5 };
request.setAttribute("arr", array);
List<String> lists = new ArrayList<>();
lists.add("a");
lists.add("b");
lists.add("c");
request.setAttribute("lists", lists);
%>
<!-- c:foreach 用来遍历集合或者数组的 items 要遍历的集合 var每次遍历得到的数据 -->
<c:forEach items="${arr}" var="a">
<c:out value="${a }"></c:out>
</c:forEach>
<br>
<!-- varStatus 只是varStatus作用域变量中存的是包括运行状态的对象;此对象包含如下属性:
current index(当前元素的下标) count first last begin end step
-->
<c:forEach items="${lists }" var="i" varStatus="o">
<c:out value="${i } "></c:out>
<c:out value="${o.index } "></c:out>
</c:forEach>
<!-- foreach 写一个简单的循环 (用的不多)-->
<c:forEach begin="0" end="10" step="3">
<c:out value="11111,"></c:out>
</c:forEach>
整体代码展示:
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!-- 导入 jstl那句话 prefix 是前缀 uri 该标签库的地址 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
request.setAttribute("i", 11);
int[] array = { 1, 2, 3, 4, 5 };
request.setAttribute("arr", array);
List<String> lists = new ArrayList<>();
lists.add("a");
lists.add("b");
lists.add("c");
request.setAttribute("lists", lists);
%>
<!-- 跟java的 if else if(条件) else -->
<c:choose>
<c:when test="${i==10 }">==10</c:when>
<c:when test="${i>10 }">大于10</c:when>
</c:choose>
<c:choose>
<c:when test="${i<= 0}">太惨了。</c:when>
<c:when test="${i > 1000}">不错的薪水,还能生活。</c:when>
</c:choose>
<br>
<!-- c:foreach 用来遍历集合或者数组的 items 要遍历的集合 var每次遍历得到的数据 -->
<c:forEach items="${arr}" var="a">
<c:out value="${a }"></c:out>
</c:forEach>
<br>
<!-- varStatus 只是varStatus作用域变量中存的是包括运行状态的对象;此对象包含如下属性:
current index(当前元素的下标) count first last begin end step
-->
<c:forEach items="${lists }" var="i" varStatus="o">
<c:out value="${i } "></c:out>
<c:out value="${o.index } "></c:out>
</c:forEach>
<!-- foreach 写一个简单的循环 (用的不多)-->
<c:forEach begin="0" end="10" step="3">
<c:out value="11111,"></c:out>
</c:forEach>
</body>
</html>
在JSP中使用format标签
格式化数字
格式化时间
<%
request.setAttribute("date", new Date());
request.setAttribute("num", 100.123214);
%>
<!-- f:formatDate 格式化时间 value 要格式化的值 pattern 格式化字符串 -->
<f:formatDate value="${date }" pattern="yyyy/MM/dd HH:mm:ss" />
<!-- .## 表示保留三位小数 -->
<f:formatNumber value="${num}" pattern=".##"></f:formatNumber>