走进Java(五)JSTL和EL表达式
2015-11-25 16:34
489 查看
一、定义
JSTL(JSPStandard Tag Library,JSP标准标签库),由四个定制标记库(core、format、xml 和sql)和一对通用标记库验证器(ScriptFreeTLV 和 PermittedTaglibsTLV)组成。它实现了迭代和条件判断、数据管理格式化、XML操作以及数据库访问的功能。有了jstl标签库和el表达式,我们的jsp中不需要<%%>的java代码,提高了程序的可读性和可维护性。
EL(Expression Language)表达式:目的是为了使JSP写起来更加简单。
语法结构:${expression};
对象:pageScope、requestScope、sessionScope、applicationScope(访问顺序:page—request—session——application)
二、使用条件
以下列出jstl各个版本与jsp及servlet版本之间的依赖关系。
三、标签库
分享几个常用的标签库,记住要在jsp中引进这些标签库才能使用,如下:
四、实践
新建servlet名jstlCoreServlet.java,存入几个对象:
新建jsp名jstl_core.jsp,取出Servlet中的对象:
使用jstl+el表达式,确实能让jsp页面思路清晰,便于维护。至于效率问题,从来都是实际问题分析。jstl常用的几个标记熟练就好,<c:out>、<c:if>、<c:choose>、<c:when>和<c:otherwise>、<c:forEach>、<fmt:formatNumber>、<fmt:formatDate>等。也有自定义函数,但是自定义函数中,方法必须为静态全局的。
JSTL(JSPStandard Tag Library,JSP标准标签库),由四个定制标记库(core、format、xml 和sql)和一对通用标记库验证器(ScriptFreeTLV 和 PermittedTaglibsTLV)组成。它实现了迭代和条件判断、数据管理格式化、XML操作以及数据库访问的功能。有了jstl标签库和el表达式,我们的jsp中不需要<%%>的java代码,提高了程序的可读性和可维护性。
EL(Expression Language)表达式:目的是为了使JSP写起来更加简单。
语法结构:${expression};
对象:pageScope、requestScope、sessionScope、applicationScope(访问顺序:page—request—session——application)
二、使用条件
以下列出jstl各个版本与jsp及servlet版本之间的依赖关系。
版本号 | JSTL版本 | 要求(必须满足此条件) | 获取Taglib途径 |
Standard 1.2 | JSTL 1.2(尚未经过JCP认证) | Servlet 2.5, JavaServer Pages 2.1 | subversion |
Standard 1.1 | JSTL 1.1 | Servlet 2.4, JavaServer Pages 2.0 | 下载 |
Standard 1.0 | JSTL 1.0 | Servlet 2.3, JavaServer Pages 1.2 | 下载 |
分享几个常用的标签库,记住要在jsp中引进这些标签库才能使用,如下:
//引进核心标签库core <%@taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c"%> //引进日期标签库format <%@taglib uri="http://java.sun.com/jsp/jstl/fmt"prefix="fmt"%> //引进函数标签库 <%@taglib uri="http://java.sun.com/jsp/jstl/functions"prefix="fn"%> //注意,它必须放在el表达式中使用,格式 ${前缀+冒号+函数名称}
四、实践
新建servlet名jstlCoreServlet.java,存入几个对象:
//users Group group = new Group(); group.setName("星星team"); List<User> users = new ArrayList<User>(); for (int i = 0; i < 10; i++) { User user1 = new User(); user1.setUsername("星星" + i + "号"); user1.setAge(22 + i); user1.setGroup(group); users.add(user1); } request.setAttribute("users", users); //map Map map = new HashMap(); map.put("k1", "v1"); map.put("k2", "v2"); map.put("k3", "v3"); map.put("k4", "v4"); request.setAttribute("map", map); //日期 request.setAttribute("today", new Date()); //数字 request.setAttribute("n", 12345678.123); //forTokens request.setAttribute("strtokens", "1#2#3#4#5"); //hello request.setAttribute("hello", "HelloWord");
新建jsp名jstl_core.jsp,取出Servlet中的对象:
<li>循环控制标签forEach循环——采用标签库显示</li> <br> <table border="1"> <tr> <td>姓名</td> <td>年龄</td> <td>所属组</td> </tr> <c:choose> <c:when test="${empty users }"> <tr cosplan="3">没有请求到数据 </tr> </c:when> <c:otherwise> <c:forEach items="${users }" var="user"> <tr> <td>${user.username}</td> <td>${user.age}</td> <td>${user.group.name}</td> </tr> </c:forEach> </c:otherwise> </c:choose> </table> <li>forEach循环,varStatus</li><br> <table border="1"> <tr> <td>姓名</td> <td>年龄</td> <td>所属组</td> </tr> <c:choose> <c:when test="${empty users }"> <tr> <td colspan="3">没有找到数据</td> </tr> </c:when> <c:otherwise> <c:forEach items="${users}" var="user" varStatus="vs"> <c:choose> <c:when test="${vs.count mod 2 == 0}"> <tr bgcolor="red"> </c:when> <c:otherwise> <tr> </c:otherwise> </c:choose> <td>${user.username }</td> <td>${user.age }</td> <td>${user.group.name }</td> </tr> </c:forEach> </c:otherwise> </c:choose> </table> <li>forEach循环——begin,end,step</li> <br> <table border="1"> <tr> <td>姓名</td> <td>年龄</td> <td>所属组</td> </tr> <c:choose> <c:when test="${empty users }"> <tr cosplan="3">没有请求到数据 </tr> </c:when> <c:otherwise> <c:forEach items="${users }" var="user" begin="2" end="8" step="2"> <tr> <td>${user.username}</td> <td>${user.age}</td> <td>${user.group.name}</td> </tr> </c:forEach> </c:otherwise> </c:choose> </table> <li>forEach循环输出map</li><br> <c:forEach items="${map }" var="entry"> ${entry.key },${entry.value }<br> </c:forEach> <li>测试格式化日期</li> today(default): <fmt:formatDate value="${today }" /> <br> today(date): <fmt:formatDate value="${today }" type="date" /> <br> today(time): <fmt:formatDate value="${today }" type="time" /> <br> today(both): <fmt:formatDate value="${today }" type="both" /> <br> <p> <hr> today(dateStyle="short"): <fmt:formatDate value="${today }" dateStyle="short" /> <br> today(dateStyle="medium"): <fmt:formatDate value="${today }" dateStyle="medium" /> <br> today(dateStyle="long"): <fmt:formatDate value="${today }" dateStyle="long" /> <br> today(dateStyle="full"): <fmt:formatDate value="${today }" dateStyle="full" /> <br> <hr> today(pattern="yyyy/MM/dd HH:mm:ss"): <fmt:formatDate value="${today }" pattern="yyyy/MM/dd HH:mm:ss" var="currentDate" /> <br> ${currentDate } <br> <p> <li>测试格式化数字标签</li> <br> number(default): <fmt:formatNumber value="${n }"></fmt:formatNumber> <br> n(pattern="###,###,###.####"): <fmt:formatNumber value="${n}" pattern="###,###,###.####" /> <br> n(pattern="###,###,###.0000"): <fmt:formatNumber value="${n}" pattern="###,###,###.0000" /> <br> n(groupingUsed="false"): <fmt:formatNumber value="${n}" groupingUsed="false" /> <br>n(maxIntegerDigits="12" minIntegerDigits="10"): <fmt:formatNumber value="${n}" maxIntegerDigits="12" minIntegerDigits="10" /> <br> n(minFractionDigits="4" maxFractionDigits="6"): <fmt:formatNumber value="${n}" minFractionDigits="4" maxFractionDigits="6" /> <br>n(type="currency"): <fmt:formatNumber value="${n}" type="currency" /> <br> n(type="currency" currencySymbol="$"): <fmt:formatNumber value="${n}" type="currency" currencySymbol="$" /> <br>n(type="percent"): <fmt:formatNumber value="${p}" type="percent" minFractionDigits="2" maxFractionDigits="2" /> <br> <li>循环控制标签forTokens</li><br> <c:forTokens items="${strtokens }" delims="#" var="v"> ${v }<br> </c:forTokens>
使用jstl+el表达式,确实能让jsp页面思路清晰,便于维护。至于效率问题,从来都是实际问题分析。jstl常用的几个标记熟练就好,<c:out>、<c:if>、<c:choose>、<c:when>和<c:otherwise>、<c:forEach>、<fmt:formatNumber>、<fmt:formatDate>等。也有自定义函数,但是自定义函数中,方法必须为静态全局的。
相关文章推荐
- Spring MVC 接收Json格式参数
- lombok eclipse 安装安装
- Java NIO (六) Selector
- java 静态代码块 静态方法区别
- 构建轻量级webservice-Spring整合jaxws开发
- ERROR [org.springframework.web.context.ContextLoader] - Context initialization failed
- Struts1.1应用初步
- JAVA中的jna
- Java 传递参数 中文乱码解决
- CKEditor struts2上传
- eclipse下maven项目的创建以及问题的解决
- Eclipse配置
- java.lang.RuntimeException: Method called after release()
- 将字符转为时间戳类型 String->Timestamp
- solr.RAMDirectoryFactory下dataDir配置
- Java观察者模式的理解
- spring依赖注入的3种实现方式
- Struts1与Struts2的区别
- Java定时任务以及ScheduledThreadPoolExecutor需要注意的问题
- Java中Split函数的用法技巧