javaweb:JSTL(JSP标准标签库)、自定义标签开发

版权声明: https://blog.csdn.net/weixin_42442713/article/details/84258214

JSTL 简介:

JSTL的全称:

JSP Standard Tag LibraryJSP标准标签库

JSTL的作用:

提供给 Java Web 开发人员一个标准通用的标签函数库

EL 来取代传统直接在页面上嵌入 Java 程序(Scripting)的做法,以提高程序可读性、维护性和方便性

JSTL的版本:

JSTL的主要版本是1.01.11.2(区别不大)

1.0版本EL表达式还没有纳入官方规范

1.11.2版本EL表达式已经纳入了官方规范

JSTL1.1下载相应的jar包:

JSTL的下载

JSTL 主要由Apache组织的Jakarta Project 实现

http://tomcat.apache.org/taglibs/standard/

容器必须支持Servlet 2.4 JSP 2.0 以上版本

JavaEE1.4

JSTL导入jar

解压缩后将lib 中的jstl.jarstandard.jar 复制到WEB应用程序的WEB-INF\lib

JSTL标签库:

核心标签库 (core)  --- c(重点)

XMLx:操作xml的标签库)

SQLsql标签库)

FMTfmt:国际化标签库)

JSTL函数(EL函数) el

注意:EL表达式和JSTL标签库,操作都是域对象中的属性和属性的值

jstl1.2.jar 中包含的 5个标签库:

标签

URI前缀

前缀

功能

Core

http://java.sun.com/jsp/jstl/core

<c:>

核心标签库,基本操作

I18N

http://java.sun.com/jsp/jstl/fmt 

<fmt:>

格式化和国际化操作

XML

http://java.sun.com/jsp/jstl/xml

<x:>

XML文档处理操作

SQL

http://java.sun.com/jsp/jstl/sql

<sql:>

对数据库的操作

Functions

http://java.sun.com/jsp/jstl/functions

<fn:>

EL函数

JSTL快速入门:

l导入jar

jstl.jarstandard.jar

l新建jsp的页面

在页面中引入核心标签库

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

JSTL标签库关于导入版本的问题

http://java.sun.com/jsp/jstl/core  1.1或者1.2版本(使用该版本)

http://java.sun.com/jstl/core  1.0版本(不支持EL表达式

通用标签 <c:out> <c:set> <c:remove>:

<c:out>标签:

l输出常量或者域范围中的变量(value属性,使用EL表达式)

l输出默认值(default属性)

l默认html标签不转义(escapeXml

属性名

是否支持EL

属性类型

属 性 描 述

Value

true

Object

指定要输出的内容

escapeXml

true

Boolean

指定是否将>、<、&、'、" 等特殊字符进行HTML编码转换后再进行输出。默认值为true

default

true

Object

指定如果value属性的值为null时所输出的默认值

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    
<!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>

<h4>JSTL的方式</h4>
<%
	int a  =10;
	request.setAttribute("num", a);
%>

<c:out value="num"></c:out>
<c:out value="${ num }"></c:out>

<!-- default 默认值  ${ num2 }如果num2没有域属性,输出的是""-->
<c:out value="${ num2 }" default="北京"></c:out>

<c:out value="<a href='http://www.baidu.com'>百度</a>" escapeXml="false"/>


</body>
</html>

<c:set>标签:

l4个域中存入值。var  value   scope属性)

l设置Web域中的java.util.Map类型的属性对象或JavaBean类型的属性对象的属性。 target   property    value属性)

属性名

是否支持EL

属性类型

属 性 描 述

value

true

Object

用于指定属性值

var

false

String

用于指定要设置的Web域属性的名称

scope

false

String

用于指定属性所在的Web

target

true

Object

用于指定要设置属性的对象,这个对象必须是JavaBean对象或java.util.Map对象

property

true

string

用于指定当前要为对象设置的属性名称


<h4>JSTL的方式</h4>
<c:set var="username" value="meimei" scope="page"></c:set>
<c:out value="${ username }"></c:out>

<c:remove>标签 :相当于request。removeAttribute(" x");

<c:remove>标签用于删除各种Web域中的属性。

  其语法格式如下:

  <c:remove var="varName"   scope="{page|request|session|application}"/>

 

 <c:catch>标签:

<c:catch>标签用于捕获嵌套在标签体中的内容抛出的异常,其语法格式如下:<c:catch [var="varName"]>nested actions</c:catch>

var属性用于标识<c:catch>标签捕获的异常对象,它将保存在page这个Web域中。

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

<%@ page contentType="text/html;charset=gb2312" %>

<c:catch var="myex“ >

  <%

  10/0;

  %>

</c:catch>

异常:<c:out value="${myex}" />  ${myex}<br />

异常 myex.getMessage<c:out value="${myex.message}" /><br />

异常 myex.getCause<c:out value="${myex.cause}" /><br />

异常 myex.getStackTrace<c:out value="${myex.stackTrace}" />

<body>

<h4>JSTL的方式</h4>

<!--传统方式 -->

<%
	try{
	
	}catch(Exception e){
		
	}
%>

<c:catch var="e">
<% 
	int a = 10/0;
%>	
</c:catch>
${ e.message }


</body>

<c:if>标签:(没有<c:else>标签)    重点

<c:if test=“”>标签可以构造简单的“if-then”结构的条件表达式  

属性名

是否支持EL

属性类型

属 性 描 述

test

true

boolean

决定是否处理标签体中的内容的条件表达式,test属性必须出现

var

false

String

用于指定将test属性的执行结果保存到某个Web域中的某个属性的名称(即test返回的结果保存到var声明的变量中,可以直接拿来使用

scope

false

String

指定将test属性的执行结果保存到哪个Web域中(域的范围

<body>
<h4>JSTL的方式</h4>
<c:set var="num" value="10" scope="page"></c:set>

<c:if test="${ num eq 10 }" var="i" scope="page">
	num=10
</c:if>

<!-- 使用i的变量 -->
<c:if test="${ i }">
	test=true
</c:if>


<myc:out>
	EL表达式   JSTL
</myc:out>

</body>

<c:choose>标签  重点

l<c:choose>标签用于指定多个条件选择的组合边界,它必须与<c:when><c:otherwise>标签一起使用。使用<c:choose><c:when><c:otherwise>三个标签,可以构造类似 “if-else if-else的复杂条件判断结构。

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

<%@ page contentType="text/html;charset=gb2312" %>

<c:set value="${param.count}" var="count“  /> pageContext(count,2)

<c:choose>

  <c:when test="${count == 0}">

  对不起,没有符合您要求的记录。

  </c:when>

  <c:otherwise>

  符合您要求的记录共有${count}.

  </c:otherwise>

</c:choose>

<body>

<h4>JSTL的方式</h4>
<c:set var="num" value="10" scope="page"></c:set>
<c:choose>
	<c:when test="${ num ge 10 }">
		num>=10
	</c:when>
	<c:when test="${ num lt 10 }">
		num<10
	</c:when>
	<c:otherwise>
		其他
	</c:otherwise>
</c:choose>

</body>

<c:forEach>标签:

<c:forEach>标签用于对一个集合对象中的元素进行循环迭代操作,或者按指定的次数重复迭代执行标签体中的内容。

属性名

是否支持EL

属性类型

属 性 描 述

var

false

String

指定将当前迭代到的元素保存到page这个Web域中的属性名称(循环遍历的数量保存到var声明变量中

varstatus

false

String

记住用于保存迭代信息的对象

items

true

任何支持的类型

将要迭代的集合对象

begin

true

int

如果指定items属性,就从集合中的第begin个元素开始进行迭代,begin的索引值从0开始编号;如果没有指定items属性,就从begin指定的值开始迭代,直到end值时结束迭代

end

true

int

参看begin属性的描述

step

true

int

指定迭代的步长,即迭代因子的迭代增量

例子 :

后台程序:

package cn.itcast.servlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.itcast.domain.User;

/**
 * 查询的所有用户的信息
 * @author Administrator
 */
public class UserServlet extends HttpServlet {
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 创建集合
		List<User> uList = new ArrayList<User>();
		// 把对象放入到集合 中
		uList.add(new User("美美","123"));
		uList.add(new User("小凤","456"));
		uList.add(new User("如花","789"));
		// 把集合放入到request域中
		request.setAttribute("uList", uList);
		// 转发到JSP页面上
		request.getRequestDispatcher("/jstl/foreach2.jsp").forward(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request, response);
	}

}

foreach.jsp 

<body>

<h4>JSTL的方式</h4>
<%
	List<String> list = new ArrayList<String>();
	list.add("美美");
	list.add("尹相杰");
	list.add("高虎");
	request.setAttribute("list", list);
%>
<h4>遍历list集合和数组方式是一样的</h4>
<!--  for(String str : list){ } -->
<c:forEach var="str" items="${ list }">
	${ str }
</c:forEach>

<%
	Map<String,String> map = new HashMap<String,String>();
	map.put("aaa", "美美");
	map.put("bbb", "小凤");
	map.put("ccc", "芙蓉");
	request.setAttribute("map", map);
%>
<c:forEach var="entry" items="${ map }">
	${ entry.key } -- ${ entry.value }
</c:forEach>


<h4>从1循环10</h4>
<c:forEach var="i" begin="1" end="10" step="1">
	${ i }
</c:forEach>

<h1>从1加到10的和</h1>
<c:set var="sum" value="0" scope="page"></c:set>
<c:forEach var="i" begin="1" end="10" step="1">
	<c:set var="sum" value="${ sum + i }" scope="page"></c:set>
</c:forEach>
${ sum }


<h4>遍历10到100的偶数,每到第3个数,显示红色</h4>
<c:forEach var="i" begin="10" end="100" step="2" varStatus="status">
	<c:choose>
		<c:when test="${ status.first }">
			<font color="green">${ i }</font>
		</c:when>
		<c:when test="${ status.count % 3 eq 0 }">
			<font color="red">${ i }</font>
		</c:when>
		<c:otherwise>
			${ i }
		</c:otherwise>
	</c:choose>
</c:forEach>

</body>

foreach.jsp :

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    
<!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>

<h4>JSTL的方式</h4>
<h4>可以获取request域中的list集合</h4>
<c:forEach var="u" items="${ uList }" >
	${ u.username }
	${ u.password }
</c:forEach>

<h4>用户信息列表</h4>
<table border="1" width="60%" cellpadding="10">
	<tr>
		<th>序号</th>
		<th>姓名</th>
		<th>密码</th>
		<th>操作</th>
	</tr>
	<c:forEach var="user" items="${ uList }" varStatus="s">
		<tr align="center">
			<td>${ s.count }</td>
			<td>${ user.username }</td>
			<td>${ user.password }</td>
			<td><a href="${ pageContext.request.contextPath }/deleteUser?username=${user.username}">删除</a></td>
		</tr>
	</c:forEach>
</table>
</body>
</html>

<c:forEach>遍历集合:

l遍历数组或者集合

Var:代表遍历的每一个元素

Items:要迭代的集合对象

获取遍历的内容:${xxx}

l遍历Map集合

Var:代表keyvalue的关系entry

Items:要迭代的map集合

获取遍历的内容:${xxx.key}  ${xxx.value}

l遍历对象集合

Var:代表遍历的每一个对象

Items:要迭代的集合

获取遍历的内容:${xxx.属性

<c:forEach>迭代数据:

l1遍历到10

var  定义变量

begin  从哪开始

end  到哪结束

step  迭代步长(相当于 x += step

计算从1加到10的和

定义变量sum,值为0

通过forEach循环110,没循环一次加到另一个变量中

在循环中间定义变量,每次计算到该变量中

varStatus属性:

<c:forTokens>(了解):

<c:forTokens>:

<c:forTokens

  items=要切分的字符串

  delims=按着什么格式切分

  var=定义变量

  [varStatus="varStatusName"]

  [begin="begin"]

  [end="end"]

  [step="step"]>

    //body内容

</c:forTokens>

 

URL相关标签 <c:import><c:url>(重点)<c:redirect> <c:param>:

<c:param>标签

JSP页面进行URL的相关操作时,经常要在URL地址后面附加一些参数。<c:param>标签可以嵌套在<c:import><c:url><c:redirect>标签内,为这些标签所使用的URL地址附加参数。

<c:param>标签在为一个URL地址附加参数时,将自动对参数值进行URL编码,例如,如果传递的参数值为“中国”,则将其转换为“%d6%d0%b9%fa”后再附加到URL地址后面,这也就是使用<c:param>标签的最大好处。

示例:<c:param name="name" value="value" />

<c:import> 标签:

<c:url>标签

<c:url>标签用于在JSP页面中构造一个URL地址,其主要目的是实现URL重写。URL重写就是将会话标识号以参数形式附加在URL地址后面

l使用value属性默认会添加项目名称。

属性名

是否支持EL

属性类型

属 性 描 述

value

true

String

指定要构造的URL

var

false

String

指定将构造出的URL结果保存到Web域中的属性名称

scope

false

String

指定将构造出的URL结果保存到哪个Web域中

<c:redirect>标签:

l<c:redirect>标签用于实现请求重定向

属性名

是否支持EL

属性类型

属 性 描 述

url

true

String

指定要转发或重定向到的目标资源的URL地址

context

true

String

当要使用相对路径重定向到同一个服务器下的其他WEB应用程序中的资源时,context属性指定其他WEB应用程序的名称

自定义标签简介:

自定义标签主要用于移除Jsp页面中的java代码,提高代码的复用性。

使用自定义标签移除jsp页面中的java代码,只需要完成以下两个步骤:

编写一个实现Tag接口的Java(标签处理器类)

编写标签库描述符(tld)文件,在tld文件中对标签处理器类描述成一个标签

第一步:

建一个java类,在里面自定义方法:
 

package cn.itcast.el;

/**
 * 后台的自定义EL函数
 * @author Administrator
 *
 */
public class ElDemo {
	
	/**
	 * say hello方法
	 * @param str
	 * @return
	 */
	public static String sayHello(String str){
		return "hello "+str;
	}
}

第二步:

在WEB-INF目录下创建一个文件夹,并在文件夹中创建一个 myc.tid文件,这是一个配置文件,在此文件中完成配置

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" 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">
 <tlib-version>1.0</tlib-version>
 <short-name>myc</short-name>
 <uri>http://www.itcast.cn/0108/myc</uri>
 
 <!-- 配置自定义标签 -->
 <tag>
 	<!-- 配置标签名称 -->
 	<name>print</name>
 	<!-- 标签使用的类 -->
 	<tag-class>cn.itcast.jstl.JstlDemo1</tag-class>
 	<!-- 配置标签主体 -->
 	<body-content>empty</body-content>
 </tag>
 
 
 <!-- 配置自定义标签 -->
 <tag>
 	<!-- 配置标签名称 -->
 	<name>out</name>
 	<!-- 标签使用的类 -->
 	<tag-class>cn.itcast.jstl.JstlDemo2</tag-class>
 	<!-- 配置标签主体 -->
 	<body-content>scriptless</body-content>
 </tag>
 
 <!-- 配置自定义标签 -->
 <tag>
 	<!-- 配置标签名称 -->
 	<name>if</name>
 	<!-- 标签使用的类 -->
 	<tag-class>cn.itcast.jstl.JstlDemo3</tag-class>
 	<!-- 配置标签主体 -->
 	<body-content>scriptless</body-content>
 	<!-- 配置属性 -->
 	<attribute>
 		<!-- 配置数据名称 -->
 		<name>test</name>
 		<!-- 属性是否是必须出现的 -->
 		<required>true</required>
 		<!--  支持EL表达式 -->
 		<rtexprvalue>true</rtexprvalue>
 		<!-- 属性的类型 -->
 		<type>boolean</type>
 	</attribute>
 </tag>
 
</taglib>

第三步:

在jsp中引用自己定义的EL函数:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<!-- 引入自己的EL函数 -->
<%@ taglib prefix="myfn" uri="http://www.itcast.cn/0108/myfn" %>
    
<!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>

<h4>使用自己编写EL函数</h4>
${ myfn:sayHi("小凤") }

</body>
</html>


参考tomcat中的examples 项目中jsp 部分

简单标签:
 

l由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单、便于编写和调用的SimpleTag接口来实现标签的功能。实现SimpleTag接口的标签通常称为简单标签。简单标签共定义了5个方法:

setJspContext方法

setParentgetParent方法

setJspBody方法

doTag方法

SimpleTag方法介绍:阅读API

lsetJspContext方法

用于把JSP页面的pageContext对象传递给标签处理器对象

lsetParent方法

用于把父标签处理器对象传递给当前标签处理器对象

lgetParent方法

用于获得当前标签的父标签处理器对象

lsetJspBody方法

用于把代表标签体的JspFragment对象传递给标签处理器对象

ldoTag方法

用于完成所有的标签逻辑,包括输出、迭代、修改标签体内容等。在doTag方法中可以抛出javax.servlet.jsp.SkipPageException异常,用于通知WEB容器不再执行JSP页面中位于结束标记后面的内容,这等效于在传统标签的doEndTag方法中返回Tag.SKIP_PAGE常量的情况。

SimpleTag接口方法的执行顺序:

lweb容器开始执行标签时,会调用如下方法完成标签的初始化

WEB容器调用标签处理器对象的setJspContext方法,将代表JSP页面的pageContext对象传递给标签处理器对象。

WEB容器调用标签处理器对象的setParent方法,将父标签处理器对象传递给这个标签处理器对象。注意,只有在标签存在父标签的情况下,WEB容器才会调用这个方法。

如果调用标签时设置了属性,容器将调用每个属性对应的setter方法把属性值传递给标签处理器对象。如果标签的属性值是EL表达式或脚本表达式,则WEB容器首先计算表达式的值,然后把值传递给标签处理器对象。

如果简单标签有标签体,容器将调用setJspBody方法把代表标签体的JspFragment对象传递进来。

l执行标签时:

容器调用标签处理器的doTag()方法,开发人员在方法体内通过操作JspFragment对象,就可以实现是否执行、迭代、修改标签体的目的。

JspFragment类:

ljavax.servlet.jsp.tagext.JspFragment类是在JSP2.0中定义的,它的实例对象代表JSP页面中的一段符合JSP语法规范的JSP片段,这段JSP片段中不能包含JSP脚本元素

lWEB容器在处理简单标签的标签体时,会把标签体内容用一个JspFragment对象表示,并调用标签处理器对象的setJspBody方法把JspFragment对象传递给标签处理器对象。JspFragment类中只定义了两个方法,如下所示:

lgetJspContext方法

用于返回代表调用页面的JspContext对象. ---- pageContext

lpublic abstract void invoke(java.io.Writer out)  -- 输出标签体内容

用于执行JspFragment对象所代表的JSP代码片段

参数out用于指定将JspFragment对象的执行结果写入到哪个输出流对象中,如果传递给参数out的值为null,则将执行结果写入到JspContext.getOut()方法返回的输出流对象中。(简而言之,可以理解为写给浏览器)

invoke方法详解  :

lJspFragment.invoke方法是JspFragment最重要的方法,利用这个方法可以控制是否执行和输出标签体的内容、是否迭代执行标签体的内容或对标签体的执行结果进行修改后再输出。例如:

在标签处理器中如果没有调用JspFragment.invoke方法,其结果就相当于忽略标签体内容;

在标签处理器中重复调用JspFragment.invoke方法,则标签体内容将会被重复执行;

若想在标签处理器中修改标签体内容,只需在调用invoke方法时指定一个可取出结果数据的输出流对象(例如StringWriter),让标签体的执行结果输出到该输出流对象中,然后从该输出流对象中取出数据进行修改后再输出到目标设备,即可达到修改标签体的目的。

例:控制标签后的jsp页面是否执行

ldoTag

throw new SkipPageException()

lTld配置

<tag>

  <name>demo2</name>

  <tag-class>simple.MyTag2</tag-class>

  <body-content>empty</body-content>

</tag>

自定义标签入门:

l需求:自定义标签<myc:print>在页面中输出hello

编写标签类

编写一个类,继承SimpleTagSuppot类。

重写两个方法,doTag()setJspContext(JspContext pc)

JspContext对象可以获取out对象向外输出内容

提供tld文件进行配置

通过<tag>标签配置自定义标签

配置标签名称<name>print</name>

配置标签的类<tag-class>xxx.xxx.xxx</tag-class>

配置标签体的内容<body-content>empty</body-content>

JSP的页面中引入该标签库

自定义带有标签体的标签:

l需求:自定义标签<myc:out>在页面中输出内容

编写标签类

编写一个类,继承SimpleTagSuppot类。

重写两个方法,doTag()setJspContext(JspContext pc)

doTag()中通过getJspBody()获取JspFragment标签体,调用invoke(null)

提供tld文件进行配置

通过<tag>标签配置自定义标签

配置标签名称<name>out</name>

配置标签的类<tag-class>xxx.xxx.xxx</tag-class>

配置标签体的内容<body-content>scriptless</body-content>

JSP的页面中引入该标签库

Body-content的配置:

l<body-content>元素的可选值有:

empty:不能有标签体内容。

JSP:标签体内容可以是任何东西:ELJSTL<%=%><%%>,以及html但不建议使用Java代码段SimpleTag已经不再支持使用<body-content>JSP</body-content>

scriptless:标签体内容不能是Java代码段,但可以是ELJSTL等;

tagdependent:标签体内容不做运算,由标签处理类自行处理,无论标签体内容是ELJSPJSTL,都不会做运算。

自定义带有属性的标签:

l需求:自定义标签<myc:if>在页面中输出内容

编写标签类

编写一个类,继承SimpleTagSuppot类。

提供页面的属性,设置成boolean类型。并且提供set方法,页面的属性与类中的属性名称必须相同。

重写doTag()方法,判断属性是否为true,通过getJspBody()获取JspFragment标签体,调用invoke(null)

提供tld文件进行配置

通过<tag>标签配置自定义标签

配置标签名称<name>if</name>

配置标签的类<tag-class>xxx.xxx.xxx</tag-class>

配置标签体的内容<body-content>scriptless</body-content>

配置属性<attribute>在属性中配置其他信息</attribute>

attribute的配置:

l配置属性名称

<name>test</name>

l属性是否是必须的

<required>true</required>

l配置是否支持EL表达式

< rtexprvalue>true</ rtexprvalue>

l配置属性的类型

<type>boolean</type>

TLD中描述标签属性 attribute:

元素名

是否必须指定

描      述

description

用于指定属性的描述信息。

name

用于指定属性的名称。属性名称是大小写敏感的,并且不能以jsp_jspjavasun开头。

required

用于指定在JSP页面中调用自定义标签时是否必须设置这个属性。其取值包括truefalse,默认值为falsetrue表示必须设置,否则可以设置也可以不设置该属性。

rtexprvalue

rtexprvalueruntime expression value(运行时表达式)的英文简写,用于指定属性值是一个静态值或动态值。其取值包括truefalse,默认值为falsefalse表示只能为该属性指定静态文本值,例如"123"true表示可以为该属性指定一个JSP动态元素,动态元素的结果作为属性值,例如JSP表达式<%=value %>

type

用于指定属性值的Java类型。默认String

                                                 

猜你喜欢

转载自blog.csdn.net/weixin_42442713/article/details/84258214