标签库完成复杂的后台处理功能的JSP示例

  次阅读 作者:智能小宝 来源:互联网 2016-03-01 10:47 我要评论(0)

JSTL标签是SUN带头与apache社区合作的产品,可惜从一出现就已经是一个过时的技术。SUN的软件架构师似乎缺乏从顾客角度考虑技术取向的能力,与微软相比差之千里。就标签技术而言,它的目的是令菜鸟中的菜鸟变得可以写JSP,还是令一般程序员写JSP显得更方便,更好管理?显然,SUN的那位笨蛋架构师没有想明白这个道理(越是看得多它的文档介始,越是觉得那个家伙是个大笨蛋),把SUN数千名天才工程师的才智白白浪费了。

所有人都已经知道,JSP出现的目的就是为了让程序员更方便地写简单的servlet,复杂的多功能的servlet是不容易用JSP实现的。而JSP希望让菜鸟写java动态页面的目的并没有达到,这条,还不如ASP/PHP。在JSP中散布底层业务逻辑既不便于对象组织,也不但于代码管理,非常低效。这是发展出javaBean和标签技术的原因;而JSTL呢,它的基本客户逻辑竟然是为了帮助使用者更方便地把底层代码散布在JSP上!?包括数据库连接?!所以这东西是一个新的技术实现落后目标的产品,面对市场需求整整慢了一拍。

唯一有点价值的是它的循环逻辑,这条还是很有用的。只不过能够实现的不止它一个,struts.logic标签就是很好用的一种,而且不用指向http:/sun.xxxx/core什么的,事实上JSTL能够提供的struts:logic也能够提供。实际上struts几个标签库中也就logi,有点价值,bean也可以,其他的html是纯粹和FormBean为核心的MVC设想框架提供的。即使这样,就实用性而言,strutslib仍比sun实用得多。

struts标签库不能很好地面向数据对象,这是它的不足,hanva标签就是为了补充这个不足。结合struts的logic库,使用hanva标签可以达到在jsp中声明和接收变量,可以实现多种逻辑,可以直接从底层获得持久性非持外性的数据对象,处理并输出——一个程序大致也就只有这些东西做的。特殊的东西再特殊处理,直接完全使用标签调用下层服务daemon程序完成绝大部分功能,已经可以做到了。

下面的论坛示例删除程序是这样的一个功能,可以处理任何的实现了hanvaDAO接口规范的表数据的删除,包括对其相关数据记录的同步处理。它接收一个对象类型(ent),及ID,判断这个对象(行记录)是否存在,然后判断它的sourceid和id是否一致(是主贴还是跟贴),如果是主贴,就把它的从贴一起删除,否则就只删除当前贴,然后返回原来调用的一页,如果出错,就转向到errors.jsp页,显示出错信息。

<entity:present ent="${param.ent}" oid="${param.oid}" id="thent" nexto="${header.referer}">

<%--如果记录存在就继承内嵌逻辑,把该记录定为ident名--%>

<%--判断sourcid与id是否一致--%>

<logic:equal name="thent" value="${thent.sourceid}" property="id">

<%--取所有主从贴,集合定名为theobjs--%>

<entity:entities ent="${param.ent}" id="theobjs" qstr="sourceid=${sourceid}">

<%--迭代集合内容,单个取名为theobj--%>

<logic:iterate id="theobj" name="theobjs">

<%--删除该对象--%>

<cmd:delete ent="${param.ent}" target="${theobj}"/>

</logic:iterate>

</entity:entities>

</logic:equal>

<logic:notEqual name="thent" value="${thent.sourceid}" property="id">

<%--单个从贴,清除该对象--%>

<cmd:delete ent="${param.ent}" target="${thent}"/>

</logic:notEqual>

</entity:present>

标签结束,根据nexto转向到调用者,这样段小代码实际上就扮演了一个MVC中的c角色。如果需要输出断点,可以调用hanva:log 把实时内容输出到log日志中。一个比较复杂的功能就此完成了。全程实际上只是进行了一次或两次数据库的访问,如果是多个从贴,需要获得它的串,这是可能的第二次。注意<entity:entities>标签,它输入一个条件,也可以输入fields选项,得到一个ArrayList串(没有同步要求就不用Vector),如果不是为了翻页,它可以代替hanva:list,使用上也更方便,没有需要先设定一个dao.list对象。

我认为这才是标签技术的真正用法:帮助程序员在界面清晰明确地调用后台的处理程序,方便面向对象的业务逻辑的建立,方便隐藏非表达层的逻辑;而不是变成把页面搞得更复杂,堆上更多难懂代码的又一套新方法。

相对而言,tags文件标签技术显得更现实一点。如同jsp是方便菜鸟(仍是程序员)写简单的servlet一样,tags标签文件是方便看到Class就发抖的菜鸟象写jspjavalet一样写标签;显然,是最简单的SimpleTagSupport的变种,只有它才有一个体内容。也同样,充分利用Class类结构的编码技术在这里没有办法实现。

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...