1.写一个类(标签处理器类)实现simpleTag接口(可以直接实现simpleTagSupport类,jsp-api.jar)覆盖doTag方法
1.移除jsp页面java代码,把需要移除的代码放到接口的doTag方法内
例如: PageContext context = (PageContext) this.getJspContext();
HttpServletRequest request = (HttpServletRequest) context.getRequest();
String ip = request.getRemoteAddr();
context.getOut().write(ip);
2.控制标签体是否执行,在dotag方法体内,控制代表标签体的jspFragment是否执行,就可以实现控制标签体是否执行
例如: //拿到标签体
JspFragment jf = this.getJspBody();
//执行标签体
jf.invoke(null); //null代表写给浏览器
3.控制jsp页面某一段内容重复执行,在dotag方法体内,循环执行代表标签体的jspFragment对象即可。
4.修改标签体(修改jsp页面内容)在dotag方法体内,得到代表标签体的jspFragment对象,让这个对象执行时,其执行结果写到一个容器中,然后开发人员可以从容器中取数据修改后再输出给客户机.
例如: JspFragment jf = this.getJspBody();
StringWriter sw = new StringWriter();
jf.invoke(sw);
String content = sw.getBuffer().toString();
String result = content.toUpperCase();
this.getJspContext().getOut().write(result);
5.控制jsp页面是否执行,在dotag方法内抛SKIPPageException异常,则容器就不会执行标签后面的余下jsp
例如: throw new SkipPageException();
2.对于标签的属性,可以通过在标签处理器类中定义相应的set方法接收属性
3.在tld文件中对标签进行描述
<tag>
<name>test</name>
<tag-class>com.xxx.testTag</tag-class>
<body-content>scriptless</body-content><!-- 指定标签体的内容是非脚本的,常用的还有一个是empty -->
<attribute>
<name>id</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue> <!-- 指定属性值是否可以是一个脚本或EL表达式 -->
</attribute>
</tag>
4.在jsp页面中导入标签库