• ⑥又是星期五,小试牛刀(编写定制标签)


    前言

      今天有点迷茫。是身体累了,还是心累了。有种觉得想大哭而无力的感觉(可能心还没成熟,或是昨天羽毛球打累了)。加油,Jeff Li. 活在当下,坚持打好基础,坚持刷ACM,坚持coding。

      今天下午的小故事,其实我今天想回家。但不知道住哪里?买了动车票,等车的时候,我在候车室看着书。渐渐地,回去,家?爸妈在远地工作。家,仿佛还是实验室是我的家。渐渐地,收拾书本。我退了票,做上了回来的公交,返回终点站的学校。

      路途中,发现了一位老者,还是莫莫的扫着往前看没有尽头,往后看扫过的地也是没有尽头的马路。抬了下头,用自己暗色的工作服擦去额上的汗水。“他是用生命在work,用生命在路上。”想想自己,迷茫,何必迷茫?用生命看书,获取知识,用生命去coding。我的理想[传送门]会靠近。

                                                                                       “I can do it !”

    言归正传

      定制标签概述

        利用JSP标准动作指令访问和操作JavaBeans,是首次尝试将表现代码(html)和业务逻辑(java 代码)实现分离。JSP 2.0添加了两项新特性,第一个特性是一个新的接口,称作Simple Tag. 第二项特性是一种使编写定制标签一样编写标签文件机制。[go]

      简单工作原理和小范例

                      

                          A simple pic of its principle

      简单的标签处理器中的主体用一个JspFragment类实例表示其生命周期。

        1.JSP容器创建简单标签处理器实例

        2.JSP→setJspContext 传递一个JspContext对象,其对象返回一个JspWriter,用于响应到客户端

                public void setJspContext(JspContext jspContext)
    

        3.JSP 调用setParent方法。将JspTag进来。

                public void setParent(JspTag parent)
    

        4.JSP为每个标签定义的属性设置方法(Setter)

        5.若标签有主体内容,则JSP调用SimpleTag接口的setJspBody方法,将主体作为JspFragment传递。

        6.Jsp调用doTag方法(SimpleTag只有这个接口),所有变量该方法同步。

        mum said, “I learned a little . so i use my hand to earn money by the hard work.”

      SimpleTag 小例子

        结构

          

        MyFirstTag类

    package sedion.jeffli.tag;
    
    import java.io.IOException;
    
    import javax.servlet.jsp.JspContext;
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.JspFragment;
    import javax.servlet.jsp.tagext.JspTag;
    import javax.servlet.jsp.tagext.SimpleTag;
    
    public class MyFirstTag implements SimpleTag{
    
        JspContext jspContext;    //传递的对象
        
        @Override
        public void doTag() throws JspException, IOException {
            System.out.println("doTag");
            jspContext.getOut().print("This is my first tag");
        }
    
        @Override
        public JspTag getParent() {
            System.out.println("getParent");
            return null;
        }
    
        @Override
        public void setJspBody(JspFragment arg0) {
            System.out.println("setJspBody");
        }
    
        @Override
        public void setJspContext(JspContext arg0) {
            System.out.println("setJspContext");
            this.jspContext = arg0;
        }
    
        @Override
        public void setParent(JspTag arg0) {
            System.out.println("setParent");
        }
    
    }
    View Code

       

       注册标签-mytags.tld

    <?xml version="1.0" encoding="UTF-8"?>
    <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/j2eeweb-jsptaglibraty_2_1.xsd"
        version="2.1">
        
        <tlib-version>1.0</tlib-version>
        <short-name>mt</short-name>
        <tag>
            <name>firstTag</name>
            <tag-class>sedion.jeffli.tag.MyFirstTag</tag-class>
            <body-content>empty</body-content>
        </tag>
        
    </taglib>

      

      显示的jsp-index.jsp

    <%@taglib uri="/WEB-INF/classes/mytags.tld" prefix="easy"%>
    <html>
        <head>
            <title>this is my first tag</title>
        </head>
        <body>
            hello! tags
            <br/>
            <easy:firstTag></easy:firstTag>
        </body>
    </html>

     

       效果图

        

        自然,控制台打印也是调用流程... 自己看吧,亲们

      小结:

        

        JSP→setJspContext 传递一个JspContext对象,其对象返回一个JspWriter,用于响应到客户端。

    编写EL函数

      EL(JSP Expression Language),忘了就[传送门]

      编写两个步骤(这里我们还是用上面的项目add 进去):

        ①写静态public类

        ②将function元素注册标签库

        

        在sedion.jeffli.tag包下 -- MyFunctions类

    package sedion.jeffli.tag;
    
    public class MyFunctions {
        public static String reverseString(String s){
            return new StringBuffer(s).reverse().toString();
        }
    }

       mytags.tld 内<taglib></taglib>之间添加

      <function>
            <name>reverseString</name>
            <function-classe>sedion.jeffli.tag.MyFunctions</function-classe>
            <function-signature>
                java.lang.String reverseString(java.lang.String)
            </function-signature>
        </function>

      

       页面添加

        ${easy:reverseString("hello EL functions")}

        此时,我在听天籁。一个好的耳机,让我很陶醉,不累. 想起阿公一句话:“书法,坚持练。肯定比我好了。有些字我还要向你学习呢。”

                      

                            小朽作品一张,做比说难。贵在坚持!

        

    发布定制标签(我很看好,以后这样做)

      简单来说,打个jar以便其他人使用。

      123,轻松搞定(上面function为例)

        ①结构

          

        ②在tld文件<taglib></taglib>之间添加uri

    <uri>http://examp.com/taglib/function</uri>

        

        ③改。去页面

    <%@taglib uri="http://examp.com/taglib/function" prefix="easy"%>

        这,懵懵懂懂那些java.lang.String形成。我以后也要开源写出来hlep others

    去总结

       对于,分离表现逻辑和业务逻辑来说,用定制标签必用javabean好很多。还有 打包 jar,我马上要用起来。

       这里想对妈妈说,“sorry,有时候迷茫导致我有点不乖。我会坚持习惯,慢慢完成自己的目标。心慢慢练,不然炸了就不好了。哈哈,爸妈身体健康。工作辛苦了!”

          

  • 相关阅读:
    容器镜像加速器配置(Windows)
    容器镜像加速器配置(CentOS)
    kubernetes部署基于kubeadmin部署单机版本
    k8s之calico部署
    PHP连接SQLSERVER及中文乱码问题
    通过css grid实现圣杯布局
    sequelize操作数据库
    vue 导出excel中的多个sheet
    caffe python 接口api
    linux tmux 详细教程,Linux中Tmux的安装和基本用法
  • 原文地址:https://www.cnblogs.com/Alandre/p/3601389.html
Copyright © 2020-2023  润新知