一:国庆结束了,回来上班,结果老大说过两天才出差,所以这两天就用来补自己不太懂的知识或者以前没有熟悉的知识,jsp的标签就是,因为在项目中自己封装了一些标签,但是我自己只是会用,真正的原理性的东西我还是不是很明白,所以今天一天的时间基本上都是在网上找资料来熟悉jsp标签的知识。
二:标签中tld中的属性rtexprvalue的用处
rtexprvalue的全称是 Run-time Expression Value,网上说是否可以利用jsp表达式。
rtexprvalue表示标签中的值是否可以直接指定或者可以动态(使用脚本或者el表达式)指定;
reruired表示是否是必须的;
下面说一说具体的用法,先给出tld中的定义如下:
instance" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
my Tags
0.1
my
/mytag
wh
org.wh.gsh.web.tag.PersonTag
JSP
personbh
true
true
departmen
false
false
元素可以设置的内容有3种。
jsp页面的用法如下:元素主要的功能是指定标签体的类型,可能的取值有以下4种。
(1)empty:没有标签体
(2)JSP:标签体可以包含文本、EL、表达式或者JSP标签,但对于简单标签无效。
(3)scriptless:标签体可以包含文本、EL表达式、JSP标签,但不能包含JSP的脚本元素。
(4)tagdependent:表示标签体交由标签本身去解析处理。若指定tagdependent,在标签体中的所有代码都会原封不动的交给标签处理器,而不是将执行结果传递给标签处理器。
上面所说的标签体是这么个意思:如果标签写成这样---->表示没有标签体,如果写成这样则有标签体
个人信息页面---->false
三:标签返回值的效果及意义:
在TagSupport类中,有如下4个方法最重要:doStartTag(),doEndTag(),doAfterTag(),release()
(1)doStartTag():此方法是开始执行标签,有如下两种返回值:
SKIP_BODY:表示忽略标签体的内容,而将执行权交给doEndTag()方法,
EVAL_BODY_INCLUDE:表示执行标签体的内容。
(2)doAfterTag():此方法是IterationTag接口与Tag接口的差别所在,用来重复执行标签体的内容,有如下两种返回值
SKIP_BODY:表示忽略标签体的内容,并且将执行权交给doEndTag()方法;
EVAL_BODY_AGAIN:表示重复执行标签体内容,会重复调用doAfterBody()方法,一直循环执行下去,直到doAfterBody()方法但会SKIP_BODY为止。
(3)doEndTag():此方法在标签结束时执行,有如下两种返回值
SKIP_PAGE:在JSP页面应该立刻停止执行(即是不执行下面的jsp代码),并将所有的输出立刻回传到浏览器上。
EVAL_PAGE:表示jsp正常的运行
四:TagSupport和BodyTagSupport的区别
TagSupport和BodyTagSupport的区别主要是标签处理类是否需要与标签体交互,如果不需要交互的就用TagSupport,否则如果需要交互就用BodyTagSupport。
交互的意思大概可以理解成标签处理类是否要读取标签体的内容和改变标签体返回的内容。再说明白点就是如果要更改或者处理标签体中的内容则必须实现BodyTagSupport类。(标签里面都可以有内容,但是要更改内容或作其他处理就必须实现BodyTagSupport类);
下面说说BodyTagSupport新增了的方法
public static final int EVAL_BODY_BUFFERED :表示该标签体的内容应该被出俩,所有的处理都应该保存到BodyContent类中;
protected BodyContent bodyContent :存放处理结果
public JspWriter getPreviousOut() :取得JspWriter的输出流对象
比如下面的代码就是把标签体中的截取一部分进行显示,代码如下
MyTag.javapackageorg.wh.demo.Tag;importjavax.servlet.jsp.JspException;importjavax.servlet.jsp.tagext.BodyContent;importjavax.servlet.jsp.tagext.BodyTag;importjavax.servlet.jsp.tagext.BodyTagSupport;importjavax.servlet.jsp.tagext.Tag;public class MyTag extendsBodyTagSupport {/****/
private static final long serialVersionUID = 1L;public int doStartTag() throwsJspException{returnBodyTag.EVAL_BODY_BUFFERED;
}public int doEndTag() throwsJspException{
BodyContent bc=this.getBodyContent();//获取标签体的内容
String ct=bc.getString();//转换为字符串
String rt=ct.substring(5,10);try{this.pageContext.getOut().write(rt);
}catch(Exception e){throw newRuntimeException(e);
}returnTag.EVAL_PAGE;
}
}
mytag.tld<?xml version="1.0" encoding="UTF-8"?>
标签的测试
my tags
0.0
my
/mytags
wh
org.wh.demo.Tag.MyTag
scriptless
HelloTag.jsp:
Insert title hereHello Tag!!!
自己定义的标签使用如下效果
这是我写的第一个标签
结果如下:
我现在就是知道怎么用了,以前自己只是只看不做的人,现在自己在边看边实践,即使是最简单的东西,只是还是极少成多的。现在就补下基础薄弱的地方。自己做一遍比看几百遍都强的。自己还是得花时间来学习下源码,最忌就再次温习下java和java web 和linux,好多东西要学,这几天没事情干就总结了这两个月实习学到的东西和补知识点。任重而道远啊。努力,今天看小说看到了一句话”匹夫而为百世师,一言二为天下法“,这气概,没得说啊,收到短信要交一篇3000字的论文,坑爹啊,我还得去找论文凑一篇交上去。努力吧,boys!!!