仓酷云
标题:
JAVA网站制作之JSP中自界说标志符的利用
[打印本页]
作者:
只想知道
时间:
2015-1-18 11:12
标题:
JAVA网站制作之JSP中自界说标志符的利用
C#是盗用了Java的源代码,仿照开发的,原因是Java是开源的啊,盗了也白盗,还有一点,开发C#语言的团队是就是开发Java语言的团队,是微软重金挖过去的啊js择要
在JSP中有一种机制,可让你在JSP页面中拔出与HTML相似的标志。本文先容JSP定制标志的基础观点和组成,和怎样开辟和使用JSP定制标志。
关头字
JSP,XML,TLD,标志符
甚么是标志
利用HTML言语我们能够如许往编纂我们的网页:
<HTML>
<HEAD>
<TITLE>
HELLOWORLD
</TITLE>
</HEAD>
<BODY>
HELLOWORLD
</BODY>
</HTML>
在这里我们把</HEAD>,<TITLE>,<BODY>称为标志。HTML标志(HTMLMarkup)是HTML文档的把持言语,用于指定扫瞄器显现和打印文档的体例.它是用小于号"<"和年夜于号">"括起来的短语和标记,如<Html>、</Body>等。很多HTMl标志以成对的体例呈现,如<TITLE></TITLE>、<Body></Body>等。在JSP中我们也能够定制本人的标志,以供JSP页面利用,以下例所示
<!―login.jsp-->
<%@tagliburi="/tlds/taglib.tld"prefix="tagclass"%>
<html>
<head>
<title>login</title>
</head>
<body>
<tagclass:loginwidth="200"height="100">
</tagclass:login>
</body>
</html>
在上例中</tagclass:login>就是一个JSP定制标志符。widtht、height是这个标志的属性。<%@tagliburi="/tlds/taglib.tld"prefix="tagclass"%>是一个标志库界说指令,在稍后我们将会会商。在JSP中定制标志符,本色上就是以标志的情势封装了一个俱有自力功效的Java类。标志的利用削减了间接嵌进JSP页面的Java代码,便利了页面的结构,而且有益于代码的复用,进步了开辟的效力。
JSP服务器剖析标志的历程
那末当一个标志被嵌进JSP页面后,JSP服务器是怎样对这个标志举行剖析的呢?各对象的寄义以下所示:
Client:暗示客户端。
JSP-Server:JSP服务器。
JSP-Page:JSP页面。
TLD: 标志库形貌文件,界说标志和标志的各类属性和处置文件等。
TagClass标志处置程序
当一个用户会见一个JSP页面时,这个哀求被发送到JSP服务器,JSP服务器会依据这个哀求往挪用响应的页面,假如这个页面中有自界说的标志,JSP服务就会依据页面指令<%@taglib>往会见TLD失掉处置程序的相干信息,接着挪用该处置程序的机关器办法,启动标志符处置程序,并读取标志符的属性和响应值。对每一个没有设置属性的,挪用响应的set办法。当标志符第一次利用时,它的任何属性都不会做过设置,因而对每一个属性都挪用set办法。属性设置完今后,JSP服务器挪用处置程序的doStartTag(),然后再挪用doEndTag()办法。最初JSP服务器会持续处置剩下的页面,在页面开头挪用release()办法,清算占用的一切资本。
TLD文件
TLD(TLD:TagLibraryDescriptor标志库形貌符)文件,尺度的XML格局的标志界说文件,被用来寄存标志符的信息,上面就是一个典范的TLD文件。
<?xmlversion="1.0"encoding="ISO-8859-1"?>
<!―XML的版本及其字符集-->
<!DOCTYPEtaglib
PUBLIC"-//SunMicrosystems,Inc.//DTDJSPTagLibrary1.1//EN"
"
http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd
">
<!―文档范例界说-->
<taglib>
<!―此标志申明我们入手下手形貌一个标志库-->
<tlibversion>1.0</tlibversion>
<!―标志库的版本-->
<jspversion>1.1</jspversion>
<!―所利用的JSP的版本-->
<shortname>tagclass</shortname>
<!―缺省的称号-->
<tag>
<name>login</name>
<!―标志的称号-->
<tagclass>
tagclass.login.login
<!―处置这个Tag的响应的类的称号-->
</tagclass>
<info>
<!―对本标志符的形貌-->
</info>
<attribute>
<!―入手下手界说标志的属性-->
<name>height</name>
<!―属性的称号-->
<required>true</required>
<!―暗示这个属性是否是必需的-->
<rtexprvalue>true</rtexprvalue>
<!―暗示这个属性是不是能够用JSP的程序段的了局输入-->
</attribute>
<attribute>
<name>width</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
在这个TLD文件中界说了只要一个标志符的标志符库,这个名为login的标志符会挪用一个Applet以考证用户的正当性。处置这个标志的类就是tagclass.login.login。width、height是这个标志的两个属性。属性是在利用标志符时作为参数发送的值。我们能够在下面的示例中增添几个标志,也能够为每一个标志增加几个属性。我们开辟标志符库时纷歧定非要重新入手下手,本人编写一个全新TLD。我们可使用某个集成的开辟的情况,也能够修正下面的例子。
TagLib指令
那末当JSP服务器在剖析一个标志符时,它是怎样界说一个标志库的呢?这就是TagLib指令的次要义务。
Taglib指令
界说一个标志库和其自界说标志的前缀.
JSP语法
<%@tagliburi="URIToTagLibrary"prefix="tagPrefix"%>
例子
<%@tagliburi="/tlds/taglib.tld"prefix="tagclass"%>
<html>
<head>
<title>login</title>
</head>
<body>
<tagclass:loginwidth="200"height="100">
</tagclass:login>
</body>
</html>
形貌
<%@taglib%>指令声明此JSP文件利用了自界说的标志,同时援用标志库,
也指定了他们的标志的前缀。你必需在利用自界说标志之前利用<%@taglib%>指令。
属性
uri="URIToTagLibrary":UniformResourceIdentifier(URI)依据标志的前缀对自界说的标志举行独一的定名,URI能够是一个绝对或相对的路径。
prefix="tagPrefix":在自界说标志之前的前缀。如上例中的</tagclass:login>
标志符的处置程序(Taghandle)
我们仍是以一个例子来看下怎样完成一个Taghandle。起首是看一下它的类图:
让我们再看一下它的代码:
packagetagclass.login;
importjavax.servlet.jsp.tagext.TagSupport;
importjavax.servlet.jsp.*;
importjava.io.*;
publicclassloginextendsTagSupport
{
publiclogin()
{
super();
}
publicintdoStartTag()throwsJspTagException
{
JspWriterout=pageContext.getOut();
try
{
out.println("<APPLETCODEBASE=applet/login/CODE=login.classwidth=200height=100></APPLET>");
}
catch(Exceptione)
{
}
returnSKIP_BODY;
}
publiccintdoEndTag()throwsJsptagException
{
returnEVAL_PAGE;
}
publicvoidrelease()
{
super.release();
}
publicvoidsetWidth(Stringlanguage)
{
this.width=width;
}
publicStringgetWidth()
{
returnthis.width;
}
publicvoidsetHeight(Stringheight)
{
this.height=height;
}
publicStringgetHeight()
{
returnthis.height;
}
privateStringwidth;
privateStringheight;
}
从以上我们能够看出,完成一个复杂的标志符处置程序有几个请求:①增添一个类,使之承继java.Servlet.jsp.tagext.TagSupport类。这个类供应了java.Servlet.jsp.tagext.Tag接口所请求的一切的办法。别的,还必要利用一些基础的API,使JSP容器可以挪用我们本人供应的标志符处置程序。②必需为每一个标志符属性分离创立一个get<attribute>和set<attribute>办法,JSP容器必要利用这些办法处置程序传送参数。③要为标志符处置程序创立一个机关器和自毁器。JSP必要利用机关器启动处置程序。自毁器是在realease()办法中界说的。在处置程序的性命周期停止时,必要挪用自毁器开释所占用的资本。④创立两个名为doStartTag()和doEndTag()的办法,实行详细的处置和输入举措。这两个办法是在处置自界说标志符的肇端地位和停止地位挪用的。它们的前往值是在TagInterface里界说的静态int,这几个静态值分离是:
SKIP_BODY隐含0:跳过了入手下手和停止标签之间的代码。
EVAL_BODY_INCLUDE隐含1:将body的内容输入到存在的输入流中
SKIP_PAGE隐含5:疏忽剩下的页面。
EVAL_PAGE隐含6:持续实行上面的页
固然标志符也有它本人的弱点。很不便利的封装历程,无限的功效。关于一些不太庞大和功效单一的逻辑形貌,必要传送的参数请求不高时,利用JSP标志,要便利的多。关于年夜多半的贸易逻辑使用,仍是利用bean要好的多,也宜于servlet把持。
附录:文章中所用示例的完全代码
JSP代码:login.jsp
<%@tagliburi="/tlds/taglib.tld"prefix="tagclass"%>
<html>
<head>
<title></title>
</head>
<body>
<tagclass:loginwidth="200"height="100">
</tagclass:login>
</body>
</html>
标志符形貌库:taglib.tld
<?xmlversion="1.0"encoding="ISO-8859-1"?>
<!DOCTYPEtaglib
PUBLIC"-//SunMicrosystems,Inc.//DTDJSPTagLibrary1.1//EN"
"
http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd
">
<taglib>
<tlibversion>1.0</tlibversion>
<jspversion>1.1</jspversion>
<shortname>tagclass</shortname>
<tag>
<name>login</name>
<tagclass>
tagclass.login.login
</tagclass>
<info>
</info>
<attribute>
<name>height</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>width</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
标志符处置程序:login.java
packagetagclass.login;
importjavax.servlet.jsp.tagext.TagSupport;
importjavax.servlet.jsp.*;
importjava.io.*;
publicclassloginextendsTagSupport
{
publiclogin()
{
super();
}
publicintdoStartTag()throwsJspTagException
{
JspWriterout=pageContext.getOut();
try
{
out.println("<APPLETCODEBASE=applet/login/CODE=login.classwidth=200height=100></APPLET>");
}
catch(Exceptione)
{
}
returnSKIP_BODY;
}
publiccintdoEndTag()throwsJsptagException
{
returnEVAL_PAGE;
}
publicvoidrelease()
{
super.release();
}
publicvoidsetWidth(Stringlanguage)
{
this.width=width;
}
publicStringgetWidth()
{
returnthis.width;
}
publicvoidsetHeight(Stringheight)
{
this.height=height;
}
publicStringgetHeight()
{
returnthis.height;
}
privateStringwidth;
privateStringheight;
}
标志符处置程序中所利用的Applet:login.java
importjava.awt.*;
importjava.awt.event.*;
importjava.applet.*;
publicclassloginextendsAppletimplementsActionListener
{
privateStrings_username;
privateStrings_userpassword;
privateButtonb_ok;
privateButtonb_register;
privateLabell_username;
privateLabell_userpassword;
privateTextFieldt_username;
privateTextFieldt_userpassword;
privateGridLayoutg_gridlayout;
publicvoidinit()
{
b_ok=newButton("ok");
b_register=newButton("register");
l_username=newLabel("name");
l_userpassword=newLabel("password");
t_username=newTextField();
t_userpassword=newTextField();
b_ok.addActionListener(this);
b_register.addActionListener(this);
g_gridlayout=newGridLayout(3,2,10,10);
this.setLayout(g_gridlayout);
//this.setBackground(Color.blue);
add(l_username);
add(t_username);
add(l_userpassword);
add(t_userpassword);
add(b_ok);
add(b_register);
}
publicvoidactionPerformed(ActionEventev)
{
Strings_label=ev.getActionCommand();
if(s_label.equals("ok"))
{
t_username.setText("name");
}
if(s_label.equals("register"))
{
t_userpassword.setText("password");
}
}
publicvoidpaint(Graphicsg)
{
}
}
C#是盗用了Java的源代码,仿照开发的,原因是Java是开源的啊,盗了也白盗,还有一点,开发C#语言的团队是就是开发Java语言的团队,是微软重金挖过去的啊
作者:
蒙在股里
时间:
2015-1-29 13:15
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
作者:
乐观
时间:
2015-2-1 18:37
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
作者:
老尸
时间:
2015-2-6 00:00
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
作者:
简单生活
时间:
2015-2-9 03:07
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
作者:
精灵巫婆
时间:
2015-2-10 02:07
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
作者:
柔情似水
时间:
2015-2-28 14:43
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
作者:
变相怪杰
时间:
2015-3-9 23:51
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
作者:
不帅
时间:
2015-3-17 03:08
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
作者:
爱飞
时间:
2015-3-17 03:09
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
作者:
活着的死人
时间:
2015-3-23 17:14
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2