笔记121-133
来源:互联网 发布:好的打工软件 编辑:程序博客网 时间:2024/06/05 10:46
121 自定义标签运行原理
当web服务器遇到自定义标签时,首先实例化标签对应的标签处理器类,接着调用setPageContext方法,把页面的pageContext对象传递给标签处理器类。看标签是不有父标签,若有,则把父标签作为一个对象传递给处理器类。完成初始化工作后,服务器就开始执行标签,遇到标签的开始标签后调用相关方法,特别的,若标签内有标签体,一般会执行标签体,遇到标签的结束标签后同样执行相关方法。最后当应用结束后,服务器一般会调用release方法来释放其所占用的内存。想要详细了解其执行过程可以观察由jsp生成的servlet
122 自定义标签功能概述
自定义标签除了要消除页面中的jsp代码外,还可以实现jsp页面中的逻辑输出。比如:判断语句,条件语句,修改语句等功能
123 传统标签库功能详解
doStartTag方法的返回值控制是否执行标签的标签体,所以可以通过控制返回值来控制标签体里面的内容是否输出。返回值为Tag类的静态常量。EVAL_BODY_INCLUDE会执行标签体,SKIP_BODY则不会执行标签体
<body-content>内控制标签内内容类型
doEndTag方法的返回值可以控制是否继续执行jsp页面。Tag.EVAL_PAGE会继续执行,Tag.SKIP_PAGE则会中断jsp解释。
想要使用tag处理器作出循环效果,需要使用IterationTag接口的doAfterBody方法。其方法在方法体执行完后执行,若其返回Tag.eval_BODY_AGAIN则会继续循环。SKIP_BODY则不会继续循环
TagSupport接口中也包含有doAfterBody方法
修改标签体内容时使用EVAL_SCOT_SUFFERED返回值,会将标签体以对象形式返回,在endTag方法中使用getbodycontent可以得到标签体,修改后再将其用out对象输出。需要继承bodyTagSupport类
在jsp2.0以后的版本,可以直接使用simpletag接口来直接作出以上三个功能
124 简单标签库功能详解
简单标签库中统一使用doTag来调用标签,在执行之前使用setJspBody方法传入标签体jspFragment对象。其默认实现类为simpletagsupport。可以使用对象的invoke(this.getjspcontext.getout)来执行其标签体,该方法将jspFrame写入流式中。jspcontent中应填入scriptless,声明其中为无脚本的jsp代码。使用this.getJspBody()方法来得到jspFramement对象。
简单标签的生命周期:当遇到简单标签时,首先实例化标签处理器类。之后调用setjspcontext,反页面pagecontext和jspframement传递给标签处理器类,紧接着也将父节点传递进入。然后调用dotag方法执行标签。在标签执行完成后立刻销毁
simpletag中主要有dotag,getparent,setjspbody,setjspcontext,setparent等方法
125 开发带属性的标签
要想一个自定义标签具有属性,通常需要完成两个任务:
1.在标签处理器中编写每个属性民对应的setter方法
2.在tld文件中描述标签的属性
<attribute>中name标签用于指定属性名称,required指定是否必须。rtexprvalue指定是否其内部支持脚本表达式。
133 sun公司的jstl标签库
jsp五类标签,核心标签库,数据库标签,xml标签,jstl函数标签。因为数据处理因放在servlet中处理,所以不推荐使用数据库标签和xml标签。
<c:out value=""/>可以在里面填入el表达式
<c:set value="" var="" scope=""/> <c:set value="" target="" property=""/>可以在任意域或者javabean内存入值,也可以将其中的值加入标签内
<c:remove var="name"/>用于删除某个变量
<c:if>标签的value内一般存放需要进行条件判断的el表达式,var属性则可以保存test属性判断完后的结果,如果判断成功则执行其标签体
<c:choose><c:when><c:otherwise>联合使用,相当于java中的switch语句
<c:forEach>用于遍历集合对象
<c:forToken>用于jsp中的字符串处理,其中,items属性用于存放需要遍历的字符串,delims属性可以去掉指定的分隔符,var为循环中使用的临时变量。如果在字符串中没有找到指定的分隔符,则把整个字符串做为一个对象传入。state属性存入了循环的一些特征量
<c:import>用于引用指定的uri数据,var可以保存引入的string格式。根目录为应用程序根目录。一般需要用<c:catch>包括在内
<c:redirect>重定向,根目录为应用程序根目录。可以使用<c:param>传入参数
当web服务器遇到自定义标签时,首先实例化标签对应的标签处理器类,接着调用setPageContext方法,把页面的pageContext对象传递给标签处理器类。看标签是不有父标签,若有,则把父标签作为一个对象传递给处理器类。完成初始化工作后,服务器就开始执行标签,遇到标签的开始标签后调用相关方法,特别的,若标签内有标签体,一般会执行标签体,遇到标签的结束标签后同样执行相关方法。最后当应用结束后,服务器一般会调用release方法来释放其所占用的内存。想要详细了解其执行过程可以观察由jsp生成的servlet
122 自定义标签功能概述
自定义标签除了要消除页面中的jsp代码外,还可以实现jsp页面中的逻辑输出。比如:判断语句,条件语句,修改语句等功能
123 传统标签库功能详解
doStartTag方法的返回值控制是否执行标签的标签体,所以可以通过控制返回值来控制标签体里面的内容是否输出。返回值为Tag类的静态常量。EVAL_BODY_INCLUDE会执行标签体,SKIP_BODY则不会执行标签体
<body-content>内控制标签内内容类型
doEndTag方法的返回值可以控制是否继续执行jsp页面。Tag.EVAL_PAGE会继续执行,Tag.SKIP_PAGE则会中断jsp解释。
想要使用tag处理器作出循环效果,需要使用IterationTag接口的doAfterBody方法。其方法在方法体执行完后执行,若其返回Tag.eval_BODY_AGAIN则会继续循环。SKIP_BODY则不会继续循环
TagSupport接口中也包含有doAfterBody方法
修改标签体内容时使用EVAL_SCOT_SUFFERED返回值,会将标签体以对象形式返回,在endTag方法中使用getbodycontent可以得到标签体,修改后再将其用out对象输出。需要继承bodyTagSupport类
在jsp2.0以后的版本,可以直接使用simpletag接口来直接作出以上三个功能
例:
import java.io.IOException;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.tagext.IterationTag;import javax.servlet.jsp.tagext.Tag;import javax.servlet.jsp.tagext.TagSupport;public class IfTag extends TagSupport { private int time = 5; private static final long serialVersionUID = 1L; public int doStartTag() throws JspException { JspWriter out = this.pageContext.getOut(); try { out.print(time); } catch (IOException e) { e.printStackTrace(); } return Tag.EVAL_BODY_INCLUDE; } public int doAfterBody() throws JspException { time--; JspWriter out = this.pageContext.getOut(); try { out.print(time); } catch (IOException e) { e.printStackTrace(); } if (time != 0) { time=5; return IterationTag.EVAL_BODY_AGAIN; } else { return IterationTag.SKIP_BODY; } }}
tld文件配置:
<tag> <name>reprint</name> <tag-class>tagHandler.ReprintTag</tag-class> <body-content>scriptless</body-content> </tag><tldlib>中的uri标签设置在jsp文件中引用时需要设置的uri
124 简单标签库功能详解
简单标签库中统一使用doTag来调用标签,在执行之前使用setJspBody方法传入标签体jspFragment对象。其默认实现类为simpletagsupport。可以使用对象的invoke(this.getjspcontext.getout)来执行其标签体,该方法将jspFrame写入流式中。jspcontent中应填入scriptless,声明其中为无脚本的jsp代码。使用this.getJspBody()方法来得到jspFramement对象。
简单标签的生命周期:当遇到简单标签时,首先实例化标签处理器类。之后调用setjspcontext,反页面pagecontext和jspframement传递给标签处理器类,紧接着也将父节点传递进入。然后调用dotag方法执行标签。在标签执行完成后立刻销毁
simpletag中主要有dotag,getparent,setjspbody,setjspcontext,setparent等方法
例:
public class ReprintTag extends SimpleTagSupport{ public void doTag(){ for(int i=0;i<3;i++){ JspWriter out=this.getJspContext().getOut(); JspFragment context=this.getJspBody(); try { StringWriter sw=new StringWriter(); context.invoke(sw); System.out.println(sw.toString()); String s=sw.toString(); out.write(s); } catch (JspException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }}
125 开发带属性的标签
要想一个自定义标签具有属性,通常需要完成两个任务:
1.在标签处理器中编写每个属性民对应的setter方法
2.在tld文件中描述标签的属性
<attribute>中name标签用于指定属性名称,required指定是否必须。rtexprvalue指定是否其内部支持脚本表达式。
例:
public class ReprintTag extends SimpleTagSupport{ private int count; private String value; public void setCount(int count) { this.count = count; } public void setValue(String value) { this.value = value; } public void doTag(){ for(int i=0;i<count;i++){ JspWriter out=this.getJspContext().getOut(); try { out.write(value); } catch (IOException e) { e.printStackTrace(); } } }}
属性配置:
<attribute> <name>count</name> <required>true</required> <rtexprvalue>true</rtexprvalue></attribute>
133 sun公司的jstl标签库
jsp五类标签,核心标签库,数据库标签,xml标签,jstl函数标签。因为数据处理因放在servlet中处理,所以不推荐使用数据库标签和xml标签。
<c:out value=""/>可以在里面填入el表达式
<c:set value="" var="" scope=""/> <c:set value="" target="" property=""/>可以在任意域或者javabean内存入值,也可以将其中的值加入标签内
<c:remove var="name"/>用于删除某个变量
<c:if>标签的value内一般存放需要进行条件判断的el表达式,var属性则可以保存test属性判断完后的结果,如果判断成功则执行其标签体
<c:choose><c:when><c:otherwise>联合使用,相当于java中的switch语句
<c:forEach>用于遍历集合对象
<c:forToken>用于jsp中的字符串处理,其中,items属性用于存放需要遍历的字符串,delims属性可以去掉指定的分隔符,var为循环中使用的临时变量。如果在字符串中没有找到指定的分隔符,则把整个字符串做为一个对象传入。state属性存入了循环的一些特征量
<c:import>用于引用指定的uri数据,var可以保存引入的string格式。根目录为应用程序根目录。一般需要用<c:catch>包括在内
<c:redirect>重定向,根目录为应用程序根目录。可以使用<c:param>传入参数
0 0
- 笔记121-133
- 笔记121--图片压缩
- 笔记
- 笔记
- 笔记
- 笔记
- 笔记
- 笔记
- 笔记
- 笔记
- 笔记
- 笔记
- 笔记
- 笔记
- 笔记
- 笔记
- 笔记
- 笔记
- 汇编语言笔记二
- 笔记111-120
- java中线程总结
- Maven入门-4.Maven的依赖
- Maven入门-5.Maven的聚合和继承
- 笔记121-133
- oracle--查询本部门薪水大于平均工资的员工
- ActionContext详解
- Codeforces 770D Draw Brackets!【模拟+思维】
- 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
- 递归递推之 汉诺塔系列1
- ubuntu卸载fcitx后引发的问题修复
- 在java项目中引用jar包
- 项目中的OkHttp工具(简单级别的)