12、jstl标签

JSTL
  1. jstl:jsp标准标签库。jstl有五个标签库,极大简化了我们的开发
  • 核心标签库 c标签库
  • 格式化标签库 fmt标签库
  • 函数标签库
  • sql库 sql
  • xml库
  1. 使用步骤
  • 导入两个包

1)taglibs-standard-impl-1.2.1.jar

2)taglibs-standard-spec-1.2.1.jar

  • 在页面导入标签库
<!--导入核心库-->
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!--导入函数库-->
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

prefix:定义标签的前缀

uri:标签库的唯一识别符

  • 使用核心标签库

1)<c:out>:用于计算一个表达式并将结果输出到当前页面

  • value:代表要输出的内容,可以是EL表达式
  • default:表示默认的值
  • escapeXml:表示是否转义特殊字符
<%
pageContext.setAttribute("msg","");
%>
<c:out value="msg" default="123" escapeXml="true"></c:out>

2)<c:set>:用于添加或修改域中的属性

  • var:表示要设置的属性的key
  • property:戴白要修改的属性名
  • scope:表示要设置在哪个域中(四个域)
  • target:代表要修改的目标对象
  • value:表示要设置属性的value
<!--给域中设置一个属性-->
<c:set var="key" value="value" scope="request"></c:set>
${requestScope.key}
<!--修改对象的某个属性值-->
<c:set property="username" value="newvalue" target="object"></c:set>
<%=object.username%>

3)<c:remove>:用来移出域中的属性

  • var:要移出的属性的key
  • scope:要移出属性的域,若没指定哪个域,则把所有域中的key属性移出
<c:remove var="parakey" scope="request"></c:remove>

4)<c:if>:用于实现if功能,可以嵌套

  • test:就是判断条件,如果是true执行标签体里的内容,否则不执行
  • scope:指定判断结果保存到哪个域中,方便以后使用
  • var:指定的key值保存判断的结果
<c:if test="${5<6}" scope="request" var="flag">
	<h1>我是c:if里面的</h1>
</c:if>

5)<c:choose>、<c:when>、<c:other>:是一套组合

  • 功能和swich case功能是一样的
<c:choose>
	<c:when test="${16>15 }">
		<h1>当条件满足执行这里</h1>
	</c:when>
		<c:when test="${16=15 }">
		<h1>当条件满足执行这里</h1>
	</c:when>
		<c:when test="${16<15 }">
		<h1>当条件满足执行这里</h1>
	</c:when>
	<c:otherwise>
		<h1>否则执行这里</h1>
	</c:otherwise>
</c:choose>

6)<c:forEach>:用来做循环遍历

  • begin:指定遍历开始的位置
  • end:指定白能力的结束位置
  • items:要遍历的东西 list array
  • step:步长,一次跳过多少
  • var:指定遍历的当前条目的变量名
  • varStatus:封装当前遍历状态的详细信息,里面封装了当前遍历的所有状态信息 varStatus=“status"就会将当前遍历状态的详细信息对象赋值给status
<c:forEach begin="0" end="10" var="num">
<!-- foreach标签体相当于我们的循环体 -->
	<!-- 可以直接用el表达式获取 -->
	${num}<br/>
</c:forEach>
<!-- 使用foreach遍历一个list ,指定遍历哪些东西items,每个遍历出的数据放在var-->
<%
	List<String> list=new ArrayList<String>();
	list.add("张三");
	list.add("李四");
	list.add("赵武");
	list.add("利卡将");
%>
<c:forEach items="<%=list%>" var="stu">
	${stu}<br/>
</c:forEach>
<c:forEach items="<%=list%>" var="stu" varStatus="status">
	<!--status有如下图的属性-->
    ${stu}---->${status.start}<br/>
</c:forEach>

在这里插入图片描述

7)<c:url>:

  • value:指定要改装的路径
  • scope:把改装后的返回值放到域中的uri属性中,方便以后获取
<c:uri value="index.jsp" var="uri" scope="request"></c:uri>
${uri}

8)<c:redirect>:重定向

  • url:重定向的目标页面
  • 函数库:函数标签库实在JSTL中定义的标准的EL函数集
<%
	request.setAttribute("msg", "Helloworlda");
%>
判断前面的字符串是否包含后面的(区分大小写)${fn:contains(msg,"a")}<br/>
判断前面的字符串是否包含后面的(不区分大小写)${fn:containsIgnoreCase(msg,"a")}<br/>
判断字符串是否以某个字符串开始(区分大小写):${fn:startsWith(msg,"H")}<br/>
判断字符串是否以某个字符串结束(区分大小写):${fn:endsWith(msg,"a")}<br/>
判断某个字符串的起始位置:${fn:indexOf(msg,"H")}<br/>
字符串替换:${fn:replace(msg,"Hello","Hi")}<br/>
截取字符串(不包含后面的索引):${fn:substring(msg,0,5)}
  • 自定义标签

1)自定义标签

  • 编写标签库的描述文件,描述标签的详细信息
  • 库描述文件放在web-inf/tags
  • 标签的实现类 SimpleTag
  • 步骤:
  1. 在web-inf目录下新建文件tags
  2. 在tags中新建tld文件,并选择next

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2)源文件

  • mytag.tld
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://xmlns.jcp.org/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd ">
  <!-- 标签库的版本 -->
  <tlib-version>1.0</tlib-version>
  <!-- 指定下面所有定义的标签的前缀 -->
  <short-name>agg</short-name>
  <!-- 标签库的唯一标识,域名/tags/atguigu -->
  <uri>http://www.atguigu.com/tags/atguigu</uri>
  <!-- 定义一个可以使用的标签 -->
  <tag>
  	<!-- 定义一个标签名 -->
  	<name>hello</name>
  	<!-- 定义标签的实现类,必须写全类名 -->
  	<tag-class>com.aiguigu.tag.MyTag</tag-class>
  	<!--empty:是一个空标签,就是没有标签体,代表当前是一个自结束标签
  		jsp:可以传入jsp表达式,scriptless可以传的jsp也可以
  		scriptless:不可以传jsp表达式,el及其他正常的可以
  		tagdependent:传入是啥就是啥  -->
  	<body-content>empty</body-content>
  	<!-- 使用attribute定义属性 -->
  	<attribute>
  		<!-- name指定属性名 -->
  		<name>msg</name>
  		<!-- 这个属性是否是必须的,true则是必须的 -->
  		<required>true</required>
  		<!--scriptless可以接收el表达式的值 -->
  		<rtexprvalue>true</rtexprvalue>
  	</attribute>
  </tag>
</taglib>
  • MyTag.java
package com.aiguigu.tag;
import java.io.IOException;
import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.JspTag;
import javax.servlet.jsp.tagext.SimpleTag;
public class MyTag implements SimpleTag {
	//执行标签功能
	private String msg;
	private PageContext pc;
	public String getMsg() {
		return msg;
	}
	public void setMsg(String msg) {
		this.msg = msg;
	}
    //处理标签的函数
	@Override
	public void doTag() throws JspException, IOException {
			pc.getOut().write("<h1>"+msg+"</h2>");		
	}
	//获取父标签(只特指自定义标签)
	@Override
	public JspTag getParent() {
		// TODO Auto-generated method stub
		return null;
	}
	//设置JspBody标签体内容  服务器自动传入
	@Override
	public void setJspBody(JspFragment arg0) {
		// TODO Auto-generated method stub
	}
	//设置jspContext==pageContext 服务器自动传入
	@Override
	public void setJspContext(JspContext arg0) {
		// TODO Auto-generated method stub
		this.pc=(PageContext)arg0;
	}
	//设置父标签,服务器自动传进来
	@Override
	public void setParent(JspTag arg0) {
		// TODO Auto-generated method stub
	}
}
  • index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page uri="http://www.atguigu.com/tags/atguigu" prefix="agg"%>
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body>
<agg:hello msg="你好"></agg:hello>
</body>
</html>

tml4/loose.dtd">

Insert title here ```
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值