jsp之有标签体的标签、带参数的标签
来源:互联网 发布:sql语句update语句 编辑:程序博客网 时间:2024/05/22 07:59
比对:
创建servlet:创建一个servlet必须实现Servlet,然后在web.xml中配置,这是servlet的根本。
Servlet类是个接口,里面包含了servlet的生命周期,每次创建一个servlet必须实现该接口以及该接口里面的所有方法。
弊端:Servlet接口里的方法有一些是我们用不到的,如果都实现就显得麻烦。
解决:自己手动创建一个MyGenericServlet抽象类,实现Servlet接口并实现接口里的一些通用的方法,我们创建servlet时只需去继承MyGenericServlet类即可。
实际上,已经有了这样的一个GenericServlet抽象类,该类不仅实现了Servlet接口,同时还实现了ServletConfig接口,这样就扩展了GenericServlet类的功能。
但是在开发过程当中我们创建servlet是去继承HttpServlet抽象类,该类继承GenericServlet抽象类,里面的方法更多更丰富。
创建自定义标签:
创建自定义标签需创建一个标签处理器类实现SimpleTag,然后手动创建一个xml配置文件配置。和创建servlet是类似的。
通常我们是去继承SimpleTagSupport类来创建一个自定义标签处理器类,通过该类创建自定义标签只需要根据需求重写doTag()方法,如果我们想获取JspContext,直接调用getJspContext(),这样一来就比较方便。
MyTag2.java
package com.atguigu.taglib;import java.io.IOException;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.tagext.SimpleTagSupport;/** * 通过继承SimpleTagSupport来创建一个自定义标签 * @author lilichao * */public class MyTag2 extends SimpleTagSupport { @Override public void doTag() throws JspException, IOException { //向页面输出一个内容 JspWriter out = getJspContext().getOut(); //通过out对象向页面中输出一个内容 out.print("<h3>这是我的第二个自定义标签</h3>"); }}
===============================
创建带有标签体的标签:
什么是带有标签体的标签,就是在jsp页面中使用jsp自定义标签的时候,标签体里面是带有内容的。
<a:MyTag3> 我是MyTag3的标签体 </a:MyTag3>
该标签即所谓的带有标签体的标签。
那怎么去实现呢,1、创建标签处理器类;2、手动创建xml配置文件,配置标签处理器类。
1、创建标签处理器类MyTag3.java
package com.atguigu.taglib;import java.io.IOException;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.tagext.JspFragment;import javax.servlet.jsp.tagext.SimpleTagSupport;/** * 有标签体的标签 * @author lilichao * */public class MyTag3 extends SimpleTagSupport { @Override public void doTag() throws JspException, IOException { //获取out对象 JspWriter out = getJspContext().getOut(); //让标签体内容在页面中执行 //获取标签体 JspFragment body = getJspBody(); //在标签体执行之前加点内容 out.print("=====================寂寞的分割线========================<br />"); //执行标签体 body.invoke(out); //在标签体执行完成以后再加点内容 out.print("<br />=====================寂寞的分割线========================<br />"); }}
该类继承SimpleTagSupport类,重写doTag方法,要使得标签处理器类能够处理标签体,必须调用父类的getJspBody方法获得标签体类。
2、手动创建xml配置文件atguigu-taglib.tld,配置标签处理器类,该配置文件可以配置多个tag标签,即可以同时配置多个标签处理器类。
<?xml version="1.0" encoding="UTF-8"?><taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xml="http://www.w3.org/XML/1998/namespace" 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>a</short-name> <uri>http://www.atguigu.com/taglib/a</uri> <tag> <name>MyTag</name> <tag-class>com.atguigu.taglib.MyTag</tag-class> <body-content>empty</body-content> </tag> <tag> <name>MyTag2</name> <tag-class>com.atguigu.taglib.MyTag2</tag-class> <body-content>empty</body-content> </tag> <tag> <name>MyTag3</name> <tag-class>com.atguigu.taglib.MyTag3</tag-class> <body-content>scriptless</body-content> </tag></taglib>
当标签体里有内容的时候
<body-content>scriptless</body-content>
不能再写成empty,为了能够服务器自动解析标签体里的EL表达式的时候必须是scriptless,其它的JSP、tagdependent这两个者一般不太常用。
==============================
创建带参数的标签:
什么是带参数的标签:类似html标签里的属性,带参数的标签就是说该标签带有属性,想要使用自定义标签带有属性,必须在配置文件里配置。
<a:MyTag4 test="${!empty param.name}"> <a:MyTag3> 您填写的name属性为 ${param.name } </a:MyTag3> </a:MyTag4>
模拟Java中if语句的功能
实现:1、创建标签处理器类;2、手动创建xml配置文件,配置标签处理器类。
1、创建标签处理器类MyTag4.java继承SimpleTagSupport类。
package com.atguigu.taglib;import java.io.IOException;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.tagext.SimpleTagSupport;/** * 模拟Java中if语句的功能 * <if test="true"> 内容 </if> * @author lilichao * */public class MyTag4 extends SimpleTagSupport { /** * 在处理器类中顶一个test属性 */ private boolean test; /** * 当标签中有属性时,只需要为指定的属性提供一个set方法,那么服务器会自动调用set方法为属性赋值 * @param test */ public void setTest(boolean test) { this.test = test; } @Override public void doTag() throws JspException, IOException { //如果test为true则执行标签体 if(test){ //执行标签体 //getJspBody().invoke()可以传一个null,当传一个null作为参数时,他会默认在当前页面执行 //getJspBody().invoke(null); JspWriter out = getJspContext().getOut(); getJspBody().invoke(out); } }}
如果使用的标签有属性,那么标签处理类应该有这样的一个属性,这里模拟Java中的if语句,if语句里面含有条件判断,如果为真,执行方法体,如果为假就不执行,所以创建的自定义标签处理器类必须有这样的一个条件标识标量,定义为布尔值。
2、手动创建xml配置文件atguigu-taglib.tld:
<?xml version="1.0" encoding="UTF-8"?><taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xml="http://www.w3.org/XML/1998/namespace" 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>a</short-name> <uri>http://www.atguigu.com/taglib/a</uri> <tag> <name>MyTag</name> <tag-class>com.atguigu.taglib.MyTag</tag-class> <body-content>empty</body-content> </tag> <tag> <name>MyTag2</name> <tag-class>com.atguigu.taglib.MyTag2</tag-class> <body-content>empty</body-content> </tag> <tag> <name>MyTag3</name> <tag-class>com.atguigu.taglib.MyTag3</tag-class> <body-content>scriptless</body-content> </tag> <tag> <name>MyTag4</name> <tag-class>com.atguigu.taglib.MyTag4</tag-class> <body-content>scriptless</body-content> <attribute> <name>test</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag></taglib>
最后一个就是配置带有参数的标签,属性名name为test、是否必须为true、是否自动解析el表达式为true。这样配置完成后,在jsp页面通过taglib指令引入该配置文件,就可以使用配置好的标签。使用带参数的标签:
<a:MyTag4 test="${!empty param.name}"> <a:MyTag3> 您填写的name属性为 ${param.name } </a:MyTag3> </a:MyTag4>
============================
- jsp之有标签体的标签、带参数的标签
- jsp-定义带标签体的标签
- JSP自定义标签(3):带标签体(body)的标签
- JSP自定义标签:带标签体(body)的标签
- JSP的自定义标签(三)之带标签体的标签
- JSP自定义标签(带标签体的标签,迭代器标签)
- jsp创建一个带标签体的迭代器标签
- JSP自定义标签开发(四)——带标签体的标签实现
- 开发带标签体的标签
- 带标签体的自定义标签
- 带标签体的自定义标签
- JSP的标签有哪些如何使用jsp标签
- Java_JSP2_带标签体的标签_迭代器标签;
- 自定义标签(3)带标签体的标签
- JSP带有标签体的自定义标签
- JSP自定义标签(2):带属性的自定义标签
- jsp自定义标签处理器类----带属性标签的做法
- 定义有标签体的标签库
- WebMagic爬虫入门教程(一)简介
- vi/vim下如何修改,并保存只有只读权限的文件
- shell 函数返回值问题
- 给编程生涯充电的 10 本书
- android media库中external的读取
- jsp之有标签体的标签、带参数的标签
- 15.5 Content-Encoding:内容编码
- 前端调用后台接口的几种方式
- boost和c++11创建线程的区别
- Minimum Depth of Binary Tree
- proteus 数码管动态显示问题解决
- 靶面尺寸和镜头焦距配套对应的视场角
- image宽高一致自适应
- 身价突破800亿美元的巴菲特却对比特币不屑一顾,说....