以前,我们已经提到,JSP程序都是模块,并且具有强大的表达-请求(presentation-request)功能。建立一个完美的数据库访问是一个具有挑战的过程,而JDBC接口能够很好地完成这一过程。然而,嵌入于JSP代码中的JDBC代码,与SQL命令嵌入在JDBC一样,可以充分利用JSP的功能,为客户端建立一个整洁而简便的API。为了达到这一目的,我们可以考虑到使用JSP操作来建立数据库接口组件。
完美的JSP设计模式是Model-View-Controller (MVC)。传统三层体系为:Model为程序逻辑和数据;View为查看;以及Controller为请求处理。遵循这一模型,一个JSP程序包含客户端-服务器“对话框”的每一“行”的页面。在一个典型的程序中,你可以看到一个查询页面,一个验证页面,一个数据库插入页面,一个数据库更新页面,等等。
在上一篇的文章中,我们讨论到如何在每一页面中嵌入JDBC,以保证程序的结构更加合理。然而,建立可执行的SQL命令,正如变量通过JDBC命令而传递一样,也有可能会增加程序的复杂性。
JDBC设计的JSP操作
JSP数据库操作的另一方法是,在不使用JDBC的情况下为数据库建立一些操作的集合。使用这种方法,你可以得到两种好处:第一,你可以消除使用JDBC的必要,这就使得很多工作得以简化;第二,你的设计和代码的组织更加合理(比如可读性,灵活性,以及可维护性)。
你仍然需要一些驱动程序,但你首先简化以上的操作。JSP程序中的操作都是一些逻辑块,通常被其它的JSP程序开发者编写和利用,但你可以把它们当成子程序来使用。使用JSP操作的意义是标准化某些功能,以及最大程度地减少嵌入在JSP的Java代码数量。
JSP提供了一套标准扩展的类。通过这些类,你可以通过一个标签管理器器(tag handler)定义一个操作。这里有两个JSP定义的Java接口:Tag接口和BodyTag接口,分别是由TagSupport类和BodyTagSupport类执行。
你可以建立通用JSP用途的一个标签库,并且你也可以执行标签管理器(tag handler)以扩展类的支持。以下是实现这些过程的步骤。
首先,执行一个标签管理器的类:
packagecom.myactions;
(import statements go here)
public class MyActionTag extends TagSupport {
...
}
接着,编译这段代码,并将类文件放置在程序的类库中。然后,你将需要一个Tag Library Descriptor (TLD)文件,这是一个XML文件,以匹配你的操作名称和相应的标签管理器的类。
<tag>
<name>MyAction</name>
<tagclass>com.myactions.MyActionTag</tagclass>
<bodycontent> (whatever) </bodycontent>
<attribute>myData</attribute>
</tag>
</tag>
相关的Trialware
更多Trialware
假设你已经建立一个名为MyAction的操作,这是一个与com.myactions.MyActionTag类匹配的TLD。TLD文件必须位于程序的TLDs路径。
当你从一个JSP页调用操作时,TLD告诉JSP正确的类以使用操作。这就带来极大的方便,而且只需要少量的代码。
但是,从何引入SQL?首先,你需要建立具有连接功能的数据库访问。你可以使用javax接口来完成,而javax可见于JDBC 2.0 Optional工具箱。JDBC 2.0的javax.sql.DataSource类提供了你所需要的连接。
此时,SQL位于什么地方?它在bean中。你可以使用JDBCcreateStatement和PreparedStatement在bean中建立一个方法。将这一方法成为一个公共的Vector,并正确地将你的SQL声明传递到这一方法。
总结
你的数据库bean执行一个嵌入在操作体的SQL语句,你可以传递一个语句给SQL语句,或者使用它来执行一个预先的操作。可以通过标签管理器来执行你的操作。由于JDBC被嵌入于库代码中,你将不能在JSP程序中明确地使用它。
初次使用这种方法会觉得它比JDBC中的嵌入SQL,以及JSP中的嵌入JDBC更加复杂,但是,你建立SQL操作并将它们存放在一个TLD,你只需做一次,在所有的JSP程序中就可以访问这些操作。这就是这种方法的优点。
下一次,我们将会讲述到JSP页和会话(sessions)之间的数据传递。
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]