JSTL简介
- JSTL(Java Standard Tag Library) –Java标准标签库。
- SUN公司制定的一套标准标签库的规范。
- JSTL标签库,是由一些Java类组成的。
JSTL组成
- JSTL –Core 核心标签库。 - 这是本部分的重点
- JSTL – I18N - 国际化标签库。Internationalization- I18N
- JSTL – SQL – 数据库操作标签(有悖于MVC设计模式不用不讲)。
- JSTL - Functions – 函数库。
- JSTL - XML ,对XML的操作(同SQL标签)。
- 在jstl-1.2.jar包的META-INF目录中,保存着各种tld文件的版本。请查看。
JSTL核心标签库
使用JSTL核心标签:
- 如果你的Web项目是基于JavaEE2.5或以上的。可以在你项目的任意页面上通过<%@ taglib 指令使用JSTL的核心标签库。
•<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
•uri是引用标签库的资源定位符,并不代表一个实际的地址。
•Prefix是自定义的前缀。
- 如果你的项目是JavaEE2.5以下的项目,必须在在你项目中的lib目录下,存在以下两个jar文件为:
•Jstl.jar、standard.jar
•在上面的包中,存在着jstl的tld文件,用于描述jstl标签的属性、名称、资源等信息。程序就是通过这个tld文件找到相关java类以供运行的。
•然后再在任意的JSP页面通过指令导入jstl.
JSTL-Core一共包含以下几个子标签
代码演示:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ 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=UTF-8">
<title>JSTL技术演示1</title>
</head>
<body>
1.c:out<br>
<% pageContext.setAttribute("name", "Alice"); %>
<c:out value="${name}"></c:out> ## ${name} ----发现好像c:out与EL表达式没什么区别
<br>
<c:out value="<font color='red' >湖南益阳</font>"></c:out> ## ${"<font color='red'>湖南益阳</font>" }
-----区别出来了,因为c:out的escapeXml属性默认为true 该属性为 true时可以对一些特殊符号进行转换
而EL表达式只能原样输出。
<hr>
2.c:set <br>
2.1 给基本数据类型变量设置值<br>
<c:set var="num" value="100" />
${num+100} ## ${num+0.5} <br>
2.2 给JavaBean设置值<br>
<jsp:useBean id="user" class="cn.hncu.domain.User">
<jsp:setProperty property="name" name="user" value="Jack" />
<jsp:setProperty property="age" name="user" value="22" />
</jsp:useBean>
${user.name},${user.age}<br>
<c:set target="${user}" property="name" value="Alice" />
name改为Alice: ${user.name},${user.age}<br>
<hr>
3.c:remove <br>
<c:remove var="num"/>
${empty num}
<hr>
4.c:if <br>
<c:if test="${empty num}">
没有num属性
</c:if>
<br>
两个c:if组成if,else语句:
<c:set var="userName" value="Tom" scope="session" />
<c:if test="${empty sessionScope.userName}" var="boo" scope="page">
用户名不存在
</c:if>
<br>
<%--
<!-- 当然也可以这样 -->
<c:if test="${!empty sessionScope.userName}">
--%>
<c:if test="${!boo}">
你好,${sessionScope.userName}
</c:if>
<hr>
5.c:choose,c:when,c:otherwise 相当于 if,else if,else<br>
<c:set var="score" value="85" />
<c:choose>
<c:when test="${score>=90}">优秀</c:when>
<c:when test="${score>=80}">良好</c:when>
<c:when test="${score>=70}">一般</c:when>
<c:when test="${score>=60}">及格</c:when>
<c:otherwise>不及格</c:otherwise>
</c:choose>
</body>
</html>
<%@page import="cn.hncu.domain.Car"%>
<%@page import="cn.hncu.domain.User"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ 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=UTF-8">
<title>JSTL技术演示2</title>
</head>
<body>
6.c:forEach --- 非常重要 <br>
6.1 普通for循环 <br>
<c:set var="sum" value="0" />
<c:forEach begin="1" end="10" step="1" var="i">
<c:set var="sum" value="${sum+i}" />
</c:forEach>
1+2+...+10=${sum} <br>
6.2 增强for循环 <br>
  6.2.1 遍历数组 <br>
<%
String[] strs = {"aa","bb","张三","cc"};
//注意,一定要放到容器中,否则无效
pageContext.setAttribute("strs", strs);
%>
<c:forEach items="${strs}" var="str" varStatus="vs">
    下标:${vs.index},第${vs.count}个,值:${str}<br>
</c:forEach>
  6.2.2 遍历List <br>
<%
List<Object> list = new ArrayList<Object>();
list.add(100);
list.add("Jack");
list.add("abc");
//注意,一定要放到容器中,否则无效
pageContext.setAttribute("list", list);
%>
<c:forEach items="${list}" var="obj" varStatus="vs">
    下标:${vs.index},第${vs.count}个,值:${obj}<br>
</c:forEach>
  6.2.3 遍历Map <br>
<%
Map<String,Object> map = new HashMap<String,Object>();
map.put("name", "Bob");
map.put("age", 18);
map.put("id", "u001");
//注意,一定要放到容器中,否则无效
pageContext.setAttribute("map", map);
%>
<c:forEach items="${map}" var="entry" >
    key:${entry.key},value:${entry.value}<br>
</c:forEach>
  6.2.4 遍历JavaBean的List <br>
<%
List<Car> cars = new ArrayList<Car>();
cars.add( new Car("c001","宝马") );
cars.add( new Car("c002","奔驰") );
cars.add( new Car("c003","奥迪") );
pageContext.setAttribute("cars", cars);
%>
<c:forEach items="${cars}" var="car">
    ${car.no},${car.name} <br>
</c:forEach>
<hr>
7. c:forTokens标签: 字符串拆分 <br>
<c:forTokens items="a,bc,def,xx x" delims="," var="str">
${str} #
</c:forTokens>
<hr>
8. c:import标签: 动态导入 <br>
<c:import url="import.jsp" charEncoding="utf-8" />
<hr>
9. c:url标签: 重写url, 以后开发时的后台地址都用这种方式写,非常保险,也简单(斜杠代表项目根目录)! <br>
<c:url value="/jsps/jstl2.jsp" />
<hr>
10. c:redirect标签: 重定向。<br>
注释了,不然当前也就显示不了了。
<%--
<c:redirect url="/" />
--%>
<div style="height: 400px"></div>
</body>
</html>