Struts 标签改写为 JSTL/EL 标签
目录
1. Intro
公司的项目很多基于 SSH 框架进行开发,感觉逐渐变得庞杂不好维护,尤其是页面展示这一块,struts标签、el 标签、java 代码的混用使得页面逻辑异常混乱,对开发人员也是一个不小的负担。打算将代码逐步进行重构,迁向 Spring MVC 架构,页面部分坚持只使用 JSTL/EL 的标签库,为后续使用模板引擎做准备,这里特地记录一下对如何将使用 Struts 标签库的页面代码改写为 JSTL/EL 标签库的参考说明,免得自己忘记。
2. 引用
struts 库用以下引用 <%@taglib prefix=“s” uri=“/struts-tags”%>
jstl 用以下引用 <%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix=“fmt” uri=“http://java.sun.com/jsp/jstl/fmt" %>
3.标签对比
赋值: struts标签
<s:set name=“pageBean” value=“xxxPage” />
jstl标签<c:set var=”pageBean” value=”xxxPage” scope=”session”/> scope可选范围:page,session,request,application
判断: struts标签
<s:if test=“xxx!=null”> </s:if> <s:else> </s:else>
jstl标签<c:choose> <c:when test=“${xxx!=null}”> … </c:when> <c:otherwise> … </c:otherwise> </c:choose>
输出 struts标签
<s:property value=“pageBean.currentPage”/>
jstl标签${pageBean.currentPage}
循环 struts标签
<s:iterator value=”” id=”“> <s:property value=“current”/>); </s:iterator>
jstl标签<c:forEach var=“current” begin=”” end=”“> ${current} </c:forEach>
需要注意的是,影响 Struts 性能的主要还是由于其 ognl 操作 valueStack 的性能问题,页面修改为 jstl/el 标签后可以解决一部分问题,更好的办法还是使用 freemarker 这样的模板引擎,完全替换掉 Struts 的 valueStack 操作。