在毕业设计中用到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 | | 编辑|
举报| 收藏