jsp传统自定义标签
2015-07-03 23:13
579 查看
移除jsp页面中的java代码,只需要完成两个步骤:
1.编写一个实现Tag接口的Java类,并覆盖doStartTag方法,把jsp页面中的java代码写到doStartTag方法中。
2.编写标签库描述符(tld)文件,在tld文件中对自定义标签进行描述。
注意:tld文件放在WEB-INF目录下,可不配置,可参看tomcat例子
运用:
Tag接口的执行流程
JSP引擎将遇到自定义标签时,首先创建标签处理器类的实例对象,然后按照JSP规范定义的通信规则依次调用它的方法。
1、public void setPageContext(PageContext pc), JSP引擎实例化标签处理器后,将调用setPageContext方法将JSP页面的pageContext对象传递给标签处理器,标签处理器以后可以通过这个pageContext对象与JSP页面进行通信。
2、public void setParent(Tag t),setPageContext方法执行完后,WEB容器接着调用的setParent方法将当前标签的父标签传递给当前标签处理器,如果当前标签没有父标签,则传递给setParent方法的参数值为null。
3、public int doStartTag(),调用了setPageContext方法和setParent方法之后,WEB容器执行到自定义标签的开始标记时,就会调用标签处理器的doStartTag方法。
4、public int doEndTag(),WEB容器执行完自定义标签的标签体后,就会接着去执行自定义标签的结束标记,此时,WEB容器会去调用标签处理器的doEndTag方法。
5、public void release(),通常WEB容器执行完自定义标签后,标签处理器会驻留在内存中,为其它请求服务器,直至停止web应用时,web容器才会调用release方法。
自定义标签除了可以移除Jsp页面中的java代码外,它还可以用于完成一些页面逻辑,例如:
1.编写一个实现Tag接口的Java类,并覆盖doStartTag方法,把jsp页面中的java代码写到doStartTag方法中。
public class ViewIPTag extends TagSupport { public int doStartTag() throws JspException { HttpServletRequest request=(HttpServletRequest) this.pageContext.getRequest(); String strIP=request.getRemoteAddr(); JspWriter out=this.pageContext.getOut(); try { out.write("你的IP地址为"+strIP); } catch (IOException e) { throw new RuntimeException(e); } return super.doStartTag(); } }
2.编写标签库描述符(tld)文件,在tld文件中对自定义标签进行描述。
注意:tld文件放在WEB-INF目录下,可不配置,可参看tomcat例子
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <description>A tag library exercising SimpleTag handlers.</description> <tlib-version>1.0</tlib-version> <short-name>SimpleTagLibrary</short-name> <uri>http://www.hgnc.net/jsp2-tag</uri> <tag> <description>show client IP</description> <name>viewIP</name> <tag-class>cn.itcast.web.tag.ViewIPTag</tag-class> <body-content>empty</body-content> </tag>
运用:
hljs xml"> <head> <title>显示IP地址</title> </head> <body> <% String strIP=request.getRemoteAddr(); out.print("你的IP地址为"+strIP); %> <br> < itcast:viewIP/> </body> </html>
Tag接口的执行流程
JSP引擎将遇到自定义标签时,首先创建标签处理器类的实例对象,然后按照JSP规范定义的通信规则依次调用它的方法。
1、public void setPageContext(PageContext pc), JSP引擎实例化标签处理器后,将调用setPageContext方法将JSP页面的pageContext对象传递给标签处理器,标签处理器以后可以通过这个pageContext对象与JSP页面进行通信。
2、public void setParent(Tag t),setPageContext方法执行完后,WEB容器接着调用的setParent方法将当前标签的父标签传递给当前标签处理器,如果当前标签没有父标签,则传递给setParent方法的参数值为null。
3、public int doStartTag(),调用了setPageContext方法和setParent方法之后,WEB容器执行到自定义标签的开始标记时,就会调用标签处理器的doStartTag方法。
4、public int doEndTag(),WEB容器执行完自定义标签的标签体后,就会接着去执行自定义标签的结束标记,此时,WEB容器会去调用标签处理器的doEndTag方法。
5、public void release(),通常WEB容器执行完自定义标签后,标签处理器会驻留在内存中,为其它请求服务器,直至停止web应用时,web容器才会调用release方法。
自定义标签除了可以移除Jsp页面中的java代码外,它还可以用于完成一些页面逻辑,例如:
//1.控制页面部分内容是否输出 public class TagDemo1 extends TagSupport { @Override public int doStartTag() throws JspException { //控制页面部分内容输出 return this.EVAL_BODY_INCLUDE; /*控制页面部分内容不输出 return this.SKIP_BODY; */ } }
//2.控制余下的整个jsp是否输出 public class TagDemo2 extends TagSupport { @Override public int doEndTag() throws JspException { //控制余下的整个jsp输出 return EVAL_PAGE; /*控制余下的整个jsp不输出 return SKIP_PAGE; */ } }
//3.控制标签体内容循环次数 public class TagDemo4 extends TagSupport { int x; @Override public int doAfterBody() throws JspException { if(x-->0) return IterationTag.EVAL_BODY_AGAIN; else return IterationTag.SKIP_BODY; } @Override public int doStartTag() throws JspException { x=5; return this.EVAL_BODY_INCLUDE; } }
//4.控制标签体内容是否输出 public class TagDemo5 extends BodyTagSupport { @Override public int doStartTag() throws JspException { return BodyTag.EVAL_BODY_BUFFERED; } @Override public int doEndTag() throws JspException { BodyContent bc=this.getBodyContent(); String content=bc.getString(); content=content.toUpperCase(); try { this.pageContext.getOut().write(content); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return super.doEndTag(); }
相关文章推荐
- JSP/PHP基于Ajax的分页功能实现
- 开发阶段Jetty运行Jsp报错且响应空白
- Apache Web让JSP“动”起来
- JSP 多条SQL语句同时执行的方法
- 在jsp页面中响应速度提高的7种方法分享
- (jsp/html)网页上嵌入播放器(常用播放器代码整理)
- JSP避免Form重复提交的三种方案
- jsp 标准标签库简析
- jsp 常用标签的使用
- JSP小知识简单介绍
- jsp页面中的代码执行加载顺序介绍
- jsp遍历文件夹下的文件的代码
- jsp fckeditor 上传中文图片乱码问题的解决方法
- JSP转发和重定向的区别分析
- jsp 连接sql server 2008 连接不上的解决方法
- jsp是什么文件 如何打开jsp格式的文件
- 五种 JSP页面跳转方法详解
- 分享JSP中文乱码解决方法