自学建立网站,wordpress免费会员中心,宁波网站建设设计至诚服务,it外包公司上海需求#xff1a;多个JSP页面可能需要使用一些相同的信息 例如:导航栏、标题等。
目标#xff1a;提高这些相同信息的代码的复用性。
方法#xff1a;将这些相同的元素形成一种特殊的文件#xff0c;以便所有页面都可以使用#xff0c;即#xff1a;Tag文件 1、Tag对…需求多个JSP页面可能需要使用一些相同的信息 例如:导航栏、标题等。
目标提高这些相同信息的代码的复用性。
方法将这些相同的元素形成一种特殊的文件以便所有页面都可以使用即Tag文件 1、Tag对比include
include指令标记% include file“...” %
include动作标记jsp:include page“...” /
include缺点有些情况下处理的是JSP文件而用户可能通过该文件所在的Web服务目录直接访问到这个JSP文件。
当我们不希望这些文件被用户访问到时需要采用新的办法Tag文件——可被JSP动态加载但不能被用户访问。
2、Tag文件的结构
*.tag文件 结构 近似JSP的结构Tag特殊指令标记
AddSum.tag
p这是一个Tag文件负责计算1100内的奇数之和:/p
% int sum0, il ; for(il;il00;i) { if(i%21)
sumsumi ; }
out.println(sum); %
3、Tag文件的保存
Tag文件的位置必须是Web服务目录\WEB-INF\tags
比如:webapps\webtest\WEB-INF\tags
其中的WEB-INF和tags部是固定的子目录名称而tags下的子目录名称可由用户给定。
4、Tag标记与Tag文件的使用
步骤1引入标记库对tag的声明在JSP页面中使用taglib指令标记引入tag标记库。 格式 % taglib tagdir“tag标记的位置” prefix“前缀” %
例如 % taglib tagdir“/WEB-INF/tags” prefix“beijing” % % taglib tagdir“/WEB-INF/tags/tags2” prefix“dalian” %
步骤2在JSP页面中使用Tag标记来使用Tag。
格式前缀: Tag文件名/ 或前缀: Tag文件名
标记体/前缀: Tag文件名
例如beijing: AddSum/
标记体
JSP页面在调用Tag过程中可通过标记体动态地向Tag传送信息。
在Tag中通过jsp:doBody/来处理JSP传递过来的标记体。 默认情况下标记体是一些文本数据。
%page contentTypetext/html pageEncodingUTF-8%
%taglib prefixlook tagdir/WEB-INF/tags %
html
look:Show北京奥运会圆满成功 /look:Show look:Show I Love this Game!/look:Show
look:Show欢迎您!/look:Show
/html Show.tag
body bgcoloryellowp % int size1;
for(int i1;i3;i)
{
sizesize1;
% font size%size % jsp:doBody / /font
% }% p
/body
5、Tag文件中的常用指令
作用与JSP文件类似Tag文件中也有一些常用指令这些指令将影响Tag文件的一些属性和行为。
Tag文件中经常使用的指令有:
1. tag
2.include
3.attribute
4.variable
5.taglib
tag指令
作用类似于page指令指定Tag某些属性的值。
格式 % tag 属性1“值1” 属性2“值2”...... %
或 % tag 属性1“值1” % % tag 属性2“值2” % ......
可设置的属性有body-content language import pageEncoding
body-content属性
作用定义JSP调用Tag时标记体的格式。
格式 % tag body-content“值” %
可取empty/tagdependent/scriptless三个值
empty——JSP不能使用标记体
tagdependent——标记体内容按纯文本处理
scriptless——标记体中不能有Java程序片。
language属性定义Tag使用的脚本语言同JSP一样目前只能设置为“Java”无需设置。
import属性引入Java核心包的类。
pageEncoding属性指定Tag文件的字符编码默认是ISO-8859-1。
include指令
同JSP中include指令类似回顾JSP的include指令。
% include file“filename” %
attribute指令
作用实现JSP向Tag传送数据。
格式在Tag中
% attribute name“对象名字” required“true” type“对象类型” %
在引用Tag的JSP中前缀: Tag文件名字 对象名字“对象的引用” /
或前缀: Tag文件名字 对象名字“对象的引用” 标记体
/前缀: Tag文件名字
例如 tag中定义% attribute name“length” required“true% JSP中代码 beijing: AddSum length“1000” /
注意1. 传送的是一个对象的引用。
2. name属性是必须的对应传送对象的名字。
3. type属性是对象的类型必须带有包名如“java.util.Date”不能简写成“Date”。默认值为java.lang.String类型。
4. required属性是可选的默认值为false为true时JSP页面必须在标签中带有指定name属性的对象。
5. tag中不可再定义与name具有相同名字的变量否则会使attribute对象失效。
variable指令
作用实现Tag向JSP返回数据。
格式1.在Tag中首先声明
% variable name-given“对象名字” variable-class“对象类型” scope“有效范围” %
2.然后调用jspContext内置对象的setAttribute(将对象存储到jspContext中以便JSP调用。如
jspContext.setAttribute(“time”, new Date());
3.那么在JSP中可以直接通过对象名来使用这个对象。如
int yeartime.getYear()1900
该代码使用Date的getYear()方法将Tag传送的time对象中记录的时间年赋给year变量。
注意1. 返回的是一个对象。
2. JSP中不可再定义与name具有相同名字的变量否则会出现编译错误。
3. scope定义了variable在JSP中的使用范围可取值为AT_BEGIN、NESTED和AT_END。AT_BEGIN: JSP页面一旦使用Tag就可以使用variable给出的对象。
NESTED: JSP页面只可以在Tag标记的标记体中使用variable给出的对象。
AT_END: JSP页面在Tag标记结束后才可以使用variable给出的对象。
6、Tag标记的嵌套
当我们使用Tag标记时可以带有标记体标记体还可以是一个Tag标记这就实现了Tag标记的嵌套。Tag标记中的标记体由Tag文件的jsp:doBody/标记负责处理而在Tag文件中jsp:doBody /标记被替换成对“标记体”进行处理后所得到的结果。
7、JSP引擎与Tomcat服务器
将安装JSP引擎的计算机称作一个支持JSP的Web服务器。这个服务器负责运行JSP并将运行结果返回给用户。
JSP的核心内容之一就是编写JSP页面,JSP页面是Web应用程序的重要组成部分。一个简单Web应用程序可能只有一个JSP页面,而一个复杂的Web应用程序可能由许多JSP页面、Javabean和servlet组成。当用户请求Web服务器上的JSP页面时JSP引擎负责运行JSP并将运行结果返回给用户。 attribute指令