编程爱好者联盟 2017-03-19
JSTL(jsp standard tag Library) jsp标准标签库,它是apache对el表达式的扩展,jstl与el结合可以完成更强大的功能。
JSTL它是一种标签语言,它不是jsp内置标签,所以在使用JSTL需要导入相关的jar包。
核心标签库一共有12个:
| 标签名 | 功能 | 备注 |
<body>
<c:set scope="request" value="tom" var="name"></c:set>
<%--上述jstl标签相当于是request.setAttribute("name","tom") --%>
${requestScope.name}
<%--
scope:域范围
value:设置值
var:设置的名称
--%>
<br>
<%
User user = new User();
user.setUsername("fox");
request.setAttribute("user", user);
%>
<c:set property="username" target="${user}" value="james" />
${user.username}
<%--
上述的jstl代码,相当于 从request域中获了到user对象, 并给user对象赋值username=james, 备注,User是一个实体类,
user.setUser("james");
--%>
</body> <body>
<c:if test="false">
hello
</c:if>
<hr>
<%
request.setAttribute("a", 10);
request.setAttribute("b", 20);
%>
<c:if test="${a>b}"> <!--这个地方不能写${a}>${b}, 也不能写${a>${b}}-->
${a }
</c:if>
<c:if test="${a<b}">
${b }
</c:if>
<%--
if标签必须有test属性,并且它的值必须是true/false
--%>
</body> c:forEach基本使用1
<br>
<c:forEach begin="1" end="10" var="n" step="1">
${n}<br>
</c:forEach>
<%--
上述代码相当于是
for(int n=1;n<=10;n++){
out.println(n);
}
begin:循环开始变量
end:循环结束变量
var:定义一个变量,用于接收循环
step:步长
--%>
<hr>
c:forEach基本使用2
<br>
<c:forEach begin="1" end="10" var="n" step="1" varStatus="vs">
${n}--${vs.count }--${vs.index}--${vs.first}--${vs.last}--${vs.current}<br>
</c:forEach>
<%--
varStatus它是用于记录循环状态,它是一个对象,可使用的属性有
count:用来记录循环的元素的个数
index:用来记录所循环的容器中的元素的下标
first:判断当前是否是第一个元素
last:判断当前是否是最后一个元素
current:代表当前循环的元素
--%>
</body><body>
c:forEach高级使用:
<hr>
<h1>遍历数组</h1>
<%
String[] st = { "aaa", "bbb", "ccc" };
request.setAttribute("st", st);
%>
<c:forEach items="${st}" var="s" varStatus="vs">
${s}---${vs.index }<br>
</c:forEach>
<%--
items:用于接收一个容器
var:它是用于接收从容器中迭代出来元素
上面代码相当于增强for循环
for(String s:st){
}
--%>
<hr>
<h1>遍历List集合</h1>
<%
List<String> list = new ArrayList<String>();
list.add("111");
list.add("222");
list.add("333");
request.setAttribute("list", list);
%>
<c:forEach items="${list}" var="n">
${n}<br>
</c:forEach>
<hr>
<h1>遍历Map集合</h1>
<%
Map<String,String> map=new HashMap<String,String>();
map.put("one", "111");
map.put("two", "222");
request.setAttribute("map", map);
%>
<c:forEach items="${map}" var="entry">
${entry.key}--${entry.value}<br>
</c:forEach>
<%--
对map集合遍历,它相当于是使用entrySet()方法遍历
Set<Map.Entry<String,String>> entry=map.entrySet();
for(Map.Entry<String,String> me:entry){
me.getKey() me.getValue():
}
--%>
</body> <body>
<%
request.setAttribute("msg", "<font color='red'>hello world</font>");
%>
<c:out value="${msg}" default="good" escapeXml="true"/>
<%--
value:代表要输出的信息
default:默认值
escapeXml:它的值如果是false,信息会被浏览器解析,如果为true,代表信息原样输出。
--%>
</body> <body>
<%
User user = new User();
user.setUsername("fox");
request.setAttribute("user", user);
%>
${user} <!-- 获取user并打印 -->
<c:remove var="user" scope="request"/>
<%--上述代码相当于 request.removeAttribute("user")--%>
${user} <!-- 这里获取不到user,因为已经被删除了 -->
</body> <body>
<c:redirect context="/jstl" url="/demo1.jsp"/>
<%--
相当于response.sendRedirect("/jstl/demo1.jsp");
--%>
</body> <body>
<%
int day = 50;
switch (day) {
case 1:
out.println("周1");
break;
case 2:
out.println("周2");
break;
case 3:
out.println("周3");
break;
case 4:
out.println("周4");
break;
case 5:
out.println("周5");
break;
case 6:
out.println("周6");
break;
case 7:
out.println("周7");
break;
default:
out.print("无此天");
}
%>
<hr>
<%
request.setAttribute("day", 50);
%>
<c:choose>
<c:when test="${day==1}">周1</c:when>
<c:when test="${day==2}">周2</c:when>
<c:when test="${day==3}">周3</c:when>
<c:when test="${day==4}">周4</c:when>
<c:when test="${day==5}">周5</c:when>
<c:when test="${day==6}">周6</c:when>
<c:when test="${day==7}">周7</c:when>
<c:otherwise>
无此天
</c:otherwise>
</c:choose>
</body> <body>
<%
request.setAttribute("str", "aa,bb,cc");
%>
<c:forTokens items="${str}" delims="," var="n">
${n}<br>
</c:forTokens>
</body> <body>
<c:url context="/jstl" scope="request" value="/hello" var="myurl">
<c:param name="username" value="张三"></c:param>
</c:url>
${requestScope.myurl}
<%--
content它相当于工程名
scope:域范围
value:访问的资源路径
var:声明一个变量
--%>
<%--
param就是描述参数
它的优点是可以直接将汉字进行url编码
--%>
</body> <body>
<c:catch var="e">
<%
int i=0;
int n=10/i;
%>
</c:catch>
${e}
</body> <body>
<c:import url="demo1.jsp"></c:import>
<%--相当于include操作, 静态导入 --%>
</body> 字符串过于长的时候需要通过仅仅展示前4个,用...表示省略,<c:if test="${fn:length<=5}">${word.type}</c:if>href触发JavaScript事件:。<a