当前位置 : 主页 > 编程语言 > java >

JSP编程专题2之JSP核心三(自定义EL函数和标签)

来源:互联网 收集:自由互联 发布时间:2021-06-25
1、自定义EL函数: a、自定义类,类中的方法使用static修饰符修饰: 650) this.width=650;" src="/uploads/allimg/210625/1H223DB-0.png" title="截图00.png" alt="981fae6f79844dd128ca0847106b2d67.png" d="14513414" s="44f_f

1、自定义EL函数:

a、自定义类,类中的方法使用static修饰符修饰:

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" title="截图00.png" alt="981fae6f79844dd128ca0847106b2d67.png" d="14513414" s="44f_f1b" t="png">


b、该类以及函数,需要在一个扩展名为.tld(tld,tag library definition,标签库定义)的XML文件中进行注册。

-  需要注意的是,XML文件是需要约束的,即需要配置文件头部。这个头部约束可以从以下文件中进行复制:在Tomcat安装目录下:tomcat-7.0\webapps\example\WEB-INF\jsp2中。

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" title="截图01.png" alt="7b6f5df94de8c801c03db6b18049d0ea.png" d="14513415" s="4fc_1c3" t="png">


-  在项目的WEB-INF目录下新建一个XML文件(名字可以自定义),添加和修改的内容如下:

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" title="截图03.png" alt="c63e450ddcff807d5c052603167b3136.png" d="14513416" s="08a_8a3" t="png">


c、在使用到这个EL函数的JSP文件中,需要添加taglib标签,如下所示:(添加的taglib标签和使用方式)

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" title="截图05.png" alt="f1e855c7fe56fafc1d39a6835434e784.png" d="14513417" s="2ac_2d1" t="png">

-  在浏览器显示的页面中呈现的是大写的“ABC”。

-  需要注意的是,EL函数只能够处理四大域中的属性值以及String常量:

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" title="截图07.png" alt="a09d9e3b27b9764d26fcba7a5417d73e.png" d="14513418" s="aab_dc5" t="png">


2、JSTL中的EL函数:

a、JSTL:Apache已经定义好了一套标准的标签库规范,称之为JSTL,JSP Standard Tag Library,即JSP标准标签库,该规范已经通过JCP审核认定。

-  在JSTL中,已经定义好了一套对于字符串进行处理的函数标签库,这个函数标签库中定义了16个对于字符串进行处理的函数。我们可以在JSP页面中直接使用。

-  当然,需要使用JSTL,首先需要将其jar包导入。(jar包下载地址为:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/)

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" title="截图06.png" alt="6f9454d67685b990fc79cbdfaa0e504d.png" d="14513419" s="6b4_7a4" t="png">


b、JSTL的EL函数标签库:

-  JSTL函数标签库的.tld文件存放于standard的jar包的META-INF目录中,文件名为fn.tld。

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" title="截图08.png" alt="eab46254785d5a3781b30f95bb521051.png" d="14513420" s="4d5_cf7" t="png">


c、JSTL的函数标签库中定义的16个EL函数如下表所示:

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" style="float:none;" title="截图09.png" alt="e394c39e8a66454926111768abb2c3c6.png" d="14513421" s="292_c3b" t="png">

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" style="float:none;" title="截图10.png" alt="8af8d527d25762b8475c488bae4c8687.png" d="14513422" s="45e_6de" t="png">


3、自定义EL标签:

a、自定义类,该类继承SimpleTagSupport类,重写doTag方法:

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" title="截图11.png" alt="17a7979bdca28a39ef4bfe4618a6d550.png" d="14513423" s="aaa_148" t="png">

-  javax.servlet.jsp.tagext.SimpleTagSupport类:实现自SimpleTag接口的用于定义标签处理器的基类。

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" title="截图12.png" alt="258933b63e02cb929a611c30362f6924.png" d="14513424" s="b90_09d" t="png">

-  该类的doTag()方法默认不对标签不做任何处理:

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" title="截图13.png" alt="267d8cb9734bb988aeeb5a96e94ba9e6.png" d="14513425" s="855_464" t="png">

 

-  javax.servlet.jsp.tagext.JspFragment的invoke(Writer out)方法:执行这个Jsp片段并将数据写入给定的字符输出流中:(如果传入的参数是null,则与这个片段相关的JspContext对象的getOut方法将会配调用,并返回JspWriter类对象作为参数传入给invoke(Writer out)方法)

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" title="截图14.png" alt="de2d30cba18339f4228cf4218439788e.png" d="14513426" s="1fc_053" t="png">


b、在项目的WEB-INF目录下新建一个XML文件(名字可以自定义),添加和修改的内容如下:

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" title="截图15.png" alt="475c69fc830693f26715bc31cc37e0ff.png" d="14513427" s="836_de4" t="png">


c、在使用到这个EL标签的JSP文件中,需要添加taglib标签,如下所示:(添加的taglib标签和使用方式)

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" title="截图16.png" alt="a92573dd9ef3af555f0ad05b0c621506.png" d="14513428" s="f89_30f" t="png">


4、自定义带属性的标签:

a、自定义类,该类继承SimpleTagSupport类,重写doTag方法:(在自定义类中编写私有化的成员变量(并提供set方法),等同于在标签处理器中设置属性)

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" title="截图00.png" alt="61797fb5cabdb62eb6c27e139653552b.png" d="14513429" s="772_249" t="png">


b、在项目的WEB-INF目录下新建一个XML文件(名字可以自定义),添加和修改的内容如下:

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" title="截图01.png" alt="bfacb9c212670ccde4b8866ae7c11000.png" d="14513430" s="0e4_1dc" t="png">


c、在使用到这个EL标签的JSP文件中,需要添加taglib标签,如下所示:(添加的taglib标签和使用方式)

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" title="截图04.png" alt="62dc6ed6f94c08b60e1768e35bb079c5.png" d="14513431" s="7dd_bd6" t="png">


5、自定义遍历List的forEachList标签:

a、自定义类,该类继承SimpleTagSupport类,重写doTag方法:

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" title="截图05.png" alt="8e5841486a2bc34c2f8f2d487b20eb6d.png" d="14513432" s="41a_8a2" t="png">


b、在项目的WEB-INF目录下新建一个XML文件(名字可以自定义),添加和修改的内容如下:

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" title="截图06.png" alt="aeeafee4b6a13b232cdd0b633135629d.png" d="14513433" s="d2b_fbb" t="png">

c、在使用到这个EL标签的JSP文件中,需要添加taglib标签,如下所示:(添加的taglib标签和使用方式)

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" title="截图07.png" alt="aa1d897788a08618ea57def9f8647e35.png" d="14513434" s="08a_ec4" t="png">


6、自定义遍历自定义遍历集合与数组(包括基本类型数组)的forEach标签:

a、自定义类,该类继承SimpleTagSupport类,重写doTag方法:

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" title="截图19.png" alt="cc0c1f52f41c7d48c26c1d3dfdefa31e.png" d="14513435" s="cef_202" t="png">

-  java.lang.reflect.Array类:这个类提供静态方法,用以动态创建和访问java数组对象。

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" title="截图20.png" alt="46cd10359aa0b2a0484fe7d18b9ed74f.png" d="14513436" s="427_eef" t="png">


-  java.util.Map接口中的entrySet方法:用于返回包含当前Map键值对的Set视图:(即以“键=值”的形式存储,即Map.Entry<K,V>)

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" title="截图10.png" alt="ca3259349a6c739fb040467f492e0f31.png" d="14513437" s="57a_86b" t="png">


b、在项目的WEB-INF目录下新建一个XML文件(名字可以自定义),添加和修改的内容如下:

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" title="截图21.png" alt="1d59c0ee5ab9fa830bbbd6ea5a57868b.png" d="14513438" s="a3a_dbc" t="png">


c、在使用到这个EL标签的JSP文件中,需要添加taglib标签,如下所示:(添加的taglib标签和使用方式)

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" style="float:none;" title="截图22.png" alt="2e3404d54d434f9b87a049c1ffd4f5bc.png" d="14513439" s="7d6_c38" t="png">

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" style="float:none;" title="截图23.png" alt="c59c631cb7da7e0e2f405d6ae5f6ea08.png" d="14513440" s="5a7_162" t="png">



-  显示在index.jsp中的数据为:

650) this.width=650;" src="http://img.558idc.com/uploadfile/allimg/210625/1H223DB-0.png" title="截图24.png" alt="ba16ae061c57af59b5b73e8a22824327.png" d="14513441" s="c9c_4f8" t="png">

-  附加说明:EL总结

-  EL不能够出现在Java代码块、表达式块等JSP的动态代码部分。

-  EL只能从pageContext、request、session和application四大域属性空间中获取数据。

-  EL不能抛出空指针异常。若访问一个null对象的属性,则什么也不显示。

-  EL不会抛出数组访问越界异常。若访问一个数组中的不存在的元素,则什么也不显示。

-  EL不具有对字符串进行处理的能力,就连简单的字符串拼接都不行。

网友评论