使用 el 和 jstl 主要目的是为了消灭 jsp 文件中的 java 代码,使得代码可读性更强。
el:主要是代替简单的显示功能,但遇到复杂逻辑判断时就无能为力了,这时就需要使用 jstl (jsp标准标签库 )。
el 使用示例:
<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String name = "yi";
//1.page,2.request,3.session,4.application(作用域范围小到大)
pageContext.setAttribute("name", "pageName");
request.setAttribute("name", "requestName");
session.setAttribute("name", "sessionName");
application.setAttribute("name", "application");
//集合
Map maps = new HashMap();
maps.put("one", "1");
maps.put("two", "2");
request.setAttribute("mapsValues", maps);
//列表
List<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
request.setAttribute("listValues", list);
%>
表达式的值:<%=name %>
<hr/>
el "\${name}" 的值: ${name}<br/>
page 中 el 的值一定要放在作用域中才能拿到:${pageScope.name}<br/>
request 中 el 的值一定要放在作用域中才能拿到:${requestScope.name}<br/>
session 中 el 的值一定要放在作用域中才能拿到:${sessionScope.name}<br/>
application 中 el 的值一定要放在作用域中才能拿到:${applicationScope.name}<br/>
<hr/>
获取map中的值:第一个元素:${requestScope.mapsValues.one}<br/>
第二个元素:${mapsValues["two"]}<br/>${requestScope.mapsValues["two"]}<br/>
<hr/>
获取list中的值:第一个元素:${requestScope.listValues[0]}<br/>
第二个元素:${listValues["1"]}<br/>${requestScope.listValues["1"]}
</body>
</html>
结果:
jstl 使用示例:
<%@page import="com.yibin.cn.dao.entity.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:set var="score" value="80"></c:set>
<!-- 单分支 -->
<h1>单分支--单选</h1>
<c:if test="${score>=90}">
>=90分
</c:if>
<br/>
<hr/>
<!-- 双分支 -->
<h1>双分支--二选一</h1>
<c:choose>
<c:when test="${score>=90}">
>=90分
</c:when>
<c:otherwise>
<90
</c:otherwise>
</c:choose>
<br/>
<!-- 多分支 -->
<h1>多分支--多选一</h1>
<c:choose>
<c:when test="${score>=90}">
>=90分
</c:when>
<c:when test="${score>=60}">
60<=x<90
</c:when>
<c:otherwise>
<60
</c:otherwise>
</c:choose>
<hr/>
<c:set var="total" value="0"></c:set>
<c:forEach begin="1" end="100" step="1" var="i">
${i}
<c:set var="total" value="${total+i }"></c:set>
</c:forEach>
<br/>
<h2>1加到100的和为:for(int i=1;i<=100;i++)</h2>
${total }
<!-- set的默认作用域是Page -->
<c:set var="score" value="96"></c:set>
pageScope: ${pageScope.score }<br/>
requestScope: ${requestScope.score }<br/>
sessionScope: ${sessionScope.score }<br/>
applicationScope: ${applicationScope.score }<br/>
<hr/>
<%
User user = new User();
request.setAttribute("user", user);
%>
<!-- 只能给user类的某个属性设置,不能新设置属性,并且类型需匹配 -->
<c:set target="${user}" property="name" value="newNameValue"></c:set>
el表达式输出方式:${requestScope.user.name}<br/>
c:out 输出方式:<c:out value="${requestScope.user.name}" default="null"></c:out>
<hr/>
测试remove<br/>
未设置sex值时输出sex:<c:out value="${sex}" default="null"></c:out><br/>
<c:set var="sex" value="男" scope="request"></c:set>
设置sex值后输出sex:<c:out value="${requestScope.sex}"></c:out><br/>
<c:remove var="sex"/>
remove操作之后输出sex值: <c:out value="${requestScope.sex}" default="null"></c:out>
</body>
</html>
结果:
详见源码:srcCode