分享
 
 
 

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

王朝java/jsp·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

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类结构的编码技术在这里没有办法实现。

JSP开发社团看来热衷于在局部别具一格地提供一些局部方便性措施,却常常忽略了客户更大的一个要求:在项目开发中尽可能采用单一的标准的范式完成所有程序。多使用一种小技术模式在局部方便了,全局来说却是多管理一种一种技术,或者说程序员要多学一种只在局部有效的技术。这个逻辑错误从J2EE开始就伴随着SUNJAVA的技术发展,看来是它的不治之症。在笔者看来,与其多搞小动作,不如在核心一钻到底,而小范围内的方便措施,还是有有能力的客户去实现为佳。拙劣地模仿微软去拍落后(也是非主流的客户)的马屁,将是SUN公司技术上最终失败的原因。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有