|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
有了这样一个呼声:让java代替C语言成为基本语言。这些足以说明java简单易学的这个优点。其次,java的功能强大,前面我也提到了,EJB3.0的推出使java成为了大型项目的首选。js|条记JSP2.0标签进修条记
1.申明
本文档是进修tomcat中例子的条记,并没有参考响应的申明文档,因而不克不及包管本文概念的准确性。假如有不合错误的地方,无妨email至8280338@tzenet.com,人人配合前进。
2.JSP2.0标签利用办法
JSP2.0中标签的利用由多个部分构成:
(1)WEB_INF/web.xml中增加标签援用
(2)标签的完成,多是class也多是webtemplet
(3)在jsp文件中增加援用
在实践利用中,剖析jsp2.0标签能够先从jsp文件动手,然后再剖析web.xml及响应的标签库文件。
2.2基础标签的利用办法
2.2.1jsp文件中的标签援用及利用办法
以下是一个复杂的jsp文件:
<%@taglibprefix="mytag"uri="/WEB-INF/jsp2/jsp2-example-taglib.tld"%>
<html><body><mytag:helloWorld/></body></html>
申明:
(1)起首以<%@taglibprefix="mytag"uri="…"%>申明标签前缀及该前缀援用的标签地点路径,在这个例子中uri值是一个绝对路径(当地路径),即以后项目根目次下WEB-INF/jsp2/jsp2-example-taglib.tld。假如利用的是当地路径就不必要在web.xml中设置路径映照了;
(2)指定了标签前缀后,在jsp页面的body内就能够利用这个前缀来援用标签库中的指定标签了,如<mytag:helloWorld/>,就是援用mytag所指定的标签库中的helloWorld标签。
2.2.2web.xml中的设置
假如在上述例子中利用的不是当地路径,那末就必要在web.xml中设置路径转换,如利用:<%@taglibprefix="mytag"uri="http://mytaglib/myTestTags1"%>来援用标签库,那末就必要在web.xml文件的jsp-config节点中增加以下设置:
<taglib>
<taglib-uri>http://mytaglib/myTestTags1</taglib-uri>
<taglib-location>/WEB-INF/jsp2/jsp2-example-taglib.tld</taglib-location>
</taglib>
JSP注释器会将http://mytaglib/myTestTags1依据web.xml中的设置转化为当地路径。固然<taglib-uri>中文本能够是任何值,但不克不及和别的的设置抵触,以是在计划时最好加上前缀,如:http://mytaglib等。
2.2.3标签库中的设置
在标签库中的设置实践上就是设置对完成类的援用,JSP注释器会依据jsp文件中对标签的援用,在标签库中找到响应的标签,然后再依据标签中的界说挪用详细的完成类,本例中在jsp文件中对标签的援用:<mytag:helloWorld/>,即援用了helloWorld这个标签,这个标签在标签库中的界说以下:
<tag>
<description>OutputsHello,World</description>
<name>helloWorld</name>
<tag-class>jsp2.examples.simpletag.HelloWorldSimpleTag</tag-class>
<body-content>empty</body-content>
</tag>
该标签由四个部分构成:
(1)description:形貌该标签的感化
(2)name:标签的名字,该名字在jsp文件利用,相称由类名;
(3)tag-class:标签的完成索引,相称于类的完成;本例索引指定jsp2.examples.simpletag.HelloWorldSimpleTag,是一个java的类文件,应放在WEB_INF/classes/jsp2/examples/simpletag目次下的HelloWorldSimpleTag.class文件;
(4)body-content:在jsp文件中利用标签时,标签中的内容种别,本例的值是empty,暗示helloWorld这个标签中没有内容。假如在jsp页面中在该标签中到场了内容,如<mytag:helloWorld>hell</mytag:helloWorld>,页面会报错,固然<mytag:helloWorld></mytag:helloWorld>是不会错的(注重不克不及有空格局)。
2.2.4类的完成
类HelloWorldSimpleTag完成以下:
packagejsp2.examples.simpletag;
importjavax.servlet.jsp.JspException;
importjavax.servlet.jsp.tagext.SimpleTagSupport;
importjava.io.IOException;
publicclassHelloWorldSimpleTagextendsSimpleTagSupport{
publicvoiddoTag()throwsJspException,IOException{
getJspContext().getOut().write("Hello,world!");
}}
申明:
(1)jsp标签挪用的类一样平常承继于SimpleTagSupport
(2)SimpleTagSupport中完成了getJspContext()这个办法,这个办法能够猎取指向jsp页面的输入流。
(3)getJspContext().getOut().write("Hello,world!"):输入Hellow,World!
2.3含有变量的tag设置
2.3.1jsp文件中的标签援用及利用办法
以下是援用了带有变量标签的jsp页面:
<%@taglibprefix="mytag"uri="/WEB-INF/jsp2/my_taglib.tld"%>
<html><body>
<mytag:repeatnum1="15">
Invocation${count}of5<br>
</mytag:repeat>
</body>
</html>
申明:
(1)<mytag:repeatnum="15">,输出参数的传进办法:即在标签中将要传进的参数做为标签的一个属性,并指定其属性值,本例中传进参数num1,它的值为15;
(2)${count},在页面中显现输入参数的值,count是输入参数的名字
2.3.2标签库中的设置
标签库中的响应设置以下:
<tag>
<description>Repeatsthebodyofthetagnumtimes</description>
<name>repeat</name>
<tag-class>jsp2.examples.simpletag.RepeatSimpleTag</tag-class>
<body-content>scriptless</body-content>--标签内容是剧本
<variable>
<description>Currentinvocationcount(1tonum)</description>
<name-given>count</name-given>--输入参数申明
</variable>
<attribute>
<name>num</name>--输出参数申明
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
该标签由六个部分构成:
(1)description:见上文
(2)name:见上文
(3)tag-class:见上文
(4)body-content:这个例子的值是scriptless,暗示标签中的内容是剧本
(5)variable:输入参数,在jsp中利用${count}来援用这个输入变量的值,输入参数名并非强迫性的,这里只是一个商定,即请求repeat完成类最初有count这个输入参数,以便在jsp页中便利援用,假如没有也不会报错;
(6)attribute:输出参数,在jsp中利用<mytag:repeatnum="5">来设置这个输出参数num,这个参数名是强迫性的,即要在repeat完成类中有setNum这个办法,假如没有响应的办法jsp页面会报错;
2.3.3类的完成
packagejsp2.examples.simpletag;
importjavax.servlet.jsp.JspException;
importjavax.servlet.jsp.tagext.SimpleTagSupport;
importjava.util.HashMap;
importjava.io.IOException;
publicclassRepeatSimpleTag1extendsSimpleTagSupport{
privateintnum;
publicvoiddoTag()throwsJspException,IOException{
for(inti=0;i<num;i++){
getJspContext().setAttribute("count",String.valueOf(i+1));
getJspBody().invoke(null);
}}
publicvoidsetNum(intnum){
this.num=num;}}
申明:
(1)getJspContext().setAttribute界说了输入到jsp页面的输入参数count,这里的count是一个字符串,它的值能够不与标签库中variable界说不异,如,它能够是len,固然在jsp援用时应以这里为准,即便用${len}援用;
(2)setNum(intnum)办法:吸收输出参数,这个办法定名划定规矩为set+输出参数名,该办法带一个参数,用于吸收输出参数的值。
2.4函数标签的界说办法
2.4.1jsp文件中函数标签援用及利用办法
<%@taglibprefix="my"uri="/WEB-INF/jsp2/jsp2-example-taglib.tld"%>
<html>
<body><span>${my:caps(“HELLOWORLD”)}</span></body>
</html>
申明:
(1)函数标签的援用比别的标签的援用都要复杂,它的援用与初级言语中的函数挪用办法相似,间接在函数名后的括号前面输出响应的参数值便可,不必要另加用标签的别的属性来讲明输出参数。
2.4.2函数标签在标签库中设置
<function>
<description>Convertsthestringtoallcaps</description>
<name>caps</name>
<function-class>jsp2.examples.el.Functions</function-class>
<function-signature>java.lang.Stringcaps(java.lang.String)</function-signature>
</function>
申明以下:
(1)这类办法的界说包括在function元素中;
(2)name:函数名
(3)function-class:该函数真实的完成class,本例中,caps函数是由WEB_INF/classes/jsp2/examples/el路径中的Functions类来完成的;
(4)function-signature:申明函数的输出及输入参数范例,不必指明参数名。
2.4.3类的完成
packagejsp2.examples.el;
importjava.util.*;
publicclassFunctions{
publicstaticStringcaps(Stringtext){
returntext.toUpperCase();
}}
申明:
(1)函数标签完成类就是一般的类,它不必要从某个父类承继;
(2)函数标签完成类中必需有响应的办法与标签库中响应的函数字义不异(包含函数名,输出参数个数及输出参数范例,函数的前往值);
2.5标签模板
标签模板的特性:
(1)没有tld文件在jsp中经由过程<%@taglibprefix="tags"tagdir="/WEB-INF/tags"%>援用,即便用tagdir取代了uri,这里的tags是一个文件夹,不是文件,在该文件夹中包括了所需的标签模板;
(2)经由过程以下体例传进参数值:
<tags:displayProducts>
<jsp:attributename="normalPrice">....</jsp:attribute>
<jsp:attributename="onSale">....</jsp:attribute>
.....
</tags:displayProducts>
(3)displayProducts是与/WEB-INF/tags目次中的某个文件名;
(4)经由过程<jsp:attributename="….">来赋值
(5)标签模板是一个纯文本文件,相似于html文件,而不必要经由过程java的类来完成标签的界说;
(6)团体以为标签模板的次要感化重在排版,而别的标签的感化重在功效的完成;自己不盘算在今后的开辟利用标签模板,因而本文不再进一步剖析标签模板。
微软什么都提供了。你可以试想一下,如果你是新手,你是希望你点一下按钮程序就能运行那,还是想自己一点一点的组织结构,然后打包发部,调错再打包...... |
|