用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
SilentVoid的公告
<div align="center"><strong>继续革命<strong><br> <a href="http://www2.clustrmaps.com/counter/maps.php?url=http://blog.csdn.net/silentvoid" id="clustrMapsLink"><img src="http://www2.clustrmaps.com/counter/index2.php?url=http://blog.csdn.net/silentvoid" /> </a> </div>
文章分类
J2ME同行
牛人CoCoMo
非常人物
Ezrah
SilentVoid的另一面
云风:游戏编程牛人(RSS)
金旭亮老师
好玩的
算法同党
HUST.Navy
HUST.Nick
HUST.Tangel
存档

原创  jstl:优雅的代价 收藏

在毕业设计中用到JSP,转而注意到jstl。缘于对<%标签的深恶痛绝,在写ASP的时候,杂乱无章的ASP脚本标记就已经耗尽了我对于scriptlet模式的全部耐心。同时,最近在Web开发中反复被提到的三层模式,即所谓的MVC,也促使我决定彻底抛弃scriptlet模式。实际上,在后来我发现用jstl加上servlet,javabean可以完美的实现这种分离。显然,servlet用来控制业务逻辑,javabean作为辅助, jstl则是作为表示逻辑的最佳选择。
jstl是官方的一个tag library,属于apache 的 jarkata project。实际上已经有一些成型框架,比如struts,hibernate,sprint等。不过我并没有使用这些,而是尝试从理解custom tag开始。这样我花的时间大大超过完成这个项目所需的时间,但获得了对jstl的更好的认知。
jstl自身是一个非常精炼的tag library, 经过一定的了解与练习,我们可以完全把scriptlet从jsp页面中消灭。而代码的可读性和维护性将得到极大的提高。同时,杜绝了scriptlet,将“逼迫”我们走上MVC的道路,当然最终我们会发现这是惬意的。比如我要实现一个显示某用户好友列表的页面:如果我使用scriptlet,或许会是这个样子
<%
String sqlstr = "select * from friend where username = ?";
PreparedStatement ps = conn.preparedStatement(sqlstr);
ps.setString(1, request.getParameter("username"));
ResultSet rs = ps.ExecuteQuery();
%>
<%
while(rs.next()){
%>
<span><%=rs.getString("friend_name")%></span>
<%
%>
....
而如果我们使用jstl的<sql>标签后:
<sql:query var="rs">
    select * from friend where username  = ${param.username}
</sql:query>
<c:forEach var="record" item="${rs}">
<span>${record.friend_name}</span>
</c:forEach>
对,就这么短.我们要为此付出的代价仅仅是看看jstl的standard-examples

实际上,所有scriptlet能够做的事情,jstl都可以做,而且更优美.

有一次看到网上有人问道,jstl如何取得服务器端时间?
嗯,是个难题!一不小心,就得把<% java.util.Date %>搬出来了,有必要吗?没有!

<jsp:useBean id="now" class="java.util.Date"/>
${now}           //输出时间!

显然,优美的方案是需要少许代价的,就是灵活变通

发表于 @ 2007年06月10日 20:22:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:钱穆《国史大纲-前言、引论》 | 新一篇:提醒

  • 发表评论
  • 评论内容:
  •  
Copyright © SilentVoid
Powered by CSDN Blog