陕西网站建设制作,湖南企业seo优化报价,月付网站空间提供商,中国菲律宾关系自定义标签简介自定义标签主要用于移除Jsp页面中的java代码。要使用自定义标签移除jsp页面中的java代码#xff0c;只需要完成以下两个步骤:1.编写一个实现Tag接口的java类#xff0c;把页面java代码移到这个java类中(标签处理器类)。2.编写标签库描述(tld)文件#xff0c;在… 自定义标签简介 自定义标签主要用于移除Jsp页面中的java代码。 要使用自定义标签移除jsp页面中的java代码只需要完成以下两个步骤: 1.编写一个实现Tag接口的java类把页面java代码移到这个java类中(标签处理器类)。 2.编写标签库描述(tld)文件在tld文件中把标签处理器类描述成一个标签。 我们接下来写一个小例子来对自定义标签的开发做一个入门了解 快速入门:使用标签输出客户机IP 我们在MyEclipse中创建一个名为JspTest的Web project然后改写它的index.jsp来实现输出客户机IP。 如果我们不使用标签的话我们免不了使用脚本代码来实现我们的功能:% page languagejava importjava.util.* pageEncodingutf-8%
!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN
htmlheadtitleMy JSP index.jsp starting page/title/headbody您的ip为:%String ip request.getRemoteAddr();out.print(ip);%/body
/html 将JspTest工程部署到tomcat运行之后效果: 但是这里直接写了java代码不符合我们的mvc规范所以我们要移除java代码用简单的标签来替代它。 我们上面说了开发自定义标签库的步骤我们按照那个步骤来开发一个显示用户ip的标签。 jsp技术中有一个tag接口下面有如下的方法:doEndTag()执行开始标签执行的方法(如c:foreach) doStartTag()执行结束标签执行的方法(如/c:foreach) getParent()得到标签的父标签(包裹本标签的上一级标签) release()释放资源的方法标签结束时执行会释放标签运行的时候所占用的资源。 setPageContext(PageContext pc)把页面的PageContext传递过来(最重要的方法它会把页面的所有数据传递过来包括Servlet的八大隐式对象这样我们就可以做我们想处理的任何事) setParent(Tag t)设置标签的父标签(包裹本标签的上一级标签) 以上就是整个tag接口的说明文档。 我们开发标签的主要逻辑就要写在doStartTag()和doEndTag()方法。 但是如果我们实现了tag接口就不单单要实现doStartTag()和doEndTag()方法其它的方法也要去实现那么这个时候我们不想改变原有方法的内容这个时候sun公司给我们提供了tag默认的实现类供我们使用有以下方法: BodtTagSupport/TagAdapter/TagSupport 我们下面常用的就是TagSupport 我们接下来做开发 来移除我们刚刚写的获取用户ip的代码。 我们创建一个类去集成实现了Tag接口的TagSupport类:package org.zyg.web.tag;import javax.servlet.jsp.tagext.TagSupport;public class ViewIPTag extends TagSupport {} 然后我们实现其中的doStartTag()方法然后将显示用户ip的逻辑写进去:package org.zyg.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;public class ViewIPTag extends TagSupport {Overridepublic int doStartTag() throws JspException {//Tag接口的setPageContext方法已经将PageContext从页面拿过来//我们在这里获取PageContextHttpServletRequest request(HttpServletRequest)this.pageContext.getRequest();//获取JspWriter对象JspWriter outthis.pageContext.getOut();String ip request.getRemoteAddr();try {out.print(ip);} catch (IOException e) {throw new RuntimeException(e);}return super.doStartTag();}}现在我们就已经成功的页面的java代码成功的移到一个标签处理类中了jsp类中就不需要出现这段java代码了。 接下来就是我们要为这个标签处理类定义一个标签名了。 我们要创建一个tld文件我们在WEB-INF/lib下新建一个zyg.tld文件。 内容我们不知道怎么写可以查看tomcat给我们的规范在tomcat的apache-tomcat-6.0.24\webapps\examples\WEB-INF\jsp2文件夹下有一个jsp2-example-taglib.tld文件我们将它的头和尾抄过来:taglib xmlnshttp://java.sun.com/xml/ns/j2eexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsdversion2.0/taglib 接下来我们将我们的标签处理类包装成一个标签:taglib xmlnshttp://java.sun.com/xml/ns/j2eexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsdversion2.0descriptionA tag library exercising SimpleTag handlers./descriptiontlib-version1.0/tlib-versionshort-namezyg/short-nameurihttp://blog.csdn.net/acmman/uritagnameviewIP/name!-- 标签名 --tag-classorg.zyg.web.tag.ViewIPTag/tag-classbody-contentempty/body-content!-- 有无标签体(单标签还是成对标签) --/tag/taglib 接下来我们在页面使用这个标签在使用标签前首先在jsp页面中导入标签: %taglib urihttp://blog.csdn.net/acmman prefixzyg % 其中uri就是我们在tld文件中设置的绑定路径prefix就是标签的前缀代表我们使用了zyg.tld标签库的标签。 然后我们写一个“zyg”按一下Alt/就可以看到自动提示这个时候我们的标签成功引入了: 代码:% page languagejava importjava.util.* pageEncodingutf-8%
%taglib urihttp://blog.csdn.net/acmman prefixzyg %!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN
htmlheadtitleMy JSP index.jsp starting page/title/headbody您的ip为:zyg:viewIP//body
/html我们重新发布一下web工程在浏览器中访问:我们虽然看到和以前一样的效果但是内部的技术全都换了。至此我们阐述了一个简单的自定义标签的开发过程。 转载请注明出处http://blog.csdn.net/acmman/article/details/51065439