- 什么是JSTL
- 是标签语言,是apache对EL表达式的扩展。
- JSTL四大标签库
- core:核心标签库
- <c:out>输出
<%-- 导入标签库 --%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <% String data = "fat rabbit"; pageContext.getRequest().setAttribute("data", data); %> <%-- value可以是字符串常量,也可以是EL表达式 --%> <%-- escapeXml默认为true,若为false不转义,原样输出 --%> <c:out value="${data}" escapeXml="false"></c:out>
-
<c:set>创建/设置域属性
<%-- 导入标签库 --%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="data" value="fat rabbit" scope="request"></c:set>
<%--escapeXml默认为true,若为false不转义,原样输出 --%>
<c:out value="${data}" escapeXml="false"></c:out> - <c:remove>删除域变量
<%-- 导入标签库 --%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%-- 若不指定scope,则表示删除所有域中的该名称的变量,若指定,则指删除指定域中该名称的变量 --%>
<c:remove var="data" scope="request"></c:remove> - <c:url>指定一个路径,它会在路径前面自动添加项目名
<%-- 导入标签库 --%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%-- 若添加var属性,则url标签就不会输出内容到页面,而是生成url保存到域中 --%>
<c:url value="/index.jsp" var="f"></c:url>
<%-- 带参数的 --%><c:url value="/index.jsp">
<c:param name="isLogin" value="true"></c:param>
</c:url> - <c:if>
<%-- 导入标签库 --%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:if test="${empty param.data}"> data数据为null </c:if> - <c:choose>
<%-- 导入标签库 --%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:choose > <c:when test="${empty param.data}"> data数据为null </c:when> <c:otherwise> data数据中有数据啦 </c:otherwise> </c:choose> - <c:foreach>
<%-- 导入标签库 --%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:forEach var="i" begin="1" end="10"> ${i} </c:forEach>
<%-- 类似于高级for的使用 --%><%
char[] datas = {'f','a','t','r','a','b','b','i','t'};
pageContext.getRequest().setAttribute("datas",datas);%>
<%-- items指定要循环的对象,可以是数组或集合。 --%><%-- var创造变量,循环遍历获取items中每个值赋值给变量--%>
<c:forEach items="${datas}" var="data">
${data}
</c:forEach><!-- varStatus是创建一个循环状态变量 -->
<c:forEach items="${datas}" var="data" varStatus="vs">
<!-- 循环元素的个数 -->
count= ${vs.count}
<!-- 循环元素的下标 -->
index= ${vs.index}
<!-- 是否为第一个元素 -->
first=${vs.first}
<!-- 是否为最后一个元素 -->
last=${vs.last}
<!-- 当前元素 -->
current=${vs.current}<br/>
</c:forEach>
- <c:out>输出
- fmt:格式化标签库
-
<%-- 导入标签库 --%> <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <% Date date = new Date(); pageContext.getRequest().setAttribute("date",date); %> <%-- ftm标签库是用来格式化输出的,通常需要格式化的有时间、数字 --%>
<%-- value指定一个Date类型的变量,pattern指定输出的模版 --%>
<fmt:formatDate value="${requestScope.date}" pattern="yyyy-MM-dd HH:mm:ss"></fmt:formatDate>
<%
double num = 8.2389123;
pageContext.getRequest().setAttribute("data",num);
%><%-- 两者都会四舍五入,区别在于前者如果不足位会以0位,后者不补,有几位补几位--%>
<fmt:formatNumber value="${requestScope.data}" pattern="0.00 "></fmt:formatNumber>
<fmt:formatNumber value="${requestScope.data}" pattern="#.## "></fmt:formatNumber>
-
- sql:数据库标签库
- xml:xml标签库
- core:核心标签库
- 自定义标签
-
/** * 实现标签处理类(1) */
public class TestTag implements SimpleTag {
private PageContext pageContext;
private JspFragment jspFragment;
/**
* 每次执行标签时就会调用这个方法
* @throws JspException
* @throws IOException
*/
@Override
public void doTag() throws JspException, IOException {
System.out.println("fat rabbit");
}
/**
* 设置父标签
* @param jspTag
*/
@Override
public void setParent(JspTag jspTag) {
}
/**
* 返回父标签
* @return
*/
@Override
public JspTag getParent() {
return null;
}
/**
* 设置jsp上下文对象,pageContext继承他
* @param jspContext
*/
@Override
public void setJspContext(JspContext jspContext) {
this.pageContext = (PageContext) jspContext;
}
/**
* 设置标签体
* @param jspFragment
*/
@Override
public void setJspBody(JspFragment jspFragment) {
this.jspFragment = jspFragment;
}
}/**
* 实现标签处理类(2),一般写标签处理类都继承SimpleTagSupport
* SimpleTagSupport实现了SimpleTag接口
* 提供了get方法供子类调用
*/public class TestTag extends SimpleTagSupport {
@Override
public void doTag() throws JspException, IOException {
//获取当前页面的输入流
Writer out = this.getJspContext().getOut();
//执行标签体内容,把结果写到指定的流中
out.write("______________________________________________________________________________<br/>");
this.getJspBody().invoke(out);
out.write("______________________________________________________________________________<br/>");
}
}
<!-- tld文件一般都放到WEB-INF之下,这样保证客户端访问不到,一个tld文件可以部署多个标签 --><?xml version="1.0" encoding="UTF-8" ?>
<taglib 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-jsptaglibrary_2_0.xsd"
version="2.0">
<!-- -->
<tlib-version>1.0</tlib-version>
<!-- -->
<short-name>muriel</short-name>
<!-- -->
<uri>http://www.muriel.cn/el.functions</uri>
<tag>
<!-- 标签名 -->
<name>testTag</name>
<!-- 标签处理类 -->
<tag-class>com.muriel.tag.TestTag</tag-class>
<!--
标签体
empty:无标签体
tagdependent:只能是EL表达式,也可以是其他标签
scriptless:标签体内容不会被执行,而是直接赋值标签处理类
-->
<body-content>scriptless</body-content>
</tag>
</taglib><%-- 导入标签库 --%>
<%
String data = "fat rabbit";
pageContext.getRequest().setAttribute("data", data);
%>
<t:testTag>
${data}<br/>
</t:testTag>/**
* 自定义带属性的标签
*/
public class TestTag extends SimpleTagSupport {
private boolean isOk = true;
@Override
public void doTag() throws JspException, IOException {
if (isOk)
//如果传递的输出流为null,表使用的就是当前的页面out。等同于this.getJspContext().getOut()的效果
this.getJspBody().invoke(null);
}
/**
* 这个方法会由tomcat来调用,并且在doTag方法之前
*
* @param ok
*/
public void setOk(boolean ok) {
isOk = ok;
}
}<?xml version="1.0" encoding="UTF-8" ?>
<taglib 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-jsptaglibrary_2_0.xsd"
version="2.0">
<!-- -->
<tlib-version>1.0</tlib-version>
<!-- -->
<short-name>muriel</short-name>
<!-- -->
<uri>http://www.muriel.cn/el.functions</uri>
<tag>
<!-- 标签名 -->
<name>testTag</name>
<!-- 标签处理类 -->
<tag-class>com.muriel.tag.TestTag</tag-class>
<!--
标签体
empty:无标签体
tagdependent:只能是EL表达式,也可以是其他标签
scriptless:标签体内容不会被执行,而是直接赋值标签处理类
-->
<body-content>scriptless</body-content>
<attribute>
<!-- 指定属性名 -->
<name>isOK</name>
<!--指定是否为必须的。 若必须为true,不必须为false -->
<required>true</required>
<!-- 指定属性是否可以使用EL。runtime expretion value运行时表达式值 -->
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib><%-- 导入标签库 --%>
<%@taglib prefix="t" uri="/WEB-INF/tlds/test.tld" %><%
String data = "fat rabbit";
pageContext.getRequest().setAttribute("data", data);
%>
<t:testTag ok="${!empty data}">
${data}
</t:testTag>
-
转载于:https://www.cnblogs.com/fatRabbit-/p/10132899.html