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进行自定义标签的开发和打包。