【JSP】快速入门JSTL的核心标签库

众所周知,在JSP中编写代码就像是在HTML中写Java代码一样。在HTML中有"body"标签,"font"标签,"title"标签,那么在JSP中也应该有属于它的一“标签”。


Table of Contents

第一个JSTL实例

JSTL核心标签

定义变量set和删除变量remove

输出变量out

单条件判断if

多条件判断choos-when

循环forEach

forToken

重定向redirect


JSTL:JSP Standard Tag Library  JSP标准标签库,由Apache的jakarta小组开发并维护。

JSTL功能:

  1. 简化JSP代码的编写。
  2. 替换 <%%> 写法,也即不在JSP页面中写Java代码。
  3. 一般与EL表达式配合。
  4. 在JSP页面中使用标签的形式完成业务逻辑等功能。

JSTL库含有哪些标签:

  • 核心标签库(c标签库):Core
  • 国际化标签(fmt标签库):I18N
  • EL函数库(fn函数库)
  • xml标签库(x标签库)
  • sql标签库(sql标签库)意味着能够在JSP中直接连接数据库,但是建议不使用!

 


第一个JSTL实例

想要使用JSTL标签,需要先获取到相应的jar包:

  1. 从以下网址中获得:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
  2. 从页面中选择Jakarta-taglib-standard-1.1.2.zip

     3. 打开压缩包,可以获取以下内容:

  • tld目录下可以获取约束
  • lib目录下可以获得jstl.jar和standard.jar两个包,将其复制到Web项目下的WEB-INF目录下,就可以使用JSTL标签了;
  • 如果想要在Tomcat服务器的所有Web应用都能使用JSTL,则需要将这两个jar复制到Tomcat安装目录lib下即可。

 

这里以JSTL的核心标签库为例:

1. 导入jar文件到工程的WebContent/WEB-INF/lib  jstl.jar standard.jar

2. 在jsp页面上,使用taglib 指令,来引入标签库

3. 注意:如果想支持 EL表达式,那么引入的标签库必须选择1.1的版本,1.0的版本不支持EL表达式。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

第一个JSTL实例
<!-- File Name: helloJSTL.jsp -->
<%@ page language="java"  pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>JSTL</title>
</head>
<body>

	<h2>第一个JSTL实例</h2>

	<div style="text-align:center">
		<c:out value="hello, JSTL"></c:out>
		<br/>
		<c:out value="hello, Kyle."></c:out>
	</div>
</body>
</html>

在Tomcat中执行后的结果:


JSTL核心标签

要需要使用标签的JSP页头出导入标签库:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

标签概览:

  • 保存数据:<c:set></c:set>  
  • 获取数据:<c:out value=""></c:out>
  • 单条件判断:<c:if test=""></c:if>
  • 多条件判断:
  1. <c:choose></c:choose>
  2. <c:when test=""></c:when>
  3. <c:otherwise></c:otherwise>
  • 循环数据:
  1. <c:forEach></c:forEach>
  2. <c:forTokens items="" delims=""></c:forTokens>
  • 重定向
  1. <c:redirect></c:redirect>

定义变量set和删除变量remove

set标签功能:保存数据(保存到域中), 默认保存到page域;scope指定保存在那个域中;

语法格式:

<c:set value=”表达式” var=”变量名” scope=”page|request|session|application”/>

或者:<c:set var=”变量名”>EL表达式</c:set>

参数解析:

  1. var:存储数据的变量;
  2. value:要存储的具体内容;
  3. target:要修改属性的所属对象;
  4. property:要修改的属性;
  5. scope:var属性的作用域;

 

remove标签功能:用于移除一个变量

语法格式:

<c:remove var="<string>" scope="<string>"/>

参数解析:

  1. var:表示要移除的变量名称
  2. scope:表示var属性的作用域;

实例:

<!-- <c:set>标签的使用 -->

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c"  uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!-- 声明一个对象name, 对象的值zhangsan, 存储到了page(默认),指定是session -->
	<c:set var="name" value="zhangsan" scope="session"></c:set>
	${sessionScope.name }
</body>
</html>


输出变量out

<c:out>标签功能:

  1. 用来显示一个表达式的结果,在页面上直接输出变量内容;即获取数据(从域中),然后输出;
  2. 与<%= %>作用相似;
  3. 它们的区别就是<c:out>标签可以直接通过"."操作符来访问属性。

语法格式:

<c:out value=”表达式” escapeXML=”true|false” />

参数解析:

  1. default: 当value值为null时,使用默认值,value的属性值为EL表达式;
  2. escapeXml: 是否对value值进行转义,false表不转义(即把value值当做代码去执行);true,转义(默认),即把value值当做字符串输出即可;
out标签的使用
<body>
	<c:set var="i" value="10" scope="page"></c:set>
	<c:out value="${i}"></c:out>
</body>

单条件判断if

标签语法:

<c:if test="判断条件" var=”这个变量保存判断条件的执行结果” scope=”var变量保存在哪里”>
      判断条件为真时执行的语句
</c:if>

参数解析:

  1. test:要判断的条件,就像是if()里面的参数一样;
  2. var:存储条件结果的变量;
  3. scope:var属性的作用域;可选值有page、request、session、appliance

<c:if>标签实例

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>第一个EL表达式程序</title>
</head>
<body>
	<h2> 单条件if的用法  </h2> <br/>
	
	<!-- 从请求的URL中获取参数是"num"的值 -->
	<c:set var="paramNum" value="${param.num }" scope="page"></c:set>
	
	从请求的URL中获取参数是"num"的值:${pageScope.paramNum } <br/> <br/>
	
	<c:if test="${pageScope.paramNum > 50 }" var="result" scope="page">
		${pageScope.paramNum }大于50!<br/>
	</c:if>
	
	<c:if test="${pageScope.paramNum < 50 }" var="result" scope="page">
		${pageScope.paramNum }小于50 <br/>
	</c:if>
	
</body>
</html>

注意:if标签可以叠加:
<%--if标签 :单条件判断,test的参数可以是EL表达式 --%>
    <c:if test="${!empty msg}"> 判断msg是否为空
     <c:if test="${ “hah” = msg}"> 判断msg是否等于“hah”    
    	条件成立
    </c:if>

 

多条件判断choos-when

语法格式:

<c:choose>
    <c:when test=”条件表达式”>
    	如果条件表达式为真时执行
    </c:when>
    <c:otherwise>
    条件为假时执行
    </c:otherwise>
</c:choose>

解释:

  1. 类似于Java中的If_else表达式;
  2. when和otherwise标签可以有多组;
  3. otherwise标签可有可无;

实例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>第一个EL表达式程序</title>
</head>
<body>
	<h2>choose标签+when标签+otherwirse标签: 多条件判断</h2>
	<br />

	<!-- 从请求的URL中获取参数是"num"的值 -->
	<c:set var="score" value="${param.num}" scope="page"></c:set>

	你的分数是:${pageScope.score }

	<c:choose>
		<c:when test="${score>=90 && score<=100}">
			<%-- else if 的意思 --%>
    		优秀
    	</c:when>
		<c:when test="${score>=80 && score<90}">
    		良好
    	</c:when>
		<c:when test="${score>=70 && score<80}">
    		一般
    	</c:when>
		<c:when test="${score>=60 && score<70}">
    		及格
    	</c:when>
		<c:otherwise>
			<%-- else的意思 --%>
    		不及格
    	</c:otherwise>
	</c:choose>


</body>
</html>

循环forEach

普通forEach:
<c:forEach var=”你要迭代谁” varStatus=”临时变量” begin=”” end=”到哪里结束” step=”步长”>
	迭代需要执行的代码:Java代码、HTML代码
</c:forEach>

遍历集合的forEach:
<c:forEach  item=”集合名” var=”你要迭代谁” varStatus=”临时变量” begin=”” end=”到哪里结束” step=”步长”>
	迭代需要执行的代码:Java代码、HTML代码
</c:forEach>

参数解析:

  1. begin="" : 从哪个元素开始遍历,从0开始.默认从0开始
  2. end="": 到哪个元素结束。默认到最后一个元素
  3. step="" : 步长(每次加几)  ,默认1
  4. items="": 需要遍历的数据(集合):<c:forEach item=”集合名”></c:forEach>
  5. var="": 迭代目标
  6. varStatus="":当前正在遍历元素的状态对象,即位置。(count属性:当前位置,从1开始)
  7. 理解:for(varStatus=0; varStatus<items; varStatus++) { printf(“%d ”,var); }
forEach普通遍历
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>第一个EL表达式程序</title>
</head>
<body>
	<h2>forEach使用示例</h2> <br />

	<!-- 相当于Java中的:for(int i=0; i<10; i++) {} -->
	<c:forEach begin="${1 }" end="${10 }" step="${1 }" >
		连续执行10次循环体,相当于Java中的:for(int i=0; i<10; i++) {} <br/>
	</c:forEach>
</body>
</html>
<c:forEach>遍历集合
	<%
    	//List
     	List<Student> list = new ArrayList<Student>();
     	list.add(new Student("rose",18));
     	list.add(new Student("jack",28));
     	list.add(new Student("lucy",38));
     	//放入域中
     	pageContext.setAttribute("list",list);
     	
     	//Map
     	Map<String,Student> map = new HashMap<String,Student>();
     	map.put("100",new Student("mark",20));
     	map.put("101",new Student("maxwell",30));
     	map.put("102",new Student("narci",40));
     	//放入域中
     	pageContext.setAttribute("map",map);
    %>

    <%-- List的遍历 --%>>
    <c:forEach items="${list}" var="student" varStatus="varSta">
    	   序号:${varSta.count} - 姓名:${student.name } - 年龄:${student.age}<br/>
    </c:forEach>

    <%-- Map的遍历 --%>>
    <c:forEach items="${map}" var="entry">
    	${entry.key } - 姓名: ${entry.value.name } - 年龄:${entry.value.age }<br/>
    </c:forEach>

forToken

 

功能:对字符串进行分割,类似于Java中的split方法。

 

语法格式:
<c:forTokens items=“字符串” delims=”分隔符” var=”你要迭代谁” varStatus=”临时变量” begin=””         
   end=”到哪里结束” step=”步长”>
  迭代需要执行的代码
</c:forTokens>

参数解析:

  1. 比<for:Each>多一个:delime:以什么去作为切的标志;
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>第一个EL表达式程序</title>
</head>
<body>
	<h2>forToken标签</h2> <br />

	<%-- forToken标签: 循环特殊字符串 --%>
    <%
    	String str = "java-php-net-平面";
    	pageContext.setAttribute("str",str);
     %>
    
    <%--参数解析:比<for:Each>多一个:delime:以什么去作为切的标志;--%>
    <c:forTokens items="${str}" delims="-" var="s">
    	${s }<br/>
    </c:forTokens>
	
</body>
</html>

 

重定向redirect

 

功能:把客户端发送过来的请求,重新定向的另一个页面。

 

语法格式:
<c:redirect url=”url表达式” context=”制定重定向到另一个页面的类型”>
    <c:param name=”” value=””/>
    <c:param name="" value=""/>
</c:redirect>

实例:

hello.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>第一个EL表达式程序</title>
</head>
<body>
	<h2>redirect标签</h2> <br />

	<c:set var="redirectParam" value="${param.rp }" scope="request"></c:set>
	
	<c:if test="${redirectParam == \"first\" }" var="result" scope="request">
		<c:redirect url="first.jsp">
			<c:param name="name01" value="value01" />
			<c:param name="name02" value="value02" />
		</c:redirect>
	</c:if>
</body>
</html>

first.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>First-JSP</title>
</head>
<body>
	<h3> 从重定向过来的页面中获取参数  </h3>
	参数“name01”的值为:${param.name01 } <br/>
	参数“name02”的值为:${param.name02 } <br/>
</body>
</html>

在浏览器中执行以下URL:http://localhost:8080/K-JSP/hello.jsp?rp=first


 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值