• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    JSP自定义标签入门学习

    本文为大家分享了JSP自定义标签入门学习教程,希望大家喜欢。

    1.JSP自定义标签:

    自定义标签是用户定义的JSP语言元素。当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作,即当servlet执行时Web container调用那些操作。JSP标签扩展可以让你创建新的标签并且可以直接插入到一个JSP页面。 JSP 2.0规范中引入Simple Tag Handlers来编写这些自定义标记。你可以继承SimpleTagSupport类并重写的doTag()方法来开发一个最简单的自定义标签。

    2.开发自定义标签

    下面的步骤建立一个自定义标签用于战术客户端的ip地址:

    编写一个普通的java类,继承SimpleTagSupport类,

    public class ShowIp extends SimpleTagSupport {
    /**
     * 以下屏蔽的代码在SimpleTagSupport代码中已经做了!这里不需要重复再做!
     */
    /*private JspContext context;
    *//**
     * 传入pageContext
     *//*
    @Override
    public void setJspContext(JspContext pc) {
     this.context = pc;
    }*/
    @Override
    public void doTag() throws JspException, IOException {
     PageContext pageContext=(PageContext)this.getJspContext();
     ServletRequest request = pageContext.getRequest();
     String ip=request.getRemoteHost();
     JspWriter out = pageContext.getOut();
     out.write("使用自定义标签展示客户ip地址"+ip);
     ListString> a=null;
    }
    }
    

    在web项目的WEB-INF目录下建立mytaglib.tld文件,这个tld叫标签库的声明文件。(参考核心标签库的tld文件)

    ?xml version="1.0" encoding="UTF-8" ?>
    taglib xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
    version="2.1">
    description>A tag library exercising SimpleTag handlers./description>
    !-- 标签库的版本 -->
    tlib-version>1.0/tlib-version>
    !-- 标签库前缀 -->
    short-name>rlovep/short-name>
     !-- tld文件的唯一标记 -->
     uri>http://rlovep.com/uri>
     !-- 定义标签,标签要放在方法前面 -->
     tag>
     !-- 标签名 -->
     name>showIp/name>
     !-- 标签处理类 -->
     tag-class>com.rlovep.tags.ShowIp/tag-class>
     body-content>empty/body-content>
     /tag>
     tag>
    /taglib>
    

    在jsp页面的头部导入自定义标签库:url为你在tld中写的url,前缀也是你在tld文件中定义的

    %@ taglib uri="http://rlovep.com" prefix="rlovep" %>

    在jsp中使用自定义标签

    %-- 测试简单的自定义标签,标签体(我是你)不显示 --%>
    rlovep:showIp>我是你
    /rlovep:showIp>
    

    3.自定义标签的执行过程

    当访问:http://localhost:8080/stuJsp/Hellotags.jsp 时;要重启Tomcat使服务器启动时,加载每个web应用的WEB-INF目录下的所有文件!!!例如。web.xml, tld文件!!!
    步骤如下:

    4.访问标签体

    你可以像标准标签库一样在标签中包含消息内容。如我们要在我们自定义的中包含内容

    格式如下:

    rlovep:showIp>我是你
    /rlovep:showIp>
    

    但要文字显示需要修改处理类和tld文件:
    修改处理类在doTag方法中增加如下内容:

    JspContext jspContext2 = this.getJspContext();
    //显示标签体的两种方法
    //方法1直接调用
    //jspBody.invoke(null);
    //方法2通过输出到out
    //jspBody.invoke(jspContext2.getOut());
    

    修改tld文件:

     tag>
     !-- 标签名 -->
     name>showIp/name>
     !-- 标签处理类 -->
     tag-class>com.rlovep.tags.ShowIp/tag-class>
     !-- 输出标签体的内容格式标签体不可以写jsp的java代码 -->
     body-content>scriptless/body-content>
     /tag>
    

    现在你可以将标签体的内容显示了;

    %-- 标签提会显示 --%>
    rlovep:showIp>我是你
    /rlovep:showIp>
    

    输出标签体的内容格式:
    JSP: 在传统标签中使用的。可以写和执行jsp的java代码。
    scriptless: 标签体不可以写jsp的java代码
    empty: 必须是空标签。
    tagdependent : 标签体内容可以写jsp的java代码,但不会执

    5.给标签体带属性:

    你可以在自定义标准中设置各种属性,要接收属性,值自定义标签类必须实现setter方法;

    格式如下:

    !-- 测试带属性的标签,标签体显示通过类处理 -->
    rlovep:AttributeTags name="peace" value="12345

    定义属性步骤如下:
    编写处理类:AttributeTags extends SimpleTagSupport

    添加俩个属性:
    //声明属性的成员变量
    private Integer value;
    private String name;
    并为两个成员属性写setter方法;
    public void setValue(Integer value)
    public void setName(String name) 
    

    在标签库文件tld注明此标签和属性:

    !-- 标签名 -->
     name>AttributeTags/name>
     !-- 标签处理类 -->
     tag-class>com.rlovep.tags.AttributeTags/tag-class>
     !-- 输出标签体的内容格式标签体不可以写jsp的java代码 -->
     body-content>scriptless/body-content>
     !-- 配置属性name -->
     attribute>
     name>name/name>
     !-- 是否必填 -->
     required>true/required>
     !-- 是否支持EL表达式 -->
     rtexprvalue>true/rtexprvalue>
     /attribute>
     !-- 配置属性value -->
     attribute>
     name>value/name>
     !-- 是否必填 -->
     required>true/required>
     !-- 是否支持EL表达式 -->
     rtexprvalue>true/rtexprvalue>
     /attribute>
     /tag>
    

    现在就可以用带属性的标签了
    在tld配置属性时你可以配置下面的属性:

    6.带有子标签的自定义标签:

    就像核心标签库的choose标签一样我们也可以定义嵌套的自定义标签,这部分我们主要讲解自己创建一个类似核心标签库的choose标签。步骤如下:

    建立处理类,处理类还是与前面一样的方法。需要介绍的是用到了一个getParent()方法,从名字上就可以知道是为了获得父标签,对就是获得父标签类;
    建立三个处理类文件: ChooseTag,OtherWiseTag,whenTag

    //ChooseTag类:
    public class ChooseTag extends SimpleTagSupport{
    //此去时变量不是标签属性,由when标签更改;othewise获得;
    private boolean flag; 
    public boolean isFlag() {
     return flag;
    }
    public void setFlag(boolean flag) {
     this.flag = flag;
    }
    @Override
    public void doTag() throws JspException, IOException {
     // Choose标签作用显示标签体,以及作为其他两个标签的父标签;
     getJspBody().invoke(null);
    }
    }
    //whenTag类
    public class whenTag extends SimpleTagSupport{
    //增加test属性
    private boolean test;
    public boolean isTest() {
     return test;
    }
    public void setTest(boolean test) {
     this.test = test;
    }
    @Override
    public void doTag() throws JspException, IOException {
     //如果标签属性为true,显示标签体
     if(test){
      getJspBody().invoke(null);
     }
     //设置父标签给otherwise用
     ChooseTag parent=null;
     if(getParent() instanceof ChooseTag){
      parent=(ChooseTag)getParent();
      parent.setFlag(test);
     }
    }
    }
    //OtherWiseTag类:
    public class OtherWiseTag extends SimpleTagSupport {
    @Override
    public void doTag() throws JspException, IOException {
     boolean test=true;
     //获取父标签的test,由他的上一个when设置
     if(getParent() instanceof ChooseTag)
     {
      //获取父标签的test,由他的上一个when设置
      ChooseTag parent=(ChooseTag)getParent();
      test=parent.isFlag();
     }
     if(!test){
      getJspBody().invoke(null);
     }
    }
    }
    

    编写tld文件:与其他的标签定义一模一样

    !-- 定义标签,choose-->
     tag>
     !-- 标签名 -->
     name>choose/name>
     !-- 标签处理类 -->
     tag-class>com.rlovep.tags.ChooseTag/tag-class>
     !-- 输出标签体的内容格式标签体不可以写jsp的java代码 -->
     body-content>scriptless/body-content>
     /tag>
     !-- 定义标签,when-->
    tag>
     !-- 标签名 when -->
     name>When/name>
     !-- 标签处理类 -->
     tag-class>com.rlovep.tags.whenTag/tag-class>
     !-- 输出标签体的内容格式标签体不可以写jsp的java代码 -->
     body-content>scriptless/body-content>
     !-- 配置属性name -->
     attribute>
     name>test/name>
     !-- 是否必填 -->
     required>true/required>
     !-- 是否支持EL表达式 -->
     rtexprvalue>true/rtexprvalue>
     /attribute>
     /tag>
     !-- 定义标签,Otherwise-->
     tag>
     !-- 标签名 -->
     name>otherwise/name>
     !-- 标签处理类 -->
     tag-class>com.rlovep.tags.OtherWiseTag/tag-class>
     !-- 输出标签体的内容格式标签体不可以写jsp的java代码 -->
     body-content>scriptless/body-content>
     /tag>
    

    使用带子标签的标签:与使用其他标签稍微有些不同,需要嵌套

    !-- 测试choose -->
    rlovep:choose>
    rlovep:When test="${105 }">
     条件成立执行when
    /rlovep:When>
    rlovep:otherwise>
     条件不成立执行otherwise
    /rlovep:otherwise>
    /rlovep:choose>
    

    自定义标签就介绍到这里;

    404页面,505页面,错误页面配置方法:

    可以在web.xml中给你的网站配置全局的404页面,505页面,错误页面;配置方法如下:记得建立相应的跳转文件。

    ?xml version="1.0" encoding="UTF-8"?>
    web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
    !-- 配置空指针异常 -->
     error-page>
      exception-type>java.lang.NullPointerException/exception-type>
      location>/error.jsp/location>
     /error-page>
     !-- 配置505错误页面 -->
     error-page>
     error-code>500/error-code>
     location>/common/500.jsp/location>
     /error-page>
     !-- 配置404错误页面 -->
     error-page>
     error-code>404/error-code>
     location>/common/404.html/location>
     /error-page>
    /web-app>
    

    JSP入门就介绍到这里,希望对大家的学习有所帮助。

    您可能感兴趣的文章:
    • JSP经典学习笔记(包含各种入门常用语法)
    • 通用JSP页面 jsp入门级文章
    • jsp Hibernate入门教程
    • JSP迅速入门
    • 几则JSP入门知识总结
    • JSP开发入门(一)--安装好你的机器来使用JSP
    • JSP开发入门(五)--JSP其他相关资源
    • JSP开发入门(四)--JSP的内部对象
    • JSP开发入门(三)--JSP与JavaBean
    • JSP开发入门(二)----JSP语法的基本原理
    • JSP开发入门
    • JSP入门之HelloWorld程序实例
    上一篇:JSP隐含对象response实现文件下载
    下一篇:jsp中变量及方法的声明与使用
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    JSP自定义标签入门学习 JSP,自定义,标签,入门,学习,