目录

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 操作。