jsp--EL表达式&&标签库
EL表达式是为了替代jsp表达式,标签是为了替代jsp脚本。有了这两个技术就能避免在jsp页面中尽量不写java代码,减轻了jsp的复杂度,增加了代码的整洁程度。
EL表达式
语法:${变量或表达式}
作用:向浏览器输出域对象中的变量值或者表达式计算的结果。
代码示例:
1)基本数据类型输出
1 <body> 2 <%-- 基本类型输出 --%> 3 <% 4 pageContext.setAttribute("name", 12, PageContext.PAGE_SCOPE); 5 pageContext.setAttribute("name", true, PageContext.REQUEST_SCOPE); 6 pageContext.setAttribute("name","session域", PageContext.SESSION_SCOPE); 7 pageContext.setAttribute("name", "context域", PageContext.APPLICATION_SCOPE); 8 %> 9 ${name }<br/><%-- 默认在pageScope、requestScope和sessionScope中搜索 --%> 10 <%--在指定域中搜索 --%> 11 ${pageScope.name}<br/> 12 ${requestScope.name}<br/> 13 ${sessionScope.name}<br/> 14 ${applicationScope.name}<br/> 15 16 </body>
注意:单独${name}会默认在pageScope、requestScope和sessionScope中搜索。
2)对象类型输出
1 <%--对象类型输出 --%> 2 <% 3 Student student = new Student("小名",12); 4 pageContext.setAttribute("student", student); 5 %> 6 ${student.name }
3)list对象输出
1 <%--list类型输出 --%> 2 <% 3 List<Student> list = new ArrayList<Student>(); 4 list.add(new Student("小明",10)); 5 list.add(new Student("小红",20)); 6 list.add(new Student("小王",30)); 7 pageContext.setAttribute("list", list); 8 %> 9 list类型输出: 10 ${list[0].name } 11 ${list[1].name } 12 ${list[2].name }
4)map对象输出
1 <%--Map类型输出 --%> 2 <% 3 Map<String,Student> map = new HashMap<String,Student>(); 4 map.put("100", new Student("校长",60)); 5 map.put("101", new Student("老师",30)); 6 map.put("102", new Student("学生",20)); 7 pageContext.setAttribute("map", map); 8 %> 9 Map类型输出: 10 ${map['100'].name } 11 ${map["101"].name } 12 ${map["102"].name }
注意:EL表达式输出的变量一定是在域对象中存在的。
5)EL输出表达式
1 <body> 2 <%-- 3 1)算术表达式 4 + - * / 5 --%> 6 ${10+5 }<br/> 7 ${10*5 } 8 <hr/> 9 <%-- 10 2)比较运算 11 > < >= <= == != 12 --%> 13 ${10>5 }<br/> 14 ${10<5 }<br/> 15 ${10!=10 } 16 <hr/> 17 <%-- 18 3)逻辑运算 19 && || ! 20 --%> 21 ${true && false }<br/> 22 ${true || false }<br/> 23 ${!false }<br/> 24 <hr/> 25 <%-- 26 4)判空 27 null 或 空字符串: empty 28 --%> 29 <% 30 //String name = "eric"; 31 //String name = null; 32 String name = ""; 33 pageContext.setAttribute("name",name); 34 %> 35 判断null: ${name==null }<br/> 36 判断空字符: ${name=="" }<br/> 37 判空: ${name==null || name=="" } 38 另一种判空写法: ${empty name } 39 40 41 </body>
标签库
作用:替换java脚本。
分类:
1)内置标签(动作标签):不需要在jsp页面中导入标签。
2)jstl标签:需要在jsp页面中导入标签。
3)自定义标签:开发者自行定义,需要在jsp页面导入标签。
(1)内置标签(动作标签)
转发标签
<jsp:forward page="library2.jsp"></jsp:forward>
参数标签
<jsp:param value="dev" name="name"/>
包含标签
<jsp:include page="header.jsp"></jsp:include>
注意:此处的包含为动态包含,即包含和被包含的页面先各自翻译成java源文件,然后再运行时合并在一起。
静态包含和动态包含的区别:
1)语法不同
静态包含:<%@ include file="被包含的页面"%>
动态包含:<jsp:include page="被包含的页面">
2)参数传递不同
静态包含:不能向被包含的页面传递参数
动态包含:可以向被包含的页面传递参数
3)原理不同
静态包含:先合并在翻译。
动态包含:先翻译再合并。
传递参数的案例:
主页面
<body> <jsp:include page="header.jsp"> <jsp:param value="nick" name="name"/> <jsp:param value="123" name="pwd"/> </jsp:include> <hr> <font color="blue">正文</font> <jsp:forward page="library2.jsp"> <jsp:param value="dev" name="name"/> </jsp:forward> </body>
被包含页面
<font size='12' color='red'>头文件</font><br/> 名字:<%= request.getParameter("name") %> 密码:<%= request.getParameter("pwd") %>
被转发页面
<body> 用户名:<%=request.getParameter("name") %> </body>
(2)jstl标签
1)核心标签库的重点标签
<1>设置属性标签
<%--设置属性 --%> <c:set var="name" value="nick" scope="request"></c:set>
常用标签属性:
var:设置变量名。
value:设置变量值。
scope:设置变量的保存域。
注意:--c:set标签默认保存到page域中。
<2>获取属性标签
<%--获取属性 --%> <c:out value="${requestScope.name }" ></c:out> <% String age = null; pageContext.setAttribute("age", age); %> <br> <c:out value="${age }" default="<font>默认值</font>" escapeXml="true"></c:out>
常用标签属性:
value:获取标签的值。
default:当标签值value为null时,可使用默认值default。
escapeXml:是否对value进行转义,false不转义,true转义。
<3>单条件判断标签
<%--if单条件标签 --%> <c:if test="${empty age}"> 条件成立 </c:if>
常用标签属性:
test:判断条件
<4>多条件选择标签
<%--多条件标签 --%> <c:set var="score" value="68"></c:set> <c:choose> <c:when test="${score>=90 }"> 优秀 </c:when> <c:when test="${score>=80 && score<90}"> 良好 </c:when> <c:when test="${score>=70 && score<80 }"> 一般 </c:when> <c:when test="${score>=60 && score<70 }"> 及格 </c:when> <c:otherwise> 啥也不是 </c:otherwise> </c:choose>
<5>forEarch循环语句
<%-- for-earch循环语句 --%> <% //list存储 List<Student> list = new ArrayList<Student>(); list.add(new Student("张三",10)); list.add(new Student("李四",20)); list.add(new Student("王五",30)); pageContext.setAttribute("list", list); //map存储 Map<String,Student> map = new HashMap<String,Student>(); map.put("100",new Student("小张",10)); map.put("101",new Student("小李",10)); map.put("102",new Student("小王",10)); pageContext.setAttribute("map", map); %> <c:forEach items="${list }" var="student" varStatus="status" > 用户id:${status.count }--用户名:${student.name }--年龄:${student.age } <br/> </c:forEach> <hr> <c:forEach items="${map }" var="entry"> 用户id:${entry.key }--名字:${entry.value.name }--年龄:${entry.value.age }<br> </c:forEach>
常用标签属性:
begin:开始遍历的位置
end:结束遍历的位置
step:遍历步长
items:遍历目标对象
var:遍历出的对象
varStatus:遍历状态,其中的count属性可以获得索引值。
(6)forTokens循环语句
<%-- forTokens循环语句 --%> <% String str = "哈哈哈-呵呵呵-嘿嘿嘿"; pageContext.setAttribute("str", str); %> <c:forTokens items="${str }" delims="-" var="s"> ${s }-- </c:forTokens>
常用标签属性:
forEarch有的属性forTokens都有。
delims:分隔符
<7>重定向标签
<%-- 重定向标签 --%> <c:redirect url="http://www.baidu.com"></c:redirect>
2)eclipse中使用jstl标签库
<1>导入jstl.jar、standard.jar2个jar包;
此处提供两个下载地址:
CSDN:http://download.csdn.net/detail/czxt0605/7671781
百度云盘:https://pan.baidu.com/s/1qYnVbAG
<2>把c.tld文件拷贝到WEB-INF目录下;
<3>web.xml加上如下配置
<jsp-config> <taglib> <taglib-uri>http://java.sun.com/jstl/core</taglib-uri> <taglib-location>/WEB-INF/c.tld</taglib-location> </taglib> </jsp-config>