一、什么是JSTL标签库?
JSP标准标签库(JSP Standard Tag Library)是Java EE网络应用程序开发平台的组成部分。它在JSP规范的基础上,扩充了一个JSP的标签库来完成一些通用任务,比如XML数据处理、条件执行、数据库访问、循环和国际化。
维基百科—JSTL
根据JSTL标签所提供的功能,可以将其分为5个类别。
- 核心标签
- 格式化标签
- SQL标签
- XML标签
- JSTL函数
二、为什么要使用JSTL标签?
由于在Web项目开发的过程中,我们需要通过JSP页面来给用户展示网页的内容。在JSP中,虽然我们能够通过<% %>
来写Java代码,但是这是违反了开发规范的,因为这种行为会导致项目的耦合程度变高,不能做到高内聚,低耦合的要求,而且在项目后期需要修改代码的时候就会显得混乱。
三、如何使用JSTL标签?
1.导入相关的jar包
使用Maven的项目:
把以下代码复制到pom.xml
中即可导入相关的包
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.servlet.jsp.jstl</artifactId>
<version>1.2.2</version>
</dependency>
使用非Maven项目:
参考资料:runoob
下载jakarta-taglibs-standard-1.1.2.zip
包并解压,将jakarta-taglibs-standard-1.1.2/lib/
下的两个jar文件:standard.jar
和jstl.jar
文件拷贝到/WEB-INF/lib/
下。点击此处下载
接下来我们在 web.xml
文件中添加以下配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<jsp-config>
<taglib>
<taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri>
<taglib-location>/WEB-INF/fmt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/fmt-rt</taglib-uri>
<taglib-location>/WEB-INF/fmt-rt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/core-rt</taglib-uri>
<taglib-location>/WEB-INF/c-rt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/sql</taglib-uri>
<taglib-location>/WEB-INF/sql.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/sql-rt</taglib-uri>
<taglib-location>/WEB-INF/sql-rt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/x</taglib-uri>
<taglib-location>/WEB-INF/x.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/x-rt</taglib-uri>
<taglib-location>/WEB-INF/x-rt.tld</taglib-location>
</taglib>
</jsp-config>
</web-app>
2.在JSP中使用JSTL标签
首先需要在到的JSP页面的开头做以下声明:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
uri
可以在包导入到项目后,找到javax.servlet.jsp.jstl-1.2.2.jar
下的META-INF
文件夹下的c.tld
文件中找到<uri></uri>
标签找到。
prefix="c"
就是设置对象名,当需要用到JSTL标签的时候需要使用该对象名进行调用,属性值可以随意定义。
最后在
<body></body>
范围里面使用相应功能的的标签即可。
四、JSTL核心标签简介
参考资料:Runoob
标签 | 描述 |
---|---|
<c:out> | 用于在JSP中显示数据,就像<%= … > |
<c:set> | 用于保存数据 |
<c:remove> | 用于删除数据 |
<c:catch> | 用来处理产生错误的异常状况,并且将错误信息储存起来 |
<c:if> | 与我们在一般程序中用的if一样 |
<c:choose> | 本身只当做<c:when> 和<c:otherwise> 的父标签 |
<c:when> | <c:choose> 的子标签,用来判断条件是否成立 |
<c:otherwise> | <c:choose> 的子标签,接在<c:when> 标签后,当<c:when> 标签判断为false时被执行 |
<c:import> | 检索一个绝对或相对 URL,然后将其内容暴露给页面 |
<c:forEach> | 基础迭代标签,接受多种集合类型 |
<c:forTokens> | 根据指定的分隔符来分隔内容并迭代输出 |
<c:param> | 用来给包含或重定向的页面传递参数 |
<c:redirect> | 重定向至一个新的URL. |
<c:url> | 使用可选的查询参数来创造一个URL |
五、JSTL核心标签使用例子
我的例子源码:
<%@page import="top.cheungchingyin.domain.Person"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>测试jstl中的核心标签</title>
<style type="text/css">
.odd{
background-color: #FF99FF;
}
.even{
background-color: #FF6633;
}
tr:hover{
background-color: #0000FF;
}
</style>
</head>
<body>
<br>---------------------c:out----------------------------<br>
<%
request.setAttribute("data", null);
%>
<c:out value="${data }" default="aaa"></c:out><%--当获取的值为空时,如果default有值,则填充default中的值 --%>
<br>---------------------c:out(可以操作各个域 javaBean Map集合)----------------------------<br>
<c:set var="abc" value="xxx" scope="page"/><%--在page域里面设置一个名为abc的属性 --%>
${abc }
<%
Map map = new HashMap();
request.setAttribute("map", map);
%>
<c:set property="dd" value="xxx" target="${map }"/><%--向map集合添加一个属性 --%>
${map.dd }
<%
Person p = new Person();
request.setAttribute("p",p);
%>
<c:set target="${p }" property="name" value="uuu"/><%--向javaBean设置属性 --%>
${p.name }
<br>---------------------c:catch----------------------------<br>
<c:catch var="myex"><%--捕抓异常 --%>
<%
int x = 1/0;
%>
</c:catch>
${myex.message }
<br>---------------------c:if----------------------------<br>
<c:if test="${user == null }" var="aaa" scope="page"><%--判断user是否等于空,如果是true则显示aaa,var是指把判断的结果生成web属性 --%>
aaa
</c:if>
${aaa }
<br>---------------------c:foreach----------------------------<br>
<%
List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
request.setAttribute("list", list);
%>
<c:forEach items="${list }" var="str"><%--循环语句,把list的内容遍历出来 --%>
${str }
</c:forEach>
<br><br>
<c:forEach var="num" begin="0" end="10" step="1"><%--把0到10遍历出来 --%>
${num }
</c:forEach>
<br>---------------------c:foreach实现表格间色显示----------------------------<br>
<%
list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
list.add("ddd");
list.add("eee");
list.add("fff");
list.add("ggg");
list.add("hhh");
list.add("iii");
list.add("jjj");
list.add("kkk");
list.add("lll");
request.setAttribute("list", list);
%>
<table border="1" width="20%">
<c:forEach var="str" items="${list } " varStatus="status">
<tr class="${status.count%2==0?'even':'odd' }"><%--判断是基数行还是偶数行 --%>
<td>${str }</td>
</tr>
</c:forEach>
</table>
<br>---------------------c:url标签----------------------------<br>
<c:url var="url" value="/xx"/><%--使用url构建就能够直接写uri,项目名称也不用写如/Day11,并不需要补全整个网址,还能够自带cookie是否被禁用检测 --%>
<a href="${url }">购买</a>
<a href='<c:url value="/index.jsp"/>'>购买</a><%--这一句和上面两句的功能一样 --%>
<br>---------------------c:parma标签----------------------------<br>
<c:url var="url" value='/yy'>
<c:param name="name" value="中国"></c:param><%--就是在地址栏的后面带上属性如xx.com?name='中国' --%>
</c:url>
<a href="${url }">中国</a>
<br>---------------------c:fortoken标签----------------------------<br>
<%
request.setAttribute("abcde", "aa,bb,cc,dd,ee");
%>
<c:forTokens var="ss" items="${abcde }" delims=","><%--把"abcde"中存储的 "aa,bb,cc,dd,ee"用逗号分割出来--%>
${ss }
</c:forTokens>
</body>
</html>
六、总结
这篇文章只是很简单地介绍了JSTL的核心标签的使用,如果需要详细的介绍还请阅读Sun公司写的关于JSTL的文档:JSTL文档,如果想查阅某些功能请到Runoob处阅读。如果文章有错漏,还请在文章下方的评论告诉我,或是发送邮件到CheungChingYin@outlook.com,谢谢你的阅读。