前面为JSTL中的常用EL函数,后面的为具体演示实例!
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标签-有悖于MVC设计模式),现在都不用这个。
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一共包含以下几个子标签:
<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(‘’..)
JSTL标签-out:
属性名 可选值 说明 value EL表达式、java表达式、或直接字符串 需要输出的内容 escapeXml true | false 是否将html转成<>&quat;等输出。 default 默认值 如果value内容不存在时则输出默认值
<c:out value=…/>用于在页面上输出结果。 <c:out value=“${requestScope.name}”/> -将request中的name值输出 <c:out value=“${param.username}”/> - 用于将参数输出到页面上。 <c:out value=“${name}” default=“hello”/>从page到application开始查找,如果没有找到,就显示默认值hello. 另一种设置默认值的方式: <c:out value=“${name}”> Default-value-默认值。 </c:out> 只有当要求的信息为null或不存在时才会输出默认值。 excapeXml属性:默认值为true,用于将html等标签转换成<等转换元素,示例: <% String name="<font color='red'>Red</font>"; pageContext.setAttribute("name",name); %> <c:out value=“${name}” escapeXml=“false”></c:out> 不对xml或html进行转换,直接输出,这样就会在页面上看到红色的Red字符,因为浏览器会解析html数据。
JSTL-Core的演示:(通常命名为c命名空间)
—–jstl.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body> <h1>JSTL技术演示</h1> <!-- c:out --> <% pageContext.setAttribute("name", "Tom"); pageContext.setAttribute("name2", "<font color='red'>Tom</font>"); %> <c:out value="${name}"></c:out><br/> ${name}<br/> <c:out value="${name2}" escapeXml="true" /><br/> ${name2}<br/> <!-- c:if --> <c:if test="${20>10}" var="boo" scope="session"> OKOK<br/> </c:if> <!-- 想要用if-else 就这样再用一句 --> <c:if test="${!boo}"> NONO<br/> </c:if> <br/><!-- 用El中的问号表达式能输出简单的if-else --> ${ 20>10?"yes":"no" }<br/> <hr/> <!-- forEach --> <% List list = new ArrayList(); list.add("aaaaa111"); list.add("bbbbb222"); list.add(200); list.add(100); request.setAttribute("list", list); %> <table border="1px"> <c:forEach items="${list}" var="li"> <tr> <td>:: ${li}</td> </tr> </c:forEach> </table> <% Map<String,Object> map = new HashMap<String,Object>(); map.put("name", "Pose"); map.put("age", 55); map.put("tel", "12345678911"); pageContext.setAttribute("map", map); %> <br/> <c:forEach items="${map}" var="m"> ${m.key} = ${m.value}<br/> </c:forEach> <% String strs[] = {"aaa","bbb","ccc","ddd"}; pageContext.setAttribute("strs", strs); %> <br/> <c:forEach items="${strs}" var="str"> ${str}, </c:forEach> <br/> <h3>看看forEach标签中的varStatus属性---idx.index是输出元素的下标(从begin开始的),idx.count是元素的计数(从1开始)</h3> <c:forEach items="${strs}" var="str" varStatus="idx"> ${str}---index = ${idx.index} --- count=${idx.count}<br/> </c:forEach> <!-- forEach的普通循环功能 --> <c:forEach begin="20" end="40" var="i" step="2" varStatus="idx"> ${i} -- ${idx.index} -- ${idx.count}<br/> </c:forEach> <br/> <!-- c:set设置属性,默认作用域:pageScope --> <c:set var="aa" value="abc123" /> <c:set var="aa" value="cccc222" scope="request"/> ${aa},${requestScope.aa}<br/> <br/> <!-- c:remove 删除属性,默认作用域:pageScope,request等4个容器! --> <!-- 也就是,如果不设置作用域(scope属性),则那4个容器中的属性都会被清除,如果写了,则只清除指定作用域的属性 --> <c:remove var="aa" scope="request"/> ${aa},${requestScope.aa}<br/> <!-- c:choose,c:when,c:otherwise --> <!-- 类似Java中的switch-case-default而且每项自动带break --> <c:set var="score" value="98"></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:otherwise> 不合格 </c:otherwise> </c:choose> <br/> <!-- c:forTokens 用分隔符去拆分字符串 --> <c:forTokens items="aa,ds,sdf,df,dddd,sss" delims="," var="str"> ${str} </c:forTokens> <br/> <!-- c:import 导入资源,相当于动态包含,共享同一个request,但是在不同的类 --> <c:import url="/jsps/b.jsp"></c:import> <br/> <!-- c:redirect 重定向,相当于response.sendRedirect(...) --> <%-- <c:redirect url="/jsps/a.jsp"></c:redirect> --%> <br/><br/><br/><br/> </body> </html>
—–b.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> </head> <body> <h3>这是被动态导入的页面内容...b.jsp...</h3> </body> </html>
a.jsp就不写出来了,那个只是为了演示一些JSTL的重定向。a.jsp的源码没意义。
—–演示结果: