jstl的自定义标签

1)作用:当jsp的内置标签或者jstl不满足我们,这时需要自定义标签
2)三个步骤:  需求: 使用自定义标签输出客户的ip地址
SimpleTag接口的方法:
doTag():执行标签的方法,由web服务器调用
getParent(): 得到父标签。
setJspBody(JspFragment jspBody)传入标签主体内容。由web服务器调用
setJspContext(JspContext pc)传入PageContext。由web服务器调用
setParent(JspTag parent) 传入父标签。由web服务器调用

a) 编写一个java类,实现SimpleTag接口或者继承SimpleTagSupport类。

//标签处理类
public class ShowClientIPTag extends SimpleTagSupport{

@Override
public void doTag() throws JspException, IOException {
//得到PageContext对象
PageContext pc = (PageContext)getJspContext();
ServletRequest request = pc.getRequest();
JspWriter out = pc.getOut();
String ip = request.getRemoteAddr();
     out.write(ip);
}
}

b)配置这个标签
在项目下的WEB-INF目录下新建一个tld文件。(itcast.tld)

<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>itcast</short-name>
<uri>http://gz.itcast.cn/jsp/tags</uri>
<!-- 一个标签的配置 -->
<tag>
<name>showClientIP</name>
<tag-class>gz.itcast.tag.ShowClientIPTag</tag-class>
<!-- 默认empty:表示空标签,么有主体内容 -->
<body-content>empty</body-content>
</tag>
</taglib>

c)使用标签
导入:<%@taglib uri="http://gz.itcast.cn/jsp/tags" prefix="itcast" %>
使用: <itcast:showClientIP/>

必须练习:自定义标签步骤

3)自定义标签的执行过程(原理)

setJspContext()
    setParent()
            setJspBody()
    doTag()

4)使用自定义标签(用途)
4.1 控制标签体内容是否执行
执行: jspFrament.invoke(null)
不执行: 什么都不干!
? 4.2 控制标签后内容是否执行
执行:什么都不干!
不执行: 抛出一个SkipPageException
? 4.3 控制标签体内容复重执行
for (int i = 1; i <= 3 ; i++) {
getJspBody().invoke(null);
}
4.4 带有属性的标签
a) 标签处理类需要有一个setter方法
public void setCount(int count) { // setter属性名称: count
this.count = count;
}
b)在tld文件声明这个属性
<tag>
<name>demo3</name>
<tag-class>gz.itcast.tag.SimpleDemo3</tag-class>
<body-content>scriptless</body-content>
<!-- 属性配置 -->
<attribute>
<!-- 属性名称-->
<name>count</name>
<!--是否必填 -->
<required>true</required>
<!-- 是否支持EL表达式-->
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>

? 4.5 控制标签体内容改变

//1)得到主体内容
JspFragment jspBody = getJspBody();
//2)用于临时容器对象放主体内容
StringWriter sw = new StringWriter();
//3)把主体内容放到临时容器中
jspBody.invoke(sw);
//4)从临时容器得到主体内容
String content = sw.toString();
//5)改变
content = content.toUpperCase();
//6)直接输出到浏览器
getJspContext().getOut().write(content);

时间: 2024-08-06 11:56:17

jstl的自定义标签的相关文章

Javaweb学习笔记6—EL表达式与JSTL及自定义标签

 前几天博客被黑了,导致博客登陆不上,把前几天应该发的东西的东西重新发一遍 今天来讲javaweb的第六阶段学习. EL表达式与JSTL及自定义标签是对上篇文章介绍的JSP的扩展,不能说是很重要的东西,但是也要了解. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps:我的思维是用的xMind画的,如果你对我的思维导图感兴趣并且想看到你们跟详细的备注信息,请点击下载 另外:如果图看不清的话请右击---在新窗口中打开会清楚很多. 一.EL表达式 1,EL简介 Expression Lan

jsp的标签库和自定义标签

1.jstl标签库 JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能. JSTL支持通用的.结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签. 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签. 根据JSTL标签所提供的功能,可以将其分为5个类别. 核心标签 格式化标签 SQL 标签(过时) XML 标签(过时) JSTL 函数 1.1使用taglib指令导入标签库 ,除了JSP动作标签外,使用其他第三方的标签库都需要:  <%

JSTL自定义标签(三)

上篇讲解的是JSTL常用的核心标签,本篇介绍JSTL自定义标签的使用.还记得在学js的时候,我们学习了JQuery框架,同时学习了构造自己的js库,再去调用自己的js库,这就如同根据自己的需要些一个内聚性强的函数一样,我们创建一个函数后,再去调用这个函数.在学习J2ee规范JSTL标签这一节的时候,同样我们可以根据自己的需要构造自己的标签库,再去使用自己定义的这个标签. JSTL自带的标签功能时非常强大的,但是不能完全满足我们的需要,开发标签首先是需要开发标签对应的功能类,就和写函数一样,这个函

自己封装JSTL 自定义标签

第一步,做一个类,派生自SimpleTagSupport,"alt+/"选重写doTag()方法. public class TestTag extends SimpleTagSupport { private String outerTagName="p"; public void setOuterTagName(String outerTagName) { this.outerTagName = outerTagName; } private int count

JavaWeb之自定义标签&amp;JSTL&amp;国际化(九)

自定义标签 简介 自定义标签由于没练习,所以掌握的不是很深,但是对于我而言足够可以应付用户登录注册案例和购物车案例,有时间还是多了解的好 1. 自定义标签简介 1.作用:替换JSP页面中的java脚本(<%%>).(官方推荐:JSP2.0开始) 2. 开发步骤 1. 自定义一个类继承SimpleTagSupport实现doTag方法 2. WEB-INF,建立tld文件,定义标签地址/定义标签内容 3. jsp页面使用taglib指令引入uri地址,prefix定义标签名,直接在页面调用这个标

学会怎样使用Jsp 内置标签、jstl标签库及自定义标签

学习jsp不得不学习jsp标签,一般来说,对于一个jsp开发者,可以理解为jsp页面中出现的java代码越少,对jsp的掌握就越好,而替换掉java代码的重要方式就是使用jsp标签. jsp标签的分类: 1)内置标签(动作标签): 不需要在jsp页面导入标签 2)jstl标签: 需要在jsp页面中导入标签 3)自定义标签 : 开发者自行定义,需要在jsp页面导入标签 1.内置标签(动作标签): <jsp:forward />转发标签: 语法:<jsp:forward page="

JSTL自定义标签

这节我们总结一下JSTL自定义标签相关内容. 1. 自定义标签简介 自定义标签主要用于移除JSP页面中的java代码.Jsp页面主要是用来显示给前台的,如果里面有过多的java代码的话,会显得很乱,但是没有java代码也无法获取相关数据或完成相关操作.那么这时候我们就可以自己定义一个标签,来完成需要用java代码完成的事情,这样Jsp页面就会清洁很多,可读性也更强.JSP中使用自定义标签移除只需要完成以下两个步骤: 1)编写一个实现Tag接口的java类(标签处理类): 2)编写标签库描述符(t

12 自定义标签/JSTL标签库/web国际化/java web之设计模式和案例

EL应用 自定义一个标签,实现两个字符串的相加 1回顾 1.1servlet生命周期 init(ServletConfig) service(ServletRequest,ServletResponse) destory() 1.2回话技术 cookie:浏览器端 (服务器需要浏览器保存少量的数据) 服务器创建对象:new Cookie(name,value) cookie.setMaxage(秒);  有效时间 cookie.setMaxage(0)  删除cookie cookie.setP

web day13 JSTL标签库(c标签,自定义标签),MVC设计模式,JavaWeb经典三层框架

JSTL 1. jstl的概述 *apache的东西,依赖EL * 使用jstl需要导入jstl1.2.jar * 四大库: > core:核心库,重点 > fmt:格式化:日期.数字 > sql:过时 > xml:过时 2. 导入标签库 *jar包 * 在jsp页面中:<%@taglib prefix="前缀" uri="路径"%> ---------------------- core --> c标签! 1. out和s