一:自定义标签是用于移除jsp页面中的java代码
二:移除jsp页面中的java代码步骤
1:编写一个实现Tag接口的java类,并覆盖doStartTag方法,将jsp页面中的java代码写到这个方法中。
2:编写标签库描述符文件,在tld文件中对自定义标签进行描述。tld文件在WEB-INF中。
三:自定义标签技术是通过给一个实现了TAG接口的类传递pagecontext,从而实现对jsp页面隐式对象的操作。
四:自定义标签执行流程
1创建标签处理器对象
2调用setPageContext方法,把页面pagecontext对象传递进来
3调用setParent,把父标签传递给标签处理器类
4执行标签,遇到开始标签调用dostart方法
5执行结束标签时,调用doEndTag方法。
6执行release方法。
四:在标签处理器类要想控制标签体是否执行,只需在dostartTag根据条件返回SKIP_BODY或者EVAL_BODY_INCLUDE
五:如果在标签处理器类要控制jsp页面是否执行,只需在doEndTag方法根据条件返回EVAL_PAGE或SKIP_PAGE.
六:如果想重复执行标签体,需要实现iterationTag接口,或者继承TagSupport类,必须实现doStartTag()方法,和doAfterBody(),因为服务器如果发现时iteration的接口,会先执行doStartTag,然后执行doAfterBody。然后根据返回值决定。
七:如果想修改标签体的内容,需要继承BodyTagSupport,或者实现BodyTag接口,BodyContent容器用于存储标签体内容的。
八:tld文件中的四种标签体类型:EMPTY,JSP,sriptless,tagdepentend.
九:简单标签接口SimpleTag,还是通过pagecontext获取jsp隐式对象,并且会把jsp标签体封装成jspfragment对象。
十:开发带有属性的标签。需要在tld中设置属性,先在标签处理器类中定义相应的get,set方法。
十一:可以开发一个防盗链的案例,在路径相关的地方应该使用pageContext.request.contextPath代表应用根目录,request.getHeader("referer")得到的referer如果不是本网站跳转过来的则为空
十二:由于web服务器只对基本数据类型自动转换,所以对于复杂的标签属性,需要传递相应的类型。
十三:两个标签之间如果想共享变量,通过一个共有的父类就可以了,因为父标签会传给子标签,比如,<c:choose>方法。
十四:打包标签库,标签处理器类,然后新建META-INF文件夹,将tld文件放在中间,然后导出jar文件ok