JSTL(JavaServer Pages Standard Tag Library):JSP标准标签库,=标签库+EL,用来消除JSP中的JAVA代码
=============================================================
标签库
一共有5个
一般核心标签库就够了,在JSP页面引用:
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>
3个常用标签:if、foreach、choose
==============================================================
EL
就是一种表达式语言:让前台页面可以获取放在四大作用域中的共享数据(文章最后)
注:el表达式获取作用域中的属性,要依靠JavaBean的可读属性即需要有getter方法,否则无法获取;
语法:${key} :会到依次从四个作用域里面去找(就近原则)key对应的value,如果key不存在,显示为空字符串(页面看起来什么都没有),而不会显示null值(体验度好);
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><!-- prefix 前缀 -->
<!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>Insert title here</title>
</head>
<body>
<!-- 有时候,项目多了,可能会忘记上下文路径,用这个解决路径问题 -->
<form action="${pageContext.request.contextPath}/bean" method="get">
<select name="cal">
<!-- 下拉框回值的三种写法,当然第二种最好用 -->
<option value="+"
<%if("+".equals(request.getAttribute("cal"))){ %>
selected="selected"
<%}%>
>+</option>
<option ${oneEmp.sex.equals("男")?'selected="selected"':""} value="男" > 男 </option>
<option value="女"
<c:if test='${(oneEmp.sex).equals("女")}'>
selected="selected"
</c:if>
> 女
</option>
</select>
<input type="number" name="num2" value='<%=request.getAttribute("num2")==null?"":request.getAttribute("num2")%>'>
</form>
<hr>
------------------EL表达式在四大作用域取值----普通值--------------------<br/>
${name }<br/>
${sessionScope.name }<br/>
${applicationScope.name }<br/>
------------------EL表达式在四大作用域取值----对象--------------------<br/>
${user}<br/>
${user.id}<br/>
${user.name}<br/>
${user.age}<br/>
------------------EL表达式在四大作用域取值----map--------------------<br/>
${map}<br/>
${map.hoppy}<br/>
${map["www.baidu.com"]}<br/> <!-- 后台存的特殊key名 -->
${map['www.baidu.com']}<br/>
------------------EL表达式在四大作用域取值----list--------------------<br/>
${list}<br/>
${list[0]}<br/>
${list[1]}<br/>
${list.get(2)}<br/>
${list[2].id}<br/>
${list[2].name}<br/>
${list[2].age}<br/>
------------------EL表达式在四大作用域取值----特点--------------------<br/>
<!-- 获取上下文路径 -->
${pageContext.request.contextPath}
<!-- 可以运算 -->
${list[2].name.equals("韬3") }
${list[2].age==98}
------------------JSTL标签库的学习--------------------<br/>
<c:if test="${list[2].age!=98}">
true---98
</c:if>
<br/>
<c:forEach begin="0" step="1" end="${list.size()-1}" varStatus="status">
${list.get( status.count - 1 ) }   ${status.count}<br/>
</c:forEach>
<br/>
<table border="1" width="500px" align="center">
<c:forEach items="${list }" var="u" varStatus="status">
<tr>
<td>${status.count }</td>
<td>${u.id }</td>
<td>${u.name }</td>
<td>${u.age }</td>
</tr>
</c:forEach>
</table>
</body>
</html>
扩展:
要求:不使用js,直接访问jsp,jsp展示数据库数据
思路:判断页面是否有传值,让页面先跳后台servlet,servlet传值再跳jsp
<c:if test=”${empty list}”>
<jsp:forward page="xxx.action"></jsp:forward>
</c:if>