电子商务网站建设结构分析,psd to wordpress,nofollow外链对于网站有提升吗,像淘宝购物网站建设需要哪些专业人员转载自 深入体验JavaWeb开发内幕——简述JSP中的自定义标签叫你快速学会自定义标签#xff0c;顾名思义#xff0c;就是自己定义的标签。那么我们为什么要自己定义一些标签呢#xff1f;
我们知道#xff0c;如果要在JSP中获取数据我们可以采用通过JSP的隐式对象request来…转载自 深入体验JavaWeb开发内幕——简述JSP中的自定义标签叫你快速学会自定义标签顾名思义就是自己定义的标签。那么我们为什么要自己定义一些标签呢
我们知道如果要在JSP中获取数据我们可以采用通过JSP的隐式对象request来获取相应的请求参数或者属性也可以通过脚本% Java 代码%来进行相应的处理当然还可以使用EL表达式进行相关数据的操作。这里我们主要来谈一下在JSP中使用自定义标签。那么我们为什么要自定义一些标签呢我们知道JSP中标签的使用使得Web应用的显示层与业务逻辑层分开。在JSP使用标签可以移除JSP中的java代码使得JSP页面更加的整洁和便于维护。然而在JSP中定义的一些标签又是有限的或者是我们所不需要的这时我们就可以同过自定义标签的形式将相应的操作封装在标签中只需在JSP中调用相应的标签即可。这样就简化了我们的JSP页面也便于页面操作人员维护了。下面我们就来了解一下自定义标签、如何定义自己的标签以及在JSP中如何引用自己定义的标签。一、自定义JSP标签概述自定义JSP标签就是程序员定义的一种JSP标签这种标签把那些信息显示逻辑封装在一个单独的Java类中通过一个XML文件来描述它的使用。当页面中需要使用类似的显示逻辑时就可以在页面中插入这个标签从而完成相应的功能。使用自定义标签可以分离程序逻辑和表示逻辑将Java代码从HTML中剥离便于美工维护页面自定义标签也提供了可重用的功能组件能够提高工程的开发效率。
自定义标签主要用于移除Jsp页面中的java代码。二、自定义JSP标签的执行过程当一个含有自定义标签的JSP页面被JSP引擎(Web容器)转译成Servlet时JSP引擎遇到自定义的标签会把这个自定义标签转化成对一个称为“标签处理类”的调用。之后当这个JSP页面被执行时JSP引擎就会调用这个“标签处理类”对象并执行其内部定义的相应操作方法从而完成相应的功能。三、自定义JSP标签的开发流程使用Java处理类来开发自定义JSP标签时主要分为下几个步骤
创建标签的处理类(Tag Handle Class)。这个类实现Tag接口用来定义标签的行为并在JSP引擎遇到自定义标签时调用执行。创建标签库描述tld文件(Tag Library Descriptor File)在tld文件中对标签处理器类进行描述。在JSP文件中用taglib指令引入标签库然后使用标签库描述文件中指定的标签名来使用它。四、创建标签的处理类、创建标签库描述文件、用taglib指令引入标签库
1. 创建标签的处理类要想定义自己的标签必须要定义一个实现了Tag接口或是继承实现了改接口的子类的类这里我们主要通过继承实现了Tag接口的TagSupport类来介绍然后把相应的操作封在相应的方法中即可。
例
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
public class CustomTagIP extends TagSupport {}2. 创建标签库描述文件定义标签库文件其实就是定义一个用于描述标签处理类和JSP文件之间关系的一个扩展名为”.tld”的文件。标签库描述符文件是一个以“.tld”结尾的标准XML文档用来记录一个标签库内拥有哪些标签、每个标签包含哪些属性等。
注这个 ”.tld”文件一定要放在WEB-INF文件夹下否则在JSP解析引擎将JSP文件解析成Servlet时会因所要解析的自定义标签找不到对应的标签处理类而导致该处理类无法被加载而产生错误。例
?xml version1.0 encodingUTF-8?
//XML声明
taglib xmlnshttp://java.sun.com/xml/ns/j2ee
xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd
version2.0
//指明改文件中所使用的标签的名称空间以及其//约束文件所在的具体位置taglib为改文件的根标签
descriptionA tag library exercising SimpleTag handlers./description
//这是description标签库的一个文本描述
tlib-version1.0/tlib-version
//tlib-version指定标签库的版本为1.0
short-namelijizh/short-name
//short-name为标签定义简短的名字在taglib
//指令中可作为首选的前缀名使用。
urihttp://www.hbsi.com/uri
//uri定义一个URI用于唯一的标识此标签库。可根据需要自定义
tag
//tag用于指定自定义标签的相关信息。descriptionOutputsHello, World/descriptionnameH/name//name紧跟在前缀明后的标签名lijizh:Htag-classwww.hbsi.web.tag.CustomTagIP/tag-class
//tag-class指明创建标签处理类的具体位置body-contentempty/body-content
//body-content指明自定义标签体的内容的类型具体可/
//为EMPTY JSP scriptless tagdepentend/tag//结束标签
/taglib
还有一些其他的标签的介绍
display-name为标签库指定一个简短的别名。
small-icon为标签库指定大小为16×16的小图标(gif或jpeg格式)该图标可在图形界面工具中显示。
large-icon为标签库指定大小为32×32的大图标(gif或jpeg格式)该图标可在图形界面工具中显示。
validator为标签库提供一个验证器。
listener为标签库提供一个监听器。
tag-file用于描述标签文件。
function用于指定在表达式语言中使用的函数
3. 用taglib指令引入标签库虽然在上面已经定义好了标签处理类和相应的库描述文件但是要想在JSP中使用自定义标签还需要使用JSP中的指令原素进行引用才可使用。
例
% page languagejavaimportjava.util.* pageEncodingUTF-8%
% taglib urihttp://www.hbsi.comprefixlijizh %
html bodylijizh:HSKIP_PAGEThis is my JSPpage. br/lijizh:Haaaaaaaabr//body
/html
再综合来看一个具体的实例使用标签输出客户机IP。
1、标签处理类
package www.hbsi.web.tag;import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;publicclass CustomTagIP extends TagSupport {Overridepublicint doStartTag() throwsJspException {HttpServletRequest request (HttpServletRequest) this.pageContext.getRequest();//同过this.pageContext获取一个PageContext类型的对象//通过该对象可以调用其他八大隐式对象JspWriter out this.pageContext.getOut();try {out.println(request.getRemoteAddr());} catch(IOException e) {throw new RuntimeException(e);}return this.EVAL_BODY_INCLUDE;// doStartTag()根据这个返回值来进一步确定是否显示//标签体中的内容。其中returnthis.SKIP_BODY;忽略标签体中的内容不执行returnthis.EVAL_BODY_INCLUDE;显示标签体中的内容。}}2.定义标签描述库
?xml version1.0 encodingUTF-8?taglib xmlnshttp://java.sun.com/xml/ns/j2eexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsdversion2.0descriptionA taglibrary exercising SimpleTag handlers./descriptiontlib-version1.0/tlib-versionshort-namelijizh/short-nameurihttp://www.hbsi.com/uritagdescriptionindex.jsp/descriptionnameH/nametag-classwww.hbsi.web.tag.CustomTagIP/tag-classbody-contentempty/body-content/tag/taglib3.JSP文件中引用自定义标签
% pagelanguagejava importjava.util.*pageEncodingUTF-8%% taglib urihttp://www.hbsi.comprefixlijizh %htmlbody您当前的IP地址是brlijizh:H//body/html效果如图这样你就可以在JSP中使用自定义标签来封装自己的Java代码了。自己试一试吧