仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 494|回复: 9
打印 上一主题 下一主题

[学习教程] JAVA网页设计J2EE平台WEB组件开辟中怎样利用定制标签...

[复制链接]
活着的死人 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:24:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
专门做了这个例子;而java的这个例子好像就是为了教学而写的,很多教学目的的例子是不考虑优化、性能的。j2ee|web|组件开辟择要:
J2EEPLATFORMWEB组件开辟触及SERVLET和JSP手艺,SERVLET和JSP各有其优弱点。JVAVABEAN和定制标签对JSP的暗示才能供应了很好的扩大,年夜年夜进步了JSP的暗示才能,同时它们的引进使WEB开辟能够很好的举行合作,进步开辟效力,下降开辟本钱,同时进步了JSP页面的可读性、重用性、可保护性。本文将先容J2EE平台WEB组件开辟中怎样利用定制标签,次要先容开辟定制标签的意义,道理、步骤、在TOMCAT上的公布并给出一个典范的标签实例以加深了解和进步实战性。援用请保存作者和文章来历
关头词:
J2EE、SERVLET、JSP、WEB组件、定制标签。
1、为何要利用定制标签?
开辟过Servlet和JSP的人都晓得,从暗示层来看,Servlet和JSP是J2EE平台两中天生静态WEB内容的手艺,它们都能发生不异的了局,但它们接纳了分歧的机制来创建WEB组件。Sverlet是在逻辑中嵌进内容,并夹带服务器方处置逻辑,而JSP是在内容中嵌进逻辑。
JSP像HTML一样是标签化的,合适内容的暗示和形貌,但必要JAVA剧本才干处置暗示逻辑和营业逻辑,但是JAVA代码的嵌进年夜年夜下降了JSP页面暗示代码的可读性和可保护性,也倒霉于反复功效的可复用性。一样的Servlet是完成特定接口的JAVA类,它是用JAVA言语写的,是高度编程的,它合适处置暗示逻辑和营业逻辑,但在Servlet内到场暗示和形貌内容的页面代码,一方面使逻辑处置凌乱,可读性差,另外一方面也给暗示内容的保护带来倒霉。
JavaBean的引进很好的办理了JSP和Servlet面对的两难处境,使J2EE平台WEB组件的开辟很好的完成了内容和暗示逻辑、营业逻辑的分别。能够高度剥离JSP页面层的JAVA代码、营业逻辑条理的内容形貌和暗示代码。
但JavaBean存在后天的不敷,它只是可复用组件,自力于运转情况而包装了一些数据和营业逻辑功效,没法取得运转情况信息。
在JSP1.1和JSP1.2中接踵引进了定制标签这类机制,办理了JavaBean的这类缺点,从而完全办理了WEB组件开辟中的暗示和营业逻辑代码的分别,年夜年夜加强了代码的可读性、可保护性、可复用性。
2、JSP页面与定制标签之间的通信
在JSP1.1引进了包javax.servlet.jsp.tagext,定制标签时必要完成特定的接口或承继响应的类,个中Tag接口界说了JSP页面和标签处置器之间基础的通信合约,即通信的API接口。JSP标准中划定了WEB容器挪用这些办法处置它们通信的流程,从而完成对标签的性命周期的办理,当时序图以下:



3、定制标签的道理
1、定制标签运转所需的四个组件
定制标签必要开辟四个组件以确保其能一般运转,它们是:
TagName.class:一般称之为标签处置器,它是完成标签功效的JAVA类。它必需完成特定的JAVA接口,这些接口和笼统类在包javax.servlet.jsp.tagext中,完成对标签的性命周期的办理。
TaglibName.tld:界说一个标签库的XML文件。个中界说了标签库的称号、版本信息、形貌信息和包括的各标签的称号、对应的标签处置器,标签的属性等。
Web.xml:是每一个WEB使用程序的独一的部署形貌符文件(每一个WEB容器有多个WEB使用程序,但每一个WEB使用程序只要一个部署形貌符文件)。它是利用XML(ExtensibleMarkupLanguage)言语写的,形貌WEB使用程序可用的资本和相干的信息,一样平常它在WEB服务器启动时被加载到内存中。WEB服务器依此来调剂资本呼应用户的哀求。必需在Web.xml中注册定制标签库。
JspPage.jsp:是一个JSP页面,该页面利用在WEB使用程序形貌符文件中注册的标签库中的标签,完成特定的暗示功效。在JSP页面中利用某个标签库之间前,必定要导进标签库。
2、定制标签处置器完成的接口




以上是定制标签的条理布局图,定制标签能够经由过程完成个中任何一个接口大概承继任何一个笼统类来完成特定的暗示功效。一般利用甚么接口大概笼统类处决于开辟职员必需界说的办法所预期的性命周期。上面对图中的接口和笼统类分离举行先容。
javax.servlet.jsp.tagext.Tag接口:
Tag接口界说了标签处置器和挪用实例JSP页面之间基础的通信协定,假如选择完成该接口,请求完成以下界说的一切办法,如:setPageContext(PageContextpc)、setParent(Tagtag)、getParent(Tagtag)、doStartTag()、doEndTag()、release(),这些办法都是容器回调办法。完成Tag接口的标签的性命周期以下图所示。




javax.servlet.jsp.tagext.IterationTag接口:
由上述标签处置器完成接口的条理布局图可知IterationTag接口扩大了Tag接口,并且增添了分外的办法doAfterTag()。该办法使完成该接口的标签处置器可以屡次实行标签体注释。假如选择完成该接口,除要完成Tag中的一切办法外,还要完成doAfterTag(),使标签处置器可以屡次实行标签注释。完成IterationTag接口的标签的性命周期以下图所示。


javax.servlet.jsp.tagext.BodyTag接口:
BodyTag扩大了接口IterationTag接口,而且供应了屡次实行和修正标签注释的才能。如增添了办法setBodyContent(BodyContentbc)、doInitBody()。IterationTag和BodyTag经常使用于处置汇合对象中的数据完成。BodyTag接口的标签的性命周期以下图所示。


一样平常情形,用户能够依据实践情形选择地完成上述三个接口之一就可以满意必要。但经由过程完成上述接口开辟标签处置器要完成浩瀚中央法是很不便利并且事情量很年夜,同时功效也受限。不外用户宁神,JAVA生成的简便之美和开放特征是不会让人人扫兴的,为了简化用户的开辟和供应更多分外的功效,javax.servlet.jsp.tagext包还分外的供应了一些撑持类,如:
javax.servlet.jsp.tagext.TagSupport
javax.servlet.jsp.tagext.BodyTagSupport
javax.servlet.jsp.tagext.TagExtraInfo
个中TagSupport和BodyTagSupport都完成了Tag接口。TagSupport用于完成那些不必要利用标签体的的标签处置器;BodyTagSupport用于完成那些请求改动标签注释的标签处置器的标签。TagExtraInfo用于供应编译时标签的分外信息。

4、基础的定制标签的步骤
定制标签一般有五个步骤:1、编写标签处置器类文件;2、编写标签库形貌文件;3、部署标签库;4、向WEB使用程序注册标签库;5、导进和利用标签库。
上面分离加以复杂先容。
1、标签处置器类文件的编写:
像别的的JAVA组件编程一样,编写标签处置器只必要完成特定的接口就能够了,在上述定制标签的道理中已具体会商了怎样开辟标签处置器,在此不再多说。
2、编写标签库形貌文件:
标签库是一些标签的汇合,它们一般有必定的接洽。因为标签处置器的办法有良多是容器回调办法,编写完标签后,要向WEB容器供应关于标签的信息,才干在客户援用时,WEB容器晓得如何挪用响应的办法来处置客户的哀求。一般标签的信息存储在一个名叫TLD的标签库形貌文件中。TLD文件是用XML编写,很易了解。该文件一样平常包括标头信息、标签库界说信息、一个或多个标签订义信息。一个完全的TLD文件以下。
//标头信息
<?xmlversion="1.0"encoding="ISO-8859-1"?>
<!DOCTYPEtaglibPUBLIC"-//SunMicrosystems,Inc.//DTDJSPTagLibrary1.2//EN""http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
//标签库界说信息
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>customTags</short-name>
<description>Asetofmytaghandlers.</description>
//标签订义信息
<tag>
<name>tagname</name>
<tag-class>TagHandlerclassName</tag-class>
<attribute>
<name>attributename</name>
<required>true/false</required>
<rtexprvalue>true/false</rtexprvalue>
</attribute>
------
</taglib>
3、部署标签库:
因为标签库利用TLD文件来形貌的,因此部署标签库实践上就是公布TLD文件,一样平常它放在WEAR包的WEB-INFO文件夹下,即间接将TLD文件拷贝到WEB-INFO文件夹中。
4、向WEB使用程序注册标签库:
向WEB使用程序注册标签库实践上是向WEB使用程序指出标签库形貌文件TLD文件的路径,也就是在WEB.XML文件中指出标签库形貌文件的路径(在基于JAVA的WEB组件开辟中WEB.XML文件用于向使用程序注册资本信息)。即在个中增添以下语句。
<taglib>
//标签库援用称号
<taglib-uri>/customTags</taglib-uri>
//标签库形貌文件TLD路径
<taglib-location>/WEB-INF/customTags.tld</taglib-location>
</taglib>
5、导进和利用标签库:
如今在JSP页面中就能够导进和利用标签了,语法以下:
//导进标签库
<%@tagliburi="/customTags"prefix="custTag"%>
//援用标签
<custTag:tagname/>或<custTag:tagname>------<custTag:tagname/>

JSP页面界说的标签元素是怎样在WEB容器中找到对应的标签处置器的呢?从定制标签的步骤,我们不难绘出定制标签映照图(如图六所示),能够明晰看出在WEB容器中定制标签元素是怎样找到响应的标签处置器的。图六明晰地放映了定制标签的运转机制。


5、怎样在TOMCAT上公布
将编写好的标签处置器CLASS文件、标签库形貌文件、WEB.xml文件和WEB使用程序打包成WEAR组件,就能够公布到TOMCAT等WEB容器上。经解压文件目次相似如图七布局,




个中customTags.tld为客户定制标签库形貌文件,标签处置器类文件位于classes文件夹或包括标签处置器的JAR文件,WEB.XML将customTags.tld映照到WEB使用程序。JSP文件加中寄存援用定制标签的JSP页面文件。
6、典范定制标签的典范
在解说了开辟定制标签的基础道理、办法和步骤后,上面让我们经由过程一个完全的典范的例子来看在实践使用中怎样利用定制标签来封装罕见模块,以加强代码的可读性、可保护性、可复用性,供应编码效力。一样平常的WEB站点都有大批的旧事内容显现和平易近意查询拜访内容等重用性很高的功效模块,如新浪、搜狐等。上面我们看怎样用下面先容的办法来开辟旧事标签。
1、编写标签处置器类文件
旧事列表标签(用于显现旧事条目)
publicclassNewsListTagextendsTagSupport{
//属性
//对应的SETTER、GETTER办法
publicintdoStartTag()throwsJspException{
//处置从数据库中检索取得的旧事条目汇合和旧事显现格局
//输入标签体内容
try{
pageContext.getOut().print(sbOut.toString());
}catch(IOExceptione){
thrownewJspTagException("NewsListTag::IOError:"+e.getMessage());
}
returnSKIP_BODY;
}
privateResultSetgetRS()throwsSQLException,IOException{
//从数据库中检索旧事条目,并前往了局集
returnrs;
}
}
旧事内容标签(用于按指定的格局显现某条旧事的详细内容)
publicclassNewsContentTagextendsTagSupport{
//旧事条目标ID号属性
//对应的SETTER、GETTER办法
publicintdoStartTag()throwsJspException{
//从数据库中取得某条旧事的详细内容
//定制旧事显现的格局
//输入旧事内容。
try{
pageContext.getOut().print(sbOut.toString());
}catch(IOExceptione){
thrownewJspTagException("NewsListTag::IOError:"+e.getMessage());
}

returnSKIP_BODY;
}
privateResultSetgetRS()throwsSQLException,IOException{
//按旧事ID号从数据库中取得旧事的详细内容,并前往了局集
returnrs;
}
}
2、编写标签库形貌文件TLD(CustomTags.tld)
//标头信息
//标签库信息
<tag>
<name>newsList</name>
<tag-class>NewsListTag</tag-class>
//标签属性集
</tag>

<tag>
<name>newsContent</name>
<tag-class>NewsContentTag</tag-class>
//标签属性集
</tag>
3、部署标签库
将CustomTags.tld文件放在WEAR包中的WEB-INFO目次下。部署了局相似如图七。
4、向WEB使用程序注册标签库
在WEB.XML文件中增添以下语句:
<taglib>
<taglib-uri>/customTags</taglib-uri>
<taglib-location>/WEB-INF/customTags.tld</taglib-location>
</taglib>
5、导进和利用标签
上面就能够在JSP文件中导进定制的标签库和定制的标签了,语法以下:
<%@tagliburi="/customTags"prefix="customTags"%>//导进标签库
<customTags:newsListattribute-----/>//援用旧事列表标签
<customTags:newsContentattribute-----/>//援用旧事内容标签
6、运转效果
启动TOMCAT,在扫瞄器中输出响应的URL地点就能够看到相似新浪站点上的旧事条目页面,能够检察按必定内格局输入旧事条目。当想检察某条旧事的详细内容时,点击该条旧事,就在新的页面按界说的格局显现该条旧事的详细内容。运转步骤以下:
1启动TOMCAT,在地点栏中http://localhost:8080/tagexample/news/news.jsp,以看到旧事条目界面,扫瞄旧事题目.,效果如图八.



2点击旧事条目(旧事题目),能够扫瞄响应的旧事内容,效果如图九.


认真的记,感觉很紧张根本就没有时间和能力,来对技术知识点进行思考。这样课下就只能对知识进行简单的理解,其实简单的理解就是记忆课堂上讲的知识点,
冷月葬花魂 该用户已被删除
沙发
发表于 2015-1-20 23:57:05 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
柔情似水 该用户已被删除
板凳
发表于 2015-1-30 08:09:28 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
爱飞 该用户已被删除
地板
发表于 2015-2-6 08:59:17 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
谁可相欹 该用户已被删除
5#
发表于 2015-2-6 21:52:06 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
admin 该用户已被删除
6#
发表于 2015-2-18 20:51:47 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
只想知道 该用户已被删除
7#
发表于 2015-2-26 20:12:08 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
灵魂腐蚀 该用户已被删除
8#
发表于 2015-3-8 17:12:40 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
透明 该用户已被删除
9#
发表于 2015-3-16 07:08:40 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
深爱那片海 该用户已被删除
10#
发表于 2015-3-22 21:08:17 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-28 17:23

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表