一、JSTL简介和环境配置
1、什么是JSTL
JSP 标准标签库(JSP Standard Tag Library,JSTL)是一个实现 Web应用程序中常见的通用功能的定制标记库集,这些功能包括迭代和条件判断、数据管理格式化、XML 操作以及数据库访问。
JSTL标签库分为:1、核心标签库core 2、格式化标签库. 3、SQL标签库 4、XML标签库
2、为什么要使用JSTL
实现了JSP页面中的代码复用(基于标签库原理,重复率较高的代码块支持复用,提高效率)
书写JSP页面时可读性更强(长得很像xml,方便前端查看和参与开发)
3、JSTL环境搭建
JSTL的下载:
下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
下载文件:jakarta-taglibs-standard-1.1.2.zip————2004-10-25 20:57 933K
解压文件后,在lib文件夹会获得两个jar包: standard.jar和jstl.jar
需要把这两个jar包导入到项目中,jsp页面引入标签库
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
注意:
载入外来包,我们不介意采取:右击项目——Build Path方式,因为这样只是引入了一个jar包的link进来,如果把项目挪动位置或者把jar包删除了,则报错。所以我们推荐直接把要载入的文件复制到:项目——WebRoot\WEB-INF\lib里面,不要忘了把jar包选中——右键——Build Path—-Add to Build Path。这样做可以让jar包随着项目走,绑在了一起。
二、EL表达式
JSTL标签中Value中的值其实可以输出变量和常量。其中常量可以直接输出,变量需要通过EL表达式去获取。
<c:out value="20"></c:out>
<c:out value="${age}"></c:out>
1.什么是EL表达式?
全名是Expression Language,常常配合jstl标签库使用,使得JSP页面更直观,写法更简单。
比如:普通写法:
<%=session.getValue("name")%>
EL表达式写法:
<c:out value="${sessionScope.name}" />
EL表达式的格式:
用美元符号“$”定界,内容包括在花括号“{}”中,即${表达式}。
2.EL变量
如:<c:out value="${temp}"></c:out>
如果没有做范围的限定,会依据默认从小到大开始搜索,如果还是找不到,则输出空字符串。
3、EL隐式对象
4、EL运算符
对empty举例:
<% String username="null"; request.setAttribute("username", username); %>
<c:out value="${empty username}"></c:out>
Ps:如果username为null或者"",则返回true;如果username为"有内容",则返回false。
el表达式中empty运算符对字符串为Null,及空字符串都返回 TRUE。
三、JSTL核心标签库使用
JSTL 核心标签库标签共有13个,功能上分为4类:
1.表达式控制标签:out、set、remove、catch
2.流程控制标签:if、choose、when、otherwise
3.循环标签:forEach、forTokens
4.URL操作标签:import、url、redirect
使用标签时,一定要在jsp文件头加入以下代码:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
1、out标签(表达式控制标签)
out标签的作用:
<c:out value="23" default="20"></c:out>
<c:out value="${age}" default="20"></c:out>
2、set标签(表达式控制标签)
set的标签的作用:
存值到scope中(page,request,session,application);
可以将值以变量形式存放在指定范围内,有两种方式:
<c:set var="age" value="23" scope="session" /> <%-- <c:set var="age" scope="session">23</c:set>--%>
<h1><c:out value="三、set标签给javaBean属性赋值"></c:out></h1>
<jsp:useBean id="person" class="com.ittx.entity.Person" scope="page" />
<c:set target="${person}" property="name" value="麻子"></c:set>
<c:out value="${person.name}" />
<%-- <jsp:setProperty property="name" name="person" value="小明11"/> --%>
<%-- <jsp:getProperty property="name" name="person" /> --%>
3、remove标签(表达式控制标签)
remove标签的用法:
只能remove掉某个变量(不能remove某个类对象的某个属性);
var属性是必选;
scope属性是可选。
<c:set var="firstName" value="小明"></c:set>
<c:remove var="firstName" />
4、catch标签(表达式控制标签)
catch标签的用法:
catch标签中可以包含那些容易出错的JSTL标签(逻辑)
<c:catch var="error">
<c:set target="user" property="firstName" value="lili"></c:set>
</c:catch>
<c:out value="${error}"></c:out>
5、if标签(流程控制标签)
if标签的用法:
同程序中的if作用相同,用来实现分支条件控制。
test属性用于存放判断的条件,一般使用EL表达式来编写。
var指定名称用来存放判断的结果类型为true或false
scope用来存放var属性存放的范围。
比如:根据用户输入的成绩进行等级判断
<c:if test="${param.score >= 90}" var="result">
<c:out value="成绩优异!"></c:out>
</c:if>
<c:out value="${result}"></c:out>
6、choose、when、otherwise(流程控制标签)
choose、when、otherwise 标签的作用:
通常这三个标签被放在一起配合使用
标签嵌套在和标签的外面作为他们的父标签来使用。
其中choose和when标签也可以一起组合使用。
综上所述通常有以下两种语法结构:
<c:choose>
<c:when test="${param.score<=100 && param.score>=60 }">
<c:out value="及格"></c:out>
</c:when>
<c:when test="${param.score<60 && param.score>=0 }">
<c:out value="不及格"></c:out>
</c:when>
<c:otherwise>
<c:out value="请检查你的输入!"></c:out>
</c:otherwise>
</c:choose>
7、forEach(循环控制标签)和forTokens(循环控制标签)
forEach标签的作用:
<h1>forEach</h1>
<%
ArrayList<String> lists = new ArrayList();
lists.add("one");
lists.add("two");
lists.add("three");
lists.add("four");
session.setAttribute("list", lists);
%>
<c:forEach items="${sessionScope.list}" var="item" begin="1" end="3">
<c:out value="${item}"/>
</c:forEach>
<br><hr>
<h1>forTokens</h1>
<%
String noUrl = "login.jsp;login.do;loginout.jsp;register.jsp";
session.setAttribute("noUrl", noUrl);
%>
<c:forTokens items="${sessionScope.noUrl}" delims=";" var="item">
<c:out value="${item}"/><br>
</c:forTokens>
9、URL操作标签
import,redirect标签,url标签
<%-- <jsp:include page="./index.jsp"></jsp:include> --%>
<c:import url="http://www.baidu.com" charEncoding="utf-8"></c:import>
<br><hr>
<h1>redirect</h1>
<%-- <c:redirect url="./index.jsp">
<c:param name="userName" value="10"></c:param>
</c:redirect> --%>
<br><hr>
<h1>url</h1>
<c:url var="main" value="http://192.168.5.3:8080/Jstl/index.jsp">
<c:param name="userName" value="11"></c:param>
<c:param name="passWord" value="123456"></c:param>
</c:url>
<c:out value="${main}"></c:out>
<a href="${main}">首页</a>
四、JSTL函数使用
1、contains函数、startsWith、endsWith
contains函数表示加入的字符串是否包含字串,返回一个boolean类型的值。
Ps1:配合使用:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
2、escapeXml、indexOf
<c:out
value="“Hello World”字符串中是否包含“Hello”?${fn:contains('Hello World','Hello')}"></c:out>
<hr>
<c:out
value="“Hello World”字符串中是否包含“ABCD”?${fn:contains('Hello World','ABCD')}"></c:out>
<hr>
<c:out
value="“Hello World”字符串中是否包含“hello”(忽略大小写)?${fn:containsIgnoreCase('Hello World','hello')}"></c:out>
<hr>
<c:out
value="“Hello”是否在“Hello World”字符串开头?${fn:startsWith('Hello World','Hello')}"></c:out>
<hr>
<c:out
value="“world”是否在“Hello World”字符串尾部?${fn:endsWith('Hello World','world')}"></c:out>
<c:out value="${fn:indexOf('helloworld','java')}"></c:out>
<c:out value="${fn:escapeXml('<book>书</book>')}"></c:out>
<c:out value="<book>书</book>"></c:out>
本文转载自http://it.warmtel.com/?p=1860