2.2JSP学习——JSTL标签库

JSTP是一个标准的通用型标签库。

JSTL主要提供给javaweb开发人员各标准通用的标签函数库,标签库同时支持EL用于获取数据。用这个标签库可以取代传统直接在页面中嵌入java脚本的做法。

要使用JSTL需要先导入它的jar包,方法参照:方法

1.核心标签库

核心标签库主要分为以下四类:

通用标签,用于操作变量

条件标签,用于流程控制

迭代标签,用于循环遍历集合

URL标签库,用于针对URL相关的操作

导入方法:

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

通用标签:

1.<c:out>标签

主要用于输出数据

使用方法

<jsp:useBean id="person1" class="com.javabean.Person" scope="session"/>
<jsp:setProperty property="name" name="person1" value="zhangsan"/>
<%--out --%>
<c:out value="${sessionScope.person1.name}" default="游客"/>

如果value中的值找不到,则显示default中的值

<c:out value="<b>粗体字</b>" escapeXml="true"/>
<c:out value="<b>粗体字</b>" escapeXml="false"/>

escapeXml表示是否将> < & ' "等特殊字符进行HTML字符实体转换后再进行输出,默认值为true

上述例子中:第一个会输出<b>粗体字</b>,第二个会输出粗体字。

2.<c:set>标签

主要用于设置属性域属性

<%--set --%>
<c:set var = "attr1" value="abc" scope="session"/>
<c:out value="${sessionScope.attr1}" default="def"/>

3.<c:remove>标签

用于删除属性域中的属性

<%--remove --%>
<c:remove var="attr1" scope="session"/>
<c:out value="${sessionScope.attr1}" default="def"/>

4.<c:catch>标签

用于捕获嵌套再标签体重的内容抛出的异常

<%--catch --%>
<c:catch var="myException">
	<%=5/0%>
</c:catch>
<c:out value="${myException}"/>
<c:out value="${myException.message}"/>


上述四个标签的效果:

游客 <b>粗体字</b> 粗体字
abc
def
java.lang.ArithmeticException: / by zero / by zero

条件标签:

<c:if>标签,用于进行条件判断

<jsp:useBean id="person1" class="com.javabean.Person" scope="session"/>
<jsp:setProperty property="name" name="person1" value="zhangsan"/>
<c:if test="true">
	${sessionScope.person1.name }
</c:if>

<c:choose>标签,<c:when>标签,<c:otherwise>标签可以构造类似if..else等结构、

迭代标签:

1.<c:forEach>

var:用于指定当前迭代到的元素保存到page域中的属性名称

items:用于指定将要迭代的集合对象

varStatus:表示当前被迭代的对象的状态信息,包括四个属性,index(表示当前迭代成员的属性值)、count(表示当前已迭代的成员的数量)、first(表示当前迭代到的成员是否为第一个)、last(表示当前迭代到的成员是否为最后一个)

begin:表示遍历的起始索引,值为整数

end:表示遍历的结束索引,值为整数

step:表示迭代的步长,值为整数

迭代数组对象:

<%
	int arr[] = new int[5];
	for(int i = 0; i < 5; i++){
		arr[i] = i;
	}
	request.setAttribute("arr", arr);
%>
<c:forEach items = "${arr}" var="item">
	${item}
</c:forEach>

迭代集合对象;

<%
	List<Person> list = new ArrayList<>();
	list.add(new Person("张三",20,1));
	list.add(new Person("李四",18,2));
	list.add(new Person("王五",21,3));
	session.setAttribute("list", list);
%>
<c:forEach items="${sessionScope.list}" var="person" varStatus="vst">
	<br/>序号:${vst.index },信息:${person.name},${person.age} 
</c:forEach>

迭代Map对象:

<%
	Map<String, String> map = new HashMap<>();
	map.put("一","abc");
	map.put("二","def");
	map.put("三","hij");
	
	request.setAttribute("map", map);
%>
<c:forEach items="${requestScope.map }" var="e">
	<p>${e.key}, ${e.value}</p>
</c:forEach>

迭代指定次数:

<c:forEach begin="1" end="100" step="1" var="num">
	<c:set var = "sum" value="${sum+num }"/>
</c:forEach>
${sum}

<c:forTokens>标签:

可以按照指定的分隔符对字符串进行迭代

items用于指定将要迭代的字符串

delims用于指定一个或多个分隔符

varStatus表示当前被迭代到的对象的状态信息,包括四个属性,index(表示当前迭代的索引值),count(表示已迭代成员的数量),first(表示当前的成员是否是第一个),last(表示当前成员是否是最后一个)

begain指定从第begain个子字符串开始进行迭代,从0开始编号

end指定迭代到第end个字符串,从0开始编号

step指定迭代的步长,即每次迭代后的迭代因子增量

<c:set var = "str" value="a|b|c|d"/>
<c:forTokens var = "e" items="${str }" delims="|">
	<p>${e}</p>
</c:forTokens>

URL相关标签:

提供了一些与URL操作相关的标签

value指定要构造的URL

var指定构造的属性名

scope指定够左的URL放到哪个域

context指定URL所属同一容器下的Web应用上下文

<c:param>指定参数

构造URL的两种方式

<c:url value="test.jsp?name=abc&value=123" var="u1"></c:url>
<a href="${u1 }">查询1</a><br/>

<c:url value="/test.jsp" var="u2" context="/JavaWeb" scope="page">
	<c:param name="abc" value="123"/>
</c:url>
<a href="${u2 }">查询2</a><br/>

<c:redirect>

可以进行重定向

<c:url value="test.jsp" var="u3"/> 
<c:redirect url="${u3 }"/>

<c:import>

可以导入指定的url,而且是任意的url

<c:import url="test.jsp"/>

<c:import url="/test.jsp" context="/JavaWeb" var="u4" scope="page" charEncoding="utf-8">
  <c:param name="abc" value="123/>"
</c:import>

函数标签库:

<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
函数名称 功能
contains(String string, String substring) 判断string中是否包含substring
containsIgnoreCase(String string, String substring) 判断string中是否包含substring,不区分大小写
endsWith(String string, String suffix) 判断string是否以suffix结尾
escapeXml(String string) 将字符串中的xml/html等特殊字符转换为实体字符
indexOf(String string, String substring) 查找string中substring第一次出现的位置
join(Strong[] array, String separator) 将array中的字符以separator分隔符链接起来
length(Object item) 返回元素的长度
replace(String string, String before,String after) 用after替换string中before
split(String string, String separator) 以separator分隔符对string进行分割
startWith(String string, String prefix) 判断字符串是否以prefix开头
substringAfter(String string, String substring) 返回substring在string中后面的内容
substringBefore(String string, String substring) 返回substring在string中前面的内容
toLowerCase(String string) 将所有的字符转换为小写返回
toUpperCase(String string) 将所有的字符转换为大写返回
trim(String string) 取出string首尾的空格后返回
substring(String string, int begin, int end) 返回string从begin到end的内容

自定义标签库:

自定义方法,需要继承SimleTagSupport并覆盖doTag方法

package com.myel;

import javax.servlet.jsp.tagext.SimpleTagSupport;

public class my_print extends SimpleTagSupport{
	public void doTag() {
		System.out.println("hello");
	}
}

编写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>my</short-name>
	<!-- 标签库的唯一名称 -->
	<uri>/eltest</uri>
	<!-- 定义一个标签 -->
	<tag>
		<!-- 标签名称 -->
		<name>print</name>
		<!-- 标签处理程序全名:保命+类名 -->
		<tag-class>com.myel.my_print</tag-class>
		<!-- 标签体体内容输出格式 -->
		<body-content>scriptless</body-content>
	</tag>
</taglib>

JSP中调用标签:

<body>
<my:print/>
</body>

结果:

控制台输出hello

猜你喜欢

转载自blog.csdn.net/smallhc/article/details/80719134