目录
什么是JSPL标签库
为什么要使用标签
标签的基本类型&结构
jstl自定义标签的运行周期
自定义标签类
if实现类
out实现类
编写标签库描述文件(tld)
页面输出测试
什么是JSPL标签库
JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
为什么要使用标签
JSP是用来显示数据的,前面我们在JSP中的HTML中嵌入java代码,与<%%>等混在一起,可读性和可维护性都很差,而且使用java脚本不便于代码重用,要实现比较复杂的显示功能,
也不方便,而JSP标签和HTML代码很类似,使用JSP标签显得JSP整洁而干净,可读性好,标签能够重复使用,所以就像我们上面说的,我们慢慢意识到不足,就自然在一步步改进,从使用JSP行为,
使用EL,在使用标签,都是为了一个目的,让JSP更加完全,方便,只显示数据,而不嵌入逻辑代码。这个涉及到了分层思想,后面说讲解到。
标签的基本类型&结构
标签类型
UI标签, 输出页面元素
控制标签, 如if标签,foreach标签等
数据标签,用于向页面输入数据
基本结构
<开始标签>标签体结束标签>
空标签(没有标签体的标签)
<开始标签 属性名="属性值"/>结束标签>
<开始标签 属性名="属性值"/>
标签类型
UI标签, 输出页面元素
控制标签, 如if标签,foreach标签等
数据标签,用于向页面输入数据
基本结构
<开始标签>标签体结束标签>
空标签(没有标签体的标签)
<开始标签 属性名="属性值"/>结束标签>
<开始标签 属性名="属性值"/>
使用jstl标签需要导入的jar包
jstl -1.2 和standard-1.1.2
jstl自定义标签的运行周期
自定义标签类
写了if和out两个简单的自定义标签
if实现类
package com.zking.mymvc.tag;
import javax.servlet.jsp.tagext.BodyTagSupport;
public class IfTag extends BodyTagSupport{
private boolean test;
public boolean isTest() {
return test;
}
public void setTest(boolean test) {
this.test = test;
}
@Override
public int doStartTag() {
if(this.isTest()) {
return EVAL_BODY_INCLUDE;
}
return SKIP_BODY;
}
}
out实现类
package com.zking.mymvc.tag;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
import com.mysql.jdbc.StringUtils;
public class OutTag extends BodyTagSupport{
private String val;//传入的值
private String defaultVal;//默认值
public String getVal() {
return val;
}
public void setVal(String val) {
this.val = val;
}
public String getDefaultVal() {
return defaultVal;
}
public void setDefaultVal(String defaultVal) {
this.defaultVal = defaultVal;
}
@Override
public int doStartTag(){
JspWriter out = this.pageContext.getOut();
try {
if(StringUtils.isNullOrEmpty(val)) {
out.print(this.defaultVal);
}else {
out.print(this.val);
}
}catch (Exception e){
e.printStackTrace();
}
return SKIP_BODY;
}
}
编写标签库描述文件(tld)
写了if和out两个简单的自定义标签
package com.zking.mymvc.tag;
import javax.servlet.jsp.tagext.BodyTagSupport;
public class IfTag extends BodyTagSupport{
private boolean test;
public boolean isTest() {
return test;
}
public void setTest(boolean test) {
this.test = test;
}
@Override
public int doStartTag() {
if(this.isTest()) {
return EVAL_BODY_INCLUDE;
}
return SKIP_BODY;
}
}
out实现类
package com.zking.mymvc.tag;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
import com.mysql.jdbc.StringUtils;
public class OutTag extends BodyTagSupport{
private String val;//传入的值
private String defaultVal;//默认值
public String getVal() {
return val;
}
public void setVal(String val) {
this.val = val;
}
public String getDefaultVal() {
return defaultVal;
}
public void setDefaultVal(String defaultVal) {
this.defaultVal = defaultVal;
}
@Override
public int doStartTag(){
JspWriter out = this.pageContext.getOut();
try {
if(StringUtils.isNullOrEmpty(val)) {
out.print(this.defaultVal);
}else {
out.print(this.val);
}
}catch (Exception e){
e.printStackTrace();
}
return SKIP_BODY;
}
}
编写标签库描述文件(tld)
将你定义的标签具备相应的格式规范编辑在 tld 文件中
1.0 1.2 Simple Tags /zking out com.zking.mymvc.tag.OutTag empty val true true out标签的val属性,用于输出val的值 defaultVal false false out标签的defaultVal属性,如果val属性为空,则输出defaultVal默认值 if com.zking.mymvc.tag.IfTag jsp test true true if标签的test,用来判断是否满足条件执行任务
页面输出测试
简单测试一些满足条件与不满足条件 及输出内容与默认内容
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="z" uri="/zking" %>
Insert title here
lihao
lihao
结果
本期内容到此结束了



