如果你的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一共包含以下几个子标签:
<c:out> ${name} | 输出标签 |
<c:set> pageContext.setAttirbute(key,value,scope); | 声明标签 |
C:remove | 删除某个范畴内的数据 |
<c:if> | 判断c:else,c:elsfif |
<c:choose><c:when><c:otherwise> | 判断分枝c:if,c:else if c: |
<c:forEach> | 遍历 |
<c:forTokens> | 分隔 |
<c:import> | 导入其他资源,相当于动态包含共享同一个request |
<c:url> | 重写url |
<c:redirect> | 重定向 response.sendRedirect(‘’..) |
1.JSTL标签-out:
属性名 | 可选值 | 说明 |
value | EL表达式、java表达式、或直接字符串 | 需要输出的内容 |
escapeXml | true | false | 是否将html转成<>&quat;等输出。 |
default | 默认值 | 如果value内容不存在时则输出默认值 |
<!--1. c:out标签-输出表达式或者标识符的值,功能和${表达式}类似,区别体现在"default"和"escapeXml" -->
<%
//按照MVC模式应该是要在servlet中封装数据,在jap中只是读取
pageContext.setAttribute("name", "dragon");
%>
${name} <br/>
<c:out value="${name}"></c:out> <br/>
<!-- default属性的功能:当变量aa为空时,输出属性值 -->
<c:out value="${aa}" default="none"></c:out> <br/>
<!-- escapeXml属性的功能:默认属性值为true,此时不对value值进行编码 -->
<%
pageContext.setAttribute("str", "<font color='red'>dragon_Dai</font>");
%>
${str} <br/>
<c:out value="${str}" escapeXml="false"></c:out> <br/><br/>
2<c:set/>-声明一个变量
属性 | 值类型 | 说明 |
var | Java.lang.String | 声明的变量名 |
value | EL,Scriptless,或是直接的字符串 | 变量的值 |
scope | String | 存在的范围,可选植为:page|request|session|application |
target | Map或是JavaBean | 要设置属性值的Map或是javaBean |
property | String | JavaBean或是Map的value值。 |
<!--2.c:set功能类似:pageContext.setAttribute(key,value,scope) -->
<!-- 给JavaBean设置属性 -->
<jsp:useBean id="user" class="cn.hncu.domain.User"></jsp:useBean>
<c:set target="${user}" property="name" value="dragon"></c:set>
<c:set target="${user}" property="age" value="21"></c:set>
<c:set target="${user}" property="pwd" value="1234"></c:set>
<c:out value="${user}"></c:out> <br/><br/>
<!-- 给普通变量设置属性值类似于:var sum=200; -->
<c:set var="sum" value="200" scope="session"></c:set>
<c:out value="${sum}"></c:out> <br/><br/>
3.<c:if> - 判断标签
属性 | 类型 | 说明 |
test | 返回true或false的表达式 | 用于判断是否进入标签体执行代码。 |
var | String | 将判断的结果保存到此变量名中。 |
scope | String | 将变量存放的范围 |
<!-- 3.c:if 用于判断控制 -->
<c:set var="age" value="21"></c:set>
${age>20 ? "old":"young"} <br/>
<!-- if -->
<c:if test="${age>20}">
old
</c:if>
<br/>
<!-- if-else -->
<c:if test="${age>20}" var="boo">
old
</c:if>
<br/>
<c:if test="${!boo}" var="boo">
young
</c:if>
<br/>
4.c:remove-从容器中移除指定的容器
age:<c:out value="${age}"></c:out> <br/>
<!-- 默认容器为page,也可以指定容器 -->
remove:<c:remove var="age" scope="page"/> <br/>
age:<c:out value="${age}"></c:out> <br/>
5.c:choose、c:when、c:otherwise
这几个标签共同使用可以实现Java中的if…else语句的功能
<c:set var="score" value="88" scope="session"></c:set>
<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>
6.c:forTokens:对集合数据按指定的字符拆分
<c:forTokens items="aa,dd,a1,a2,a3" delims="," var="x">
${x}
</c:forTokens>
7.c:forEach:循环的功能
属性 | 类型 | 说明 |
var | String | 迭代变量 |
items | 集合类或对像数组 | 需要迭代的对像 |
begin | int | 开始下标 |
End(包含) | int | 结束下标 |
step | int | 步长 |
varStatus index,count | String | 迭代下标变量,用于记录已经迭代到了第几个元素。 |
<!-- 7.1普通循环的功能 -->
<c:forEach begin="1" end="10" step="2" var="i">
${i}
</c:forEach>
<br/>
<!-- 7.2增强for循环的功能 1)遍历数组 -->
<%
String strs[]={"aa","bb","cc"};
pageContext.setAttribute("strs", strs);
%>
<h3>遍历数组</h3>
<c:forEach items="${strs}" var="s">
${s},
</c:forEach>
<br/>
<!-- 7.2增强for循环的功能 2)遍历list -->
<%
List<Object> list=new ArrayList<Object>();
list.add("aa");
list.add(21);
pageContext.setAttribute("list", list);
%>
<h3>遍历list</h3>
<c:forEach items="${list}" var="x">
${x},
</c:forEach>
<br/>
<!-- 7.2增强for循环的功能 3)遍历map -->
<%
Map<Object,Object> map=new HashMap<Object,Object>();
map.put("name","dragon");
map.put("age","21");
map.put("addr","邵阳");
pageContext.setAttribute("map", map);
%>
<h3>遍历map</h3>
<c:forEach items="${map}" var="en">
${en},
</c:forEach>
<br/>
<h3>遍历map:输出key、value</h3>
<c:forEach items="${map}" var="en">
${en.key},${en.value} <br/>
</c:forEach>
<br/>
<!-- 7.2增强for循环的功能 4)遍历JavaBean的集合 -->
<h3>遍历JavaBean的集合</h3>
<%
List<User> users=new ArrayList<User>();
users.add(new User("dragon","1234",21));
users.add(new User("龙","1234",21));
pageContext.setAttribute("users", users);
%>
<c:forEach items="${users}" var="user" varStatus="idx">
varStatus:<c:out value="${idx}"></c:out> <br/>
<!-- 用于弥补相对普通循环缺少的索引 -->
idx.index:<c:out value="${idx.index}"></c:out> <br/>
idx.count:${idx.count} <br/>
user:<c:out value="${user}"></c:out> <br/>
user.name:<c:out value="${user.name}"></c:out>,
user.pwd:<c:out value="${user.pwd}"></c:out>,
user.age:<c:out value="${user.age}"></c:out> <br/>
<br/>
</c:forEach>
8.c:import 动态导入
<!-- 8.c:import 动态导入 -->
<c:import url="insert.jsp"></c:import>
<br/>
9.c:url 重写url:且路径是项目根目录开始--同后台的路径
<!-- 9.c:url 重写url:且路径是项目根目录开始--同后台的路径 -->
<!-- 以后开发是的JSP页面路径都采用c:url的方式来写 -->
<a href='<c:url value="/jsps/2.jsp"></c:url>'>调到演示2</a> <br/>
<a href='<c:url value="/ShowServlet"></c:url>'>访问后台servlet</a>
10.c:redirect 重定向:
注意以下3点:
注意1:该行代码一执行就调到结果页面去了。
注意2:url地址中以"/"起始即项目根目录开始
注意3:这个标签的url地址 c:url