JSTL标签库的使用详解

在上一篇博客EL表达式中,我们介绍了EL表达式的简单使用,但是在使用EL表达式的同时,一般都是结合JSTL来一起使用的,这篇文章我们就来介绍一下JSTL的背景,分类,其在程序中的使用!

背景

JSTL(JSP StandardTag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的及其以上容器上,如tomcat 7.x。在JSP 2.0中也是作为标准支持的。

JSTL 1.0 发布于 2002 年 6 月,由四个定制标记库(core、format、xml 和 sql)和一对通用标记库验证器(ScriptFreeTLV和 PermittedTaglibsTLV)组成。core 标记库提供了定制操作,通过限制了作用域的变量管理数据,以及执行页面内容的迭代和条件操作。它还提供了用来生成和操作 URL 的标记。顾名思义,format 标记库定义了用来格式化数据(尤其是数字和日期)的操作。它还支持使用本地化资源束进行
JSP 页面的国际化。

分类

JSTL 核心标签库(C标签)标签共有13个,功能上分为4类:

1.表达式控制标签:out、set、remove、catch

2.流程控制标签:if、choose、when、otherwise

3.循环标签:forEach、forTokens

4.URL操作标签:import、url、redirect

使用

如果我们要在程序中使用这些标签,首先我们要引入jar,这里我们要引入两个jar ,jstl-1.2.jar和standard-1.1.2.jar,然后将这两个jar放入到WEB-INF下的lib文件夹中。然后在我们的jsp页面上要引入<%@ tagliburi="http://java.sun.com/jsp/jstl/core" prefix="c"%>         这样我们就可以在jsp的页面上使用jstl了!

下边我们在代码中看一看这些标签的使用!

<span style="font-size:18px;"><%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page import="java.util.*" %>
<!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=GB18030">
<title>Insert title here</title>
</head>
<body>
	<h1>测试JSTL核心库</h1>
	<hr>
	<li>采用c:out标签</li><br>
	hello(使用标签):<c:out value="123"/><br>
	hello(使用标签):<c:out value="hello"/><br>
	hello(使用标签):<c:out value="${hello}"/><br>
	hello(使用EL表达式):${hello }<br>
	hello(default):${hello123 }<br>
	hello(使用缺省值):<c:out value="${hello123}" default="没有值"/><br>
	hello(使用缺省值):<c:out value="${hello123}">没有值</c:out><br>
	welcome(使用EL表达式):${welcome }<br>
	welcome(使用标签,escapeXml=true):<c:out value="${welcome}" escapeXml="true"/><br>
	welcome(使用标签,escapeXml=false):<c:out value="${welcome}" escapeXml="false"/><br>
	<p>

	<li>测试c:set,c:remove</li><br>
	<c:set value="root" var="userid"/>
	userid:${userid }<br>
	<c:remove var="userid"/>
	userid:${userid }<br>
	<p>

	<li>条件控制标签:c:if</li><br>
	<c:if test="${v1 lt v2}">
		v1小于v2<br>
	</c:if>
	<p>
	<li>条件控制标签:c:choose,c:when,c:otherwise</li><br>
	<c:choose>
		<c:when test="${v1 gt v2}">
			v1大于v2<br>
		</c:when>
		<c:otherwise>
			v1小于v2<br>
		</c:otherwise>
	</c:choose>
	<c:choose>
		<c:when test="${empty userList}">
			没有符合条件的数据<br>
		</c:when>
		<c:otherwise>
			存在用户数据<br>
		</c:otherwise>
	</c:choose>
	<p>
	<li>演示循环控制标签:forEach</li><br>
	<h3>采用jsp脚本显示</h3>
	<table border="1">
		<tr>
			<td>用户名称</td>
			<td>年龄</td>
			<td>所属组</td>
		</tr>
		<%
			List userList = (List)request.getAttribute("users");
			if (userList == null || userList.size() == 0) {
		%>
			<tr>
				<td colspan="3">没有符合条件的数据</td>
			</tr>
		<%
			}else {
				for (Iterator iter=userList.iterator(); iter.hasNext();) {
					com.tgb.jstl.User user = (com.tgb.jstl.User)iter.next();
		%>
					<tr>
						<td><%=user.getUsername() %></td>
						<td><%=user.getAge() %></td>
						<td><%=user.getGroup().getName() %></td>
					</tr>
		<%
				}
			}
		%>
	</table>
	<h3>采用forEach标签</h3>
	<table border="1">
		<tr>
			<td>用户名称</td>
			<td>年龄</td>
			<td>所属组</td>
		</tr>
		<c:choose>
			<c:when test="${empty users}">
				<tr>
					<td colspan="3">没有符合条件的数据</td>
				</tr>
			</c:when>
			<c:otherwise>
				<c:forEach items="${users}" var="user">
					<tr>
						<td>${user.username }</td>
						<td>${user.age }</td>
						<td>${user.group.name }</td>
					</tr>
				</c:forEach>
			</c:otherwise>
		</c:choose>
	</table>
	<h3>采用forEach标签,varstatus</h3><br>
	<table border="1">
		<tr>
			<td>用户名称</td>
			<td>年龄</td>
			<td>所属组</td>
		</tr>
		<c:choose>
			<c:when test="${empty users}">
				<tr>
					<td colspan="3">没有符合条件的数据</td>
				</tr>
			</c:when>
			<c:otherwise>
				<c:forEach items="${users}" var="user" varStatus="vs">
					<c:choose>
						<c:when test="${vs.count mod 2 == 0}">
							<tr bgcolor="red">
						</c:when>
						<c:otherwise>
							<tr>
						</c:otherwise>
					</c:choose>
								<td>${user.username }</td>
								<td>${user.age }</td>
								<td>${user.group.name }</td>
							</tr>
				</c:forEach>
			</c:otherwise>
		</c:choose>
	</table>
	<h3>采用forEach标签,begin,end</h3>
	<table border="1">
		<tr>
			<td>用户名称</td>
			<td>年龄</td>
			<td>所属组</td>
		</tr>
		<c:choose>
			<c:when test="${empty users}">
				<tr>
					<td colspan="3">没有符合条件的数据</td>
				</tr>
			</c:when>
			<c:otherwise>
				<c:forEach items="${users}" var="user" begin="2" end="8" step="2">
					<tr>
						<td>${user.username }</td>
						<td>${user.age }</td>
						<td>${user.group.name }</td>
					</tr>
				</c:forEach>
			</c:otherwise>
		</c:choose>
	</table>
	<li>演示循环控制标签:forEach,输出map</li><br>
	<c:forEach items="${map}" var="entry">
		${entry.key },${entry.value }<br>
	</c:forEach>
	<p>
	<li>演示循环控制标签:forTokens</li><br>
	<c:forTokens items="${strTokens}" delims="#" var="v">
		${v }<br>
	</c:forTokens>
	<p>
	<li>c:catch标签</li><br>
	<%
		try {
			Integer.parseInt("asdfsdf");
		}catch(NumberFormatException e) {
			e.printStackTrace();
			out.println(e.getMessage());
		}
	%>
	<p>
	<c:catch var="msg">
		<%
			Integer.parseInt("asdfsdf");
		%>
	</c:catch>
	${msg }<br>
	<p>
	<li>c:import标签</li><br>
	<c:import url="http://localhost:8080/drp4.5/test_upload.html"/>
	<p>
	<li>c:url,c:param</li><br>
	<c:url value="http://localhost:8080/drp4.5/sysmgr/validate.jsp" var="u">
		<c:param name="userId" value="zhangsan"/>
		<c:param name="age" value="20"/>
	</c:url>
	${u }<br>
	<li>c:redirect</li><br>
	<c:redirect url="/login.jsp" context="/drp4.5"/>
</body>

</html></span>

通过上边写简单代码的使用,我们就可以很容易的知道他们该如何在我们的应用程序中使用了!

时间: 2024-11-10 07:02:40

JSTL标签库的使用详解的相关文章

JSTL标签介绍与使用详解

什么是JSTL JSTL(JavaServerPages Standard Tag Library)JSP标准标签库 JSTL通常会与EL表达式合作实现JSP页面的编码 使用JSTL的步骤 创建Web工程,选择JSTL1.1 在JSP页面添加taglib指令 使用JSTL标签 -- <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> -- 通用标签的使用 set:设置指定范围内的

EL表达式和JSTL标签库使用详解

JavaBean在JSP中的局限 获取JavaBean属性必须要实例化 强制类型转化 <% Employee employee = (Employee)request.getAttribute("employee"); Computer comp = employee.getComputer(); String manufacturer = comp.getManufacturer(); %> 如果页面编写出现逻辑错误,将会导致代码执行错误,并且JSP页面编译页面时也会产生

JavaWeb-12 (自定义标签库开发&amp;JSTL标签库)

JavaWeb-12:自定义标签库开发&JSTL标签库 自定义标签库开发 一.自定义标签简介 自定义标签主要用于移除Jsp页面中的java代码. 使用自定义标签移除jsp页面中的java代码,只需要完成以下两个步骤: 1.编写一个实现Tag接口的Java类(标签处理器类). 2.编写标签库描述符(tld)文件,在tld文件中把标 实验:项目架构如下: a.tld <?xml version="1.0" encoding="utf-8" ?> &l

[C] linux静态链接库与动态链接库详解

http://blog.chinaunix.net/u2/76292/showart.php?id=1274181 一顺便说说了哦  通常情况下,对函数库的链接是放在编译时期(compile time)完成的.所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件(executable file).程序在运行时,与函数库再无瓜葛,因为所有需要的函数已拷贝到自己门下.所以这些函数库被成为静态库(static libaray),通常文件名为"libxx

关于在Intellij Idea中使用JSTL标签库报错的问题

今天在使用idea做jsp的项目时,首先发现在jsp页面里引入的DTD报错,idea不识别DTD.而tomcat运行正常,点击页面跳转到有jstl的DTD页面时报错,检查浏览器,发现如下问题:   org.apache.jasper.JasperException: This absolute uri http://java.sun.com/jsp/jstl/core) cannot be resolved in either web.xml or the jar files deployed

JSTL标签库:Remove标签Catch标签

看注释 <c:remove> 标签删除变量,无论是从指定的范围内或范围内的变量(如果没有指定范围).这个动作通常是不特别有帮助,但它可以帮助确保一个JSP范围内的资源,它负责清理. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <!-- 核心标签: 核心组的标签是最常用的JSTL标签.以下是在您的JSP的语法包括JSTL核心库

使用JSTL标签库替换Struts1中的logic标签

如题所示,在做一个基于SSH框架的实战小项目时,发现不少地方都还在使用logic标签.这个标签不仅我不熟悉,而且在现在看来也显得过时了,因此我就想替换成我熟悉的JSTL标签 比如说,原来是这样的: <logic:present scope="request" name="onSaleGoodsList">      <table border="0">    <s:iterator id="goods&qu

JavaWeb学习之JSP常用标签、EL表达式的运算符、JSTL标签库(6)

1.JSP常用标签 * 只要支持JSP文件,常用标签有可以直接使用 * 格式: jsp:xxxx * jsp:forward ,完成jsp页面的转发 * page属性:转发的地址 <% request.setCharacterEncoding("UTF-8"); %> <jsp:forward page="/index.jsp"> <jsp:param value="张三" name="userName&q

springMVC项目引入jstl标签库若干问题的总结

中午,不知道动到项目的哪个地方了,之前在联系人列表页面用的好好的jstl标签库突然报错了:<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>的时候报错,说找不到uri.我之前是配置好了的,于是在Eclipse菜单条找到project-clean,清理当前项目,然后就好了.假设这种方法行不通,而你的项目恰好又是通过Maven来管理的,那么能够在项目上右键-选择run as-Maven