1.自定义标签 【理解】
[1]简介
> 在JSP2.0以后,在jsp页面中不建议使用脚本片段<% %>和JSP表达式<%= %>
> 使用EL来替换的JSP表达式
> 使用标签来替换脚本片段
> 在JSP中已经为我们提供了很多的诸如:<jsp:forward page=""></jsp:forward>
这样的JSP动作标签,这些标签最终在被翻译的时候都会被转换为一段Java代码
> 标签就是以标签的形式去调用Java程序
> 但是JSP的动作标签并不能满足我们的全部需求,所以我们还需要去自定义标签
> 多个自定义标签就组成了一个自定义标签库
> 每一个自定义标签的背后都有一个标签处理器类去支持他的功能
[2]使用步骤
1.创建标签处理器类
- 创建一个标签处理器类,要求我们要实现SimpleTag接口
void doTag() --> 标签处理器类中的主要方法,每次标签执行时,doTag()方法都会被调用
JspTag getParent() --> 获取当前标签的父标签
void setParent(JspTag parent) --> 设置当前标签的父标签,由服务器调用
void setJspBody(JspFragment jspBody) --> 设置标签的标签体,该方法由服务器调用,用来设置当前标签的标签体
void setJspContext(JspContext pc) --> 设置PageContext,PageContext可以用来获取jsp中的其他隐含对象
- 我们说实现SimpleTag接口时,所有方法我们都需要去实现,而这些实现大部分都是重复,
所以我们真实使用时,一般不会直接实现该接口,而是通过继承SimpleTagSupport的方式去创建一个标签处理器类。
- SimpleTagSupport中已经实现类SimpleTag中的所有方法,我们只需要重写doTag()方法即可,
其他的JspContext,标签体,父标签,都可以直接去调用相应的get方法即可
2.在服务器中注册标签处理器类(tld文件)
- 编写tld文件(标签库的描述文件),实际上它就是一个xml文件,只是他扩展名是tld
- tld文件需要编写在WEB-INF目录下
- 标签库的描述信息:
<!-- 标签库的配置信息 -->
<tlib-version>1.0</tlib-version>
<!-- 标签的短名,标签的前缀 -->
<short-name>a</short-name>
<!-- 标签库的唯一标识 -->
<uri>http://www.bdp.com/taglib/a</uri>
- 自定义标签的描述信息:
<!-- 具体标签的配置信息 -->
<tag>
<!-- 标签的名字,通过标签名来使用标签 -->
<name>MyTag</name>
<!-- 标签的全类名 -->
<tag-class>com.bdp.taglib.MyTag</tag-class>
<!-- 标签体的类型 -->
<body-content>empty</body-content>
</tag>
- body-content
- 用来设置标签体的类型,四个可选值:
1.empty 表示标签没有标签体,是一个自结束标签
2.scriptless 表示当标签体中的内容是一个EL表达式时,服务器会自动解析EL表达式
3.JSP 表示标签体可以是一个JSP脚本片段
4.tagdependent 表示当标签体是一个EL表达式时,服务器将不会解析
- 结论:
一般情况下,如果是一个自结束标签,则使用empty
如果有标签体则使用scriptless
- 如果标签中有属性,则在tag标签中还需要做如下的配置:
<attribute>
<name></name>
<required></required>
<rtexprvalue></rtexprvalue>
</attribute>
name:属性名
required:属性是否是必须的,如果是必须则设置true,否则设置false
rtexprvalue:如果属性值是一个EL表达式是否自动解析,两个值true则自动解析,false则不解析
3.在页面引入标签库
<%@ taglib prefix="a" uri="http://www.bdp.com/taglib/a" %>
uri:和标签库uri一致,标签库的唯一标识,通过uri来导入指定的标签库
prefix:标签的前缀,可以随便写,但是我们习惯和short-name一致
2.JSTL(JSP Standard Tag Library)
[1] JSTL简介
> JSTL是JSP的标准标签库
> JSTL为我们提供了一些常用的标签,供我们日常开发使用(if 、 if...else 、遍历 、 日期格式化)
> 标签库
- core :核心标签库
- 核心标签库是我们JSTL中最常用的一个标签库,它里面封装很多常用的功能
- 核心标签库又称为c标签
- fn :函数标签库
- 函数标签库中主要定义了一些字符串相关的方法,函数标签库需要结合EL表达式一起使用
- fmt :格式化标签库(国际化标签库)
- 对日期和数字进行格式化(国际化)操作
- 2016/1/18 1/18/2016 1000 1,000
- sql : 数据库标签库
- 在jsp中操作数据库的标签。已淘汰
- xml : xml标签库
- 在jsp解析xml的标签。已淘汰
> 使用JSTL需要先导入两个jar包:
- taglibs-standard-impl-1.2.1.jar
- taglibs-standard-spec-1.2.1.jar
[2] 核心标签库
- 在页面中引入核心标签库:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- 使用:
out
作用:将一个对象输出的页面中
参数:
value:要输出的内容,可以是一个EL表达式
default:当value属性为空时,要显示的内容(默认值)
escapeXml:是否自动转义特殊字符,默认值为true,自动转义
例子:
<c:out value="${code }" default="sunwukong" escapeXml="true" ></c:out>
set
作用:向域中设置一个属性
参数:
var:属性名
value:属性值
scope:要将属性放入到的域中,可选值:page request session application
如果不写,默认是page
例子:
<c:set var="username" value="sunwukong" scope="request" ></c:set>
remove
作用:移除域中的指定属性
参数:
var:要移除的属性的属性名
scope:要移除属性的域,可选值:page request session application
如果不指定,则移除四个域中属性
例子:
<c:remove var="username" scope="session"></c:remove>
if
作用:可以java中的if类似
属性:
test:test需要一个布尔值,如果值为true,则执行标签体,否则不执行
例子:
<c:if test="${empty param.username}">请输出用户名!</c:if>
choose when otherwise
作用:和if else 类似
choose有两个子标签,when otherwise,when和otherwise必须做完choose的子标签出现,不能单独使用。
在choose可以指定多个when标签,但是只能指定一个otherwise,
多个when标签只会有一个执行,如果when都不满足条件,则执行otherwise。
例子:
<c:choose>
<c:when test="${param.score==100 }">
<h3>恭喜您,考了100分!</h3>
</c:when>
<c:when test="${param.score >= 90 }">
<h3>您的分数是A!</h3>
</c:when>
<c:otherwise>
<h3>恭喜你,没及格!</h3>
</c:otherwise>
</c:choose>
forEach
作用1:可以遍历一组数
属性:
begin:遍历的开始位置,注意不能小于0
end:遍历的结束位置
var:指定一个变量名
step(可选):指定遍历时的步长(每次自增的长度)
例子:
<c:forEach begin="1" end="10" step="1" var="index">
${index}
</c:forEach>
作用2:可以遍历集合
属性:
items:指定要遍历的集合,需要一个EL表达式
var:指定一个变量名
varStatus:遍历状态,获取当前元素遍历的状态(index count first last)
例子:
<c:forEach items="${list }" var="hero">
${hero} <br />
</c:forEach>
<c:forEach items="${list }" var="hero" varStatus="vs">
${vs.last }--${vs.first }-${vs.index }---${vs.count }---${hero} <br />
</c:forEach>
*******************************************************************************
${vs.index} 输出行号,从0开始。
${vs.count} 输出行号,从1开始。
${vs.current} 当前这次迭代的(集合中的)项
${vs.first} 判断当前项是否为集合中的第一项,返回值为true或false
${vs.last} 判断当前项是否为集合中的最后一项,返回值为true或false
<c:forEach begin='1' end='5' step='2' items='${list}' var='item'>
begin、end、step分别表示:起始序号,结束序号,跳跃步伐。
*********************************************************************************
注意:遍历Map时,是获取的map中的一个一个键值对,我们可以通过.key获取键,通过.value来获取值
<c:forEach items="${map}" var="stu">
${stu.key} --- ${stu.value} <br />
</c:forEach>
url
作用:用来为绝对路径加上项目名
参数:
value:要设置的绝对路径
var:变量名,如果不指定var,则路径会直接输出,如果指定var,则路径会放入到page域中
例子:
<c:url value="/index.jsp" var="url">
<c:param name="username" value="sunwukong"></c:param>
<c:param name="age" value="18"></c:param>
<c:param name="gender" value="男"></c:param>
</c:url>
补充:
我们可以使用c:param标签在地址后附加请求参数,同时参数中的中文会自动进行url编码
redirect
作用:请求的重定向
参数:
url:指定重定向的目标地址,注意会自动加上项目名,就不要写项目名
例子:
<c:redirect url="/index.jsp">
<c:param name="username" value="sunwukong"></c:param>
<c:param name="age" value="18"></c:param>
<c:param name="gender" value="男"></c:param>
</c:redirect>
补充:
我们可以使用c:param标签在地址后附加请求参数,同时参数中的中文会自动进行url编码
[3] 函数标签库
- 在页面中引入函数标签库
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
- 使用:
函数标签库需要结合EL表达式一起使用,里边都是一些字符串的相关操作。
- 例子:
${fn:xxxx}
<!-- fn:contains判断一个字符串是否包含另一个 -->
${fn:contains('hello','lO') } <br />
<!-- fn:containsIgnoreCase判断一个字符串是否包含另一个,忽略大小写 -->
${fn:containsIgnoreCase('hello','lO') }<br />
<!--fn:escapeXml自动转义特殊字符 -->
${fn:escapeXml("<html></html>") }<br />
<!--fn:join用于将一个String数组转换为一个字符串,第二个参数需要指定一个连接符 -->
${fn:join(strs,"@") }<br />
<!-- fn:split将一个字符串根据指定的字符拆分为一个数组,第二个参数需要指定一个拆分的字符 -->
${fn:split("a@b@c@d@e","@")[2] }<br />
<!-- 将一个字符串转换为大写 -->
${fn:toUpperCase("abcdefg") }<br />
- 具体用法参照alt+/
转载请注明出处!
http://www.cnblogs.com/libingbin/
感谢您的阅读。如果文章对您有用,那么请轻轻点个赞,以资鼓励。
- 标准标签库JSTL(JSP Standard Tag Library)
1, 核心标签(最常用, 最重要的) 表达式控制标签 out 输出常量 value---直接赋值 输出变量 default---默认值 escapeXml---控制转义字符(默认为true, 如果需要 ...
- JSTL的全称:JSP Standard Tag Library, jsp 标准标签库
JSTL的全称:JSP Standard Tag Library, jsp 标准标签库 JSTL的作用 提供给Java web开发人员一个标准通过的标签函数库和EL来取代传统直接在页面上嵌入j ...
- JSTL(JSP Standard Tag Library ,JSP标准标签库)
JSTL标签之核心标签 JSTL(JSP Standard Tag Library ,JSP标准标签库)是一个实现 Web应用程序中常见的通用功能的定制标记库集,这些功能包括迭代和条件判断.数据管 ...
- EL and JSTL(Jsp Standard Tag Libary)(转)
一.什么是 EL 语言. 表达式语言(EL)是 JSP 2.0 引入的一种计算和输出 Java 对象的简单语音. 二.EL 语言的作用. 为了使JSP写起来更加简单.表达式语言的灵感来自于 ECMAS ...
- javaEE(7)_自定义标签&JSTL标签(JSP Standard Tag Library)
一.自定义标签简介 1.自定义标签主要用于移除Jsp页面中的java代码,jsp禁止出现一行java脚本. 2.使用自定义标签移除jsp页面中的java代码,只需要完成以下两个步骤: •编写一个实现T ...
- JSTL 标准标签库 (JavaServer Pages Standard Tag library, JSTL)
JSP标准标签库(JavaServer Pages Standard Tag Library,JSTL)是一个定制标签库的集合,用来解决 像遍历Map或集合.条件测试.XML处理,甚至数据 库访问和数 ...
- JSP 标准标签库(JSTL)(JSP Standard Tag Library)
[1] JSTL简介 > JSTL是JSP的标准标签库 > JSTL为我们提供了一些常用的标签,供我们日常开发使用(if . if...else .遍历 . 日期格式化) ...
- EL(Expression Language)和JSTL标签(JSP Standard Tag Library)
一.EL表达式: Expression Language提供了在 JSP 脚本编制元素范围外(例如:脚本标签)使用运行时表达式的功能.脚本编制元素是指页面中能够用于在JSP 文件中嵌入 Java代码的 ...
- JSP Standard Tag Library JSP标准标签库
了解了基本的标签的底层实现,可以看系统定义的强大的标准标签 1.首先引入两个jar包 2.基本语法 <%@ taglib prefix="c" uri="http: ...
随机推荐
- 记一次串口通信调试,慎用SerialPort.Close
做项目是遇到了串口通信,真是遇到了一个大坑,不知道是微软的坑还是我的坑. 让我慢慢道来完整的经历. 项目中以前是vb 写的,是vb与vb 之间进行串口通信,现在改成C#和之前的vb程序进行串口通信. ...
- HTML 5表单应用小结
本文内容 HTML 5表单的组织方式 HTML 5表单的新增特性 访问表单控件及响应表单控件事件 HTML 5表单的组织方式 ★ 将表单字段及其标签关联起 ...
- 实现了IEnumerable接口的GetEnumerator 即可使用 Foreach遍历,返回一个IEnumerator对象
#region 程序集 mscorlib.dll, v4.0.0.0 // C:\Program Files (x86)\Reference Assemblies\Microsoft\Framewor ...
- SEO技巧汇集
每个人都喜欢好用的技巧,对吗?这里有55个用于搜索引擎优化的小技巧,甚至你的老妈用起来都易如反掌.哦,不是我的老妈,但你明白我的意思.这意味着网页设计师和SEO新手中大部分人都能迅速上手,没有任何困难 ...
- 使用MySQL WorkBench导出数据库
1. 在MySQL WorkBench的Server Administrator中双击要连接的数据库: 2. 点击左边的Data Export,在右边的数据库列表中选择要导出的数据库: 3. Expo ...
- 【Java每日一题】201612015
package Dec2016; import java.util.HashSet; public class Ques1205 { public static void main(String[] ...
- pageEncoding的默认设置
windows-->preference-->myeclipse-->files and editors-->jsp 右侧 Encoding 选择 ISO 10646/Uni ...
- Insight API开源项目介绍
首先,在阅读本文以前假设您已经了解比特币Bitcoin基本原理. Insight API是一个开源基于比特币Bitcoin blockchain的REST风格的API框架.Insigh ...
- Java接口之间的继承
/** * Created by xfyou on 2016/11/3. * 多接口之间的继承 */ public class HorrorShow { static void u(Monster b ...
- 不简单的SQL查询和排序语句
真不简单!! 一:使用select语句进行查询 语法: SELECT <列名> FROM <表名> [WHERE <查询条件表达式>] [OR ...