JSP自定义标签案例分析
本文为大家介绍了JSP自定义标签的案例,供大家参考,具体内容如下
案例一:实现一个基本防盗链标签
1.标签处理类
publicclassMyRefererextendsBodyTagSupport{ privateStringsite; privateStringback; publicStringgetSite(){ returnsite; } publicvoidsetSite(Stringsite){ this.site=site; } publicStringgetBack(){ returnback; } publicvoidsetBack(Stringback){ this.back=back; } publicintdoEndTag()throwsJspException{ //获取JSP上下文环境对象 PageContextpageContext=this.pageContext; //获取到request对象 HttpServletRequestrequest=(HttpServletRequest)pageContext.getRequest(); //判断 Stringheader=request.getHeader("referer"); if(header!=null&&header.startsWith(getSite())){ //执行后续的页面 returnTag.EVAL_PAGE; }else{ //页面的重定向 HttpServletResponseresponse=(HttpServletResponse)pageContext.getResponse(); try{ response.sendRedirect(getBack()); }catch(IOExceptione){ e.printStackTrace(); } //不执行 returnTag.SKIP_PAGE; } } }
2.描述文件
<?xmlversion="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/javaeehttp://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <!--2.编写标签库描述文件--> <tlib-version>1.0</tlib-version> <short-name>jnb</short-name> <tag> <name>referer</name> <tag-class>cn.itcast.custom.MyReferer</tag-class> <body-content>empty</body-content> <attribute> <name>site</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>back</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>
3.引入和使用
<%@tagliburi="/WEB-INF/referer.tld"prefix="my"%> <my:referersite=http://localhost:8080/day11/list.jsp back="/day11/list.jsp"/>
JSP2.0自定义标签
---|SimpleTag接口
定义了标签处理类的生命周期方法。doTag()
-----|SimpleTagSupport类
全部实现了SimpleTag接口的方法,因此后面我们只需要继承并重写该类即可。
案例二:实现自己的if….else标签
目标:
<%@tagliburi="http://java.sun.com/jsp/jstl/core"prefix="c"%> <c:choose> <c:whentest="<%=12>1%>"> 大于 </c:when> <c:otherwise> 小于 </c:otherwise> </c:choose>
分析:
1.ChooseTag.java,必须定义一个标记字段属性
publicclassChooseTagextendsSimpleTagSupport{ privatebooleantag=true; publicbooleanisTag(){ returntag; } publicvoidsetTag(booleantag){ this.tag=tag; } //遇到标签自动执行 publicvoiddoTag()throwsJspException,IOException{ //获取标签体对象 JspFragmentbody=this.getJspBody(); //执行标签体 body.invoke(null); super.doTag(); } }
2.WhenTag.java
publicclassWhenTagextendsSimpleTagSupport{ privatebooleantest; publicbooleanisTest(){ returntest; } publicvoidsetTest(booleantest){ this.test=test; } //遇到标签自动执行 publicvoiddoTag()throwsJspException,IOException{ //获取父元素 ChooseTagchoose=(ChooseTag)this.getParent(); //获取父元素的标记变量值 booleanparent=choose.isTag(); //判断 if(parent&&this.isTest()){ //执行标签体 JspFragmentbody=this.getJspBody(); body.invoke(null); } super.doTag(); } }
3.Otherwise.java
publicclassOtherwiseTagextendsSimpleTagSupport{ //遇到标签自动执行 publicvoiddoTag()throwsJspException,IOException{ //获取父元素 ChooseTagchoose=(ChooseTag)this.getParent(); //获取父元素的标记变量值 booleanparent=choose.isTag(); //判断 if(parent){ //执行标签体 JspFragmentbody=this.getJspBody(); body.invoke(null); } super.doTag(); } }
4.描述文件
<?xmlversion="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/javaeehttp://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <!--2.编写标签库描述文件--> <tlib-version>1.0</tlib-version> <short-name>jnb</short-name> <tag> <name>choose</name> <tag-class>cn.itcast.tags.ChooseTag</tag-class> <body-content>scriptless</body-content>JSP2.0方式 </tag> <tag> <name>when</name> <tag-class>cn.itcast.tags.WhenTag</tag-class> <body-content>scriptless</body-content> <attribute> <name>test</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <tag> <name>otherwise</name> <tag-class>cn.itcast.tags.OtherwiseTag</tag-class> <body-content>scriptless</body-content> </tag> </taglib>
5.引入和使用
<%@tagliburi="/WEB-INF/ifelse.tld"prefix="jnb"%> <jnb:choose> <jnb:whentest="<%=1>2%>"> 小于 </jnb:when> <jnb:otherwise> 大于 </jnb:otherwise> </jnb:choose>
打包自定义标签库
1. 建立一个taglibs文件夹
2. 将所有的标签处理类对应的class文件连同包拷贝到1中的目录中
3. 在1中的文件夹中建立一个META-INF文件夹
4. 将tld文件拷贝到META-INF目录
5. 编辑tld文件引入uri元素:<uri>http://www.jnb.com</uri> à提供引入的url路径
6. 使用jar命令进行打包:D:\mytaglibs>jarcvfjnb.jar*
总结
主要掌握如何使用JSP2.0进行自定义标签的开发和打包。
1. 建立一个taglibs文件夹
2. 将所有的标签处理类对应的class文件连同包拷贝到1中的目录中
3. 在1中的文件夹中建立一个META-INF文件夹
4. 将tld文件拷贝到META-INF目录
5. 编辑tld文件引入uri元素:<uri>http://www.jnb.com</uri> à提供引入的url路径
6. 使用jar命令进行打包:D:\mytaglibs>jarcvfjnb.jar*
总结
主要掌握如何使用JSP2.0进行自定义标签的开发和打包。