本文分享了一个关于开始使用JSP定制标签的教程。希望你喜欢。
1.JSP自定义标签:
自定义标记是用户定义的JSP语言元素。当一个JSP页面包含一个自定义标签时,它将被转换成一个servlet,而这个标签将被转换成一个对象上的操作,这个对象叫做标签处理程序,也就是说,当servlet执行时,Web容器调用那些操作。JSP标签扩展允许您创建新的标签,并将它们直接插入到JSP页面中。JSP 2.0规范中引入了简单的标记处理程序来编写这些自定义标记。您可以继承SimpleTagSupport类并重写的doTag()方法来开发最简单的自定义标记。
2.开发自定义标签。
以下步骤为战术客户端的ip地址创建自定义标签:
编写一个通用的java类,继承SimpleTagSupport类,
类showip扩展了SimpleTagSupport {/* * * *下面的屏蔽代码已经在简单标记支持代码中完成了!这里不需要重复了!*//*私有JspContext上下文;*//* * *在pagecontext中传递*/* @ override public void setjspcontext(JSP context PC){ this . context=PC;}*/@Overridepublic void doTag()抛出JspException,IOException { page context page context=(page context)this . getjspcontext();servlet request request=page context . getrequest();string IP=request . getremote host();JspWriter out=page context . getout();Out.write('显示带有自定义标签' ip '的客户ip地址);ListString a=null}}在WEB项目的WEB-INF目录下创建mytaglib.tld文件,这个tld称为标签库的声明文件。(参考核心标签库的tld文件)
?xml版本='1.0 '编码='UTF-8 '?taglib xmlns=' http://Java . sun.com/XML/ns/javaee ' xmlns : xsi=' http://www . w3 . org/2001/XMLSchema-instance ' xsi : schema location=' http://Java . sun.com/XML/ns/javaee http://Java . sun.com/XML/ns/javaee/web-jsptagribrary _ 2 _ 1 . xsd ' version=' 2 '/description!-标签库版本-tlib-版本1.0/tlib-版本!-标签库前缀-短名称love/短名称!-TLD file-urihttp://rlovep.com/uri!的独特标签-定义标签,它应该放在方法标签的前面!-标签名- nameshowIp/name!-标签处理class-tag-classcom.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中使用自定义标记。
%-测试简单的自定义标签,标签主体(我是你)将不显示-%r lovep: showip我是你/r love p : show p 3。自定义标签的执行过程。
访问时:http://localhost :8080/stu JSP/hello tags . JSP;要重新启动Tomcat来启动服务器,请加载每个web应用程序的web-INF目录中的所有文件!比如说。Web.xml,tld文件!步骤如下:
检查jsp文件的taglib指令,查看是否有url为http://rlovep.com的tld文件。如果没有,则会报告一个错误。执行jsp文件转换:将jsp文件翻译成java源文件-编译类-构造类对象-调用_jspService()方法,读取mytaglib.tld文件,查询是否有与showIp标签对应的标签,然后读取内容,获取com.rlovep.tags.ShowIp构造ShowIp对象,然后调用ShowIp中的方法:dotag方法;4.进入标签主体。
您可以像标准标签库一样在标签中包含消息内容。如果我们想在定制的。
格式如下:
rlovep : show I you/rlovep : show,但需要修改处理类和tld文件以进行文本显示:修改处理类并在doTag方法中添加以下内容:
JspContext JspContext 2=this . getjspcontext();//显示标签体的两个方法//方法1直接调用//jspbody . invoke(null);//方法2输出到out//JSP body . invoke(jspcontext 2 . getout());修改tld文件:
标签!-标签名- nameshowIp/name!-标签处理class-tag-classcom.rlovep.tags.ShowIp/tag-class!-输出标签主体的内容格式。标签体不能写jsp的java代码。-正文内容无脚本/正文内容/标签。现在可以显示标签主体的内容了。
%-标签将显示-% rlovep : show我是你/rlovep 3360 show输出标签主体的内容格式:JSP:用于传统标签。你可以编写和执行jsp的java代码。Scriptless:标记体无法编写jsp的java代码。empty:必须是空标记。Tagdependent :标签体内容可以写jsp的java代码,但是不会执行。
5.为标签主体添加属性:
您可以在自定义标准中设置各种属性。要接收属性,值自定义标签类必须实现setter方法。
格式如下:
!-用属性测试标签,标签主体通过类处理显示-rlovep : attribute tags name=' peace ' value=' 12345定义属性如下:写处理类:属性标签扩展了简单标签支持。
添加两个属性://声明属性的成员变量私有整数值;私有字符串名称;并为两个成员属性编写setter方法;public void setvalue(整数值)public void setname(字符串名称)表示标记库文件tld中的此标记和属性:
!-标签名- nameAttributeTags/name!-标签处理class-tag-classcom.rlovep.tags.AttributeTags/tag-class!-输出标签主体的内容格式。标签体不能写jsp-body-content无脚本/body-content的java代码!-配置属性名称-属性名称名称/名称!-需要吗?- requiredtrue/required!-支持EL表达式-rtexprvaltrue/rtexprvalue/属性!-配置属性值-属性名称值/名称!-需要吗?- requiredtrue/required!-是否支持EL表达式-rtexprvaltrue/rtexprvalue/attribute/tag现在可以使用带属性的标签。tld配置属性时,您可以配置以下属性:
6.带有子标签:的自定义标签。
就像核心标签库中的choose标签一样,我们也可以定义嵌套的自定义标签。在这一部分,我们主要解释如何创建一个类似于核心标签库的choose标签。步骤如下:
创建一个处理类,处理类还是和以前一样。需要介绍的是,使用了一个getParent()方法,可以从名字中得知获得父标签,反之则获得父标签类;建立三个处理类文件:ChooseTag、OtherWiseTag和whenTag。
//ChooseTag类:公共类ChooseTag Extensions简单标记支持{//此超时变量不是标记属性,由when标记更改;另外获得的;私有布尔标志;public boolean isFlag() { return标志;}public void setFlag(布尔标志){ this.flag=flag} @ override public void dotag()抛出JSP异常,ioexception {//choose标记显示标记体并作为另外两个标记的父标记;getJspBody()。invoke(null);}}//whenTag类公共类whenTag扩展了简单标记支持{//添加测试属性私有布尔测试;public boolean isTest(){ return test;}public void setTest(布尔测试){ this.test=test} @ override public void dotag()引发JSP异常,ioexception {//如果标记属性为true,则显示标记体if (test) {getjspbody()。invoke(null);}//将父标签设置为另一个。ChooseTag parent=nullif(GetParent()instance of choose tag){ parent=(choose tag)GetParent();parent.setFlag(测试);} } }//其他标记类:public class其他标记扩展了简单标记支持{@ override public void dotag()抛出JSP异常,ioexception { boolean test=true//获取父标签的测试,以及他最后的当集if (getparent()实例的choose标签){//获取父标签的测试,以及他最后的当集choose标签parent=(choose标签)getparent();test=parent . IsFlag();} if(!test){ getJspBody()。invoke(null);}}}写入tld文件:与其他标签定义完全相同。
!-定义标签,选择-标记!-标签名- namechoose/name!-标签处理类tag-classcom.rlovep.tags.ChooseTag/tag-class!-输出标签体的内容格式标签体不可以写jsp的爪哇岛代码-正文内容少脚本/正文内容/标签!-定义标签,当标签!-标签名when - nameWhen/name!-标签处理类tag-classcom.rlovep.tags.whenTag/tag-class!-输出标签体的内容格式标签体不可以写jsp的爪哇岛代码-身体-内容无脚本/body-content!-配置属性name - attribute nametest/name!-是否必填- requiredtrue/required!-是否支持埃尔表达式-rtexprvaluetrue/rtexprvalue/attribute/tag!-定义标签否则,- tag!-标签名-说出其他人/名字!-标签处理类tag-classcom.rlovep.tags.OtherWiseTag/tag-class!-输出标签体的内容格式标签体不可以写jsp的爪哇岛代码-正文内容无脚本/正文内容/标签使用带子标签的标签:与使用其他标签稍微有些不同,需要嵌套
!-测试选择-rlovep :选择rlovep :当测试='${105 } '时条件成立执行when/rlovep : when rlovep :否则条件不成立执行否则/rlovep :否则/rlovep :选择自定义标签就介绍到这里;
404页面,505页面,错误页面配置方法:
可以在web.xml中给你的网站配置全局的404页面,505页面,错误页面;配置方法如下:记得建立相应的跳转文件。
?可扩展标记语言版本='1.0 '编码='UTF-8 '?web-app xmlns : xsi=' http://www。w3。org/2001/XMLSchema-实例' xmlns=' http://Java。星期日com/XML/ns/javaee ' xsi :架构位置=' http://Java。星期日com/XML/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd' ID=' web app _ ID '版本=' 3.0 '!-配置空指针异常-错误-页面exception-typejava.lang.NullPointerException/exception-type位置/错误。JSP/位置/错误-页面!-配置505错误页面-错误页面错误代码500/错误代码位置/common/500。JSP/位置/错误-页面!-配置404错误页面-错误-页面错误代码404/错误代码位置/公共/404。html/位置/错误-页面/网页-appJSP入门就介绍到这里,希望对大家的学习有所帮助。