Jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!--输出,条件,迭代标签库-->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="fmt"%> <!--数据格式化标签库-->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="sql"%> <!--数据库相关标签库-->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="fn"%> <!--常用函数标签库-->
<%@ page isELIgnored="false"%> <!--支持EL表达式,不设的话,EL表达式不会解析-->
<!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></title>
</head>
<body>
<h1>out标签</h1>
<!-- 输出aaa -->
<c:out value="aaa"></c:out>
<br>
<!-- 输出后台传入值 -->
<c:out value="${title}"></c:out>
<br>
<!-- 输出后台传入值,如果${name}是空值,则显示default的值 -->
<c:out value="${name}" default="王明"></c:out>
<br>
<!-- 输出后台传入值,当escapeXml为false,不会转换“<”、“>”。会按照js语法解析值,
比如后台传过来的值是:<script>alert('hello');</script>,页面会弹窗,默认值是true
这可能会受到JavaScript攻击 -->
<c:out value="${alert}" default="xxx" escapeXml="true" />
<br>
<h1>set标签</h1>
<!-- 有以下两种格式, 在pageContext中添加name为a,value为hello的数据(如果没有给定scope,默认情况是page,即本页面) -->
<c:set var="a" value="hello"/>
<c:out value="${a}" />
<c:set var="user">
Sheriff, Bartender, Cowgirl
</c:set>
<c:out value="${user}" />
<br>
<!-- 在session中添加name为a,value为hello的数据。 -->
<c:set var="aa" value="hello1" scope="session"/>
<c:out value="${aa}" />
<br>
<!-- 删除所有域中name为a的数据 -->
<c:remove var="a"/>
<c:out value="${a}" />
<br>
<!-- 删除pageContext中name为a的数据,但是aa是存放在session作用域中,所以依然会打印输出 -->
<c:remove var="aa" scope="page"/>
<c:out value="${aa}" />
<br>
<!-- 测试set的作用范围域 -->
<!--
在 EL 中,与隐式对象无关联的标识符被认为是存储在四个 JSP 作用域中的名称对象。
首先对页面作用域检查是否存在这样的标识符,其次对请求作用域、然后对会话作用域、最后对应用程序作用域依次进行这样的检查,
然后测试该标识符的名称是否与存储在该作用域中的某个对象的名称匹配。
第一个这样的匹配作为 EL 标识符的值被返回。通过这种方法,可以将 EL 标识符看作引用限制了作用域的变量。
查找顺序:page → request → session → application
-->
<c:set var="b" value="b1" scope="page" />
<c:set var="b" value="b2" scope="request" />
<c:out value="${b}"></c:out>
<br>
<c:set var="c" value="c1" scope="request" />
<c:set var="c" value="c2" scope="session" />
<c:set var="c" value="c3" scope="application" />
<c:out value="${c}"></c:out>
<br>
<h1>url标签</h1>
<!-- url标签,value默认根目录是项目名称 -->
<a href="<c:url value="/jstl/jstl1.jj"/>">TEST</a>
<br>
<!-- 带参数的url标签 -->
TEST1
<c:url value="/jstl/jstl1.jj">
<c:param name="username" value="abc"/>
<c:param name="password" value="123"/>
</c:url>
<br>
<!-- if 标签 if标签的test属性必须是一个boolean类型的值,如果test的值为true,那么执行if标签的内容,否则不执行 -->
<h1>if标签</h1>
<c:set var="a" value="abc" />
<c:if test="${not empty a}">
<c:out value="${a}"/>
</c:if>
<br>
<h1>choose标签</h1>
<!-- choose标签 相当于 Java的 if/esle,当所有when标签的test都为false时,才会执行otherwise标签的内容。 -->
<c:choose>
<c:when test="${score > 100 || score < 0}">错误的分数:${score }</c:when>
<c:when test="${score >= 90 }">A级 ${score} </c:when>
<c:when test="${score >= 80 }">B级 ${score} </c:when>
<c:when test="${score >= 70 }">C级 ${score} </c:when>
<c:when test="${score >= 60 }">D级 ${score} </c:when>
<c:otherwise>E级</c:otherwise>
</c:choose>
<br>
<h1>forEach标签</h1>
<!-- forEach 循环 ,注意:items="${list}" 引号总不能留有空格, items="${list} " 例如这样会出错-->
<c:forEach var="item" items="${list}" varStatus="vs">
<c:if test="${ vs.first}">第一行:${item}</c:if>
<c:if test="${vs.last }">最后一行:${item}</c:if>
<c:out value="第${vs.count }行: "/>
<c:out value="[${vs.index }]: "/>
<c:out value="name: ${vs.current }"/><br>
</c:forEach>
<br>
<!-- forEach 循环map -->
<c:forEach var="item" items="${ns}">
<c:out value="key: ${item.name1}"/> <c:out value="value: ${item.name2}"/><br/>
</c:forEach>
</body>
</html>
Java
package com.maven.controller.jstl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/jstl")
public class JstlController {
@RequestMapping(value="/jstl1")
public ModelAndView jstl1(){
ModelAndView result = new ModelAndView("a");
List<String> list = new ArrayList<String>();
list.add("java");
list.add("C");
list.add("123");
list.add("C#");
List<Map<String,Object>> names = new ArrayList<Map<String,Object>>();
Map<String,Object> map = new HashMap<>();
map.put("name1", 11);
map.put("name2", 22);
names.add(map);
Map<String,Object> map1 = new HashMap<>();
map1.put("name1", 111);
map1.put("name2", 222);
names.add(map1);
result.addObject("ns", names);
result.addObject("list", list);
result.addObject("title", "李磊");
result.addObject("alert", "<script>alert('hello');</script>");
result.addObject("score", 80);
return result;
}
}