JSP-07使用EL和JSTL简化JSP
文章目录
- JSP-07使用EL和JSTL简化JSP
-
- @[toc]
- 一、学习目标
- 二、EL表达式
-
- 2.1初识EL表达式
- 2.2EL表达式语法
- 2.3EL表达式使用算数运算符
- 2.4EL表达式使用关系运算符
- 2.5EL表达式使用逻辑运算符和Empty运算符
- 2.6EL表达式隐藏对象
-
- 2.6.1作用域访问对象
- 2.6.2参数访问对象
- 2.6.3JSP隐式对象
- 2.6.第四个访问对象
- 2.6.5初始参数访问对象
- 2.6.6使用EL表达式改造图书详细页面
- 三、JSTL
-
- 3.1什么是JSTL
- 3.2引入JSTL
- 3.2JSP中使用JSTL标准标签库
-
- 3.2.1通用标签库-out标签
- 3.2.2通用标签库-set标签
- 3.2.3通用标签库-remove标签
- 3.2.4条件标签库-if标签
- 3.2.5条件标签库-choose标签
- 3.2.6迭代标签库-forEach标签
- 四、JSTL使用自定义函数
- 总结
文章目录
- JSP-07使用EL和JSTL简化JSP
-
- @[toc]
- 一、学习目标
- 二、EL表达式
-
- 2.1初识EL表达式
- 2.2EL表达式语法
- 2.3EL表达式使用算数运算符
- 2.4EL表达式使用关系运算符
- 2.5EL表达式使用逻辑运算符和Empty运算符
- 2.6EL表达式隐藏对象
-
- 2.6.1作用域访问对象
- 2.6.2参数访问对象
- 2.6.3JSP隐式对象
- 2.6.第四个访问对象
- 2.6.5初始参数访问对象
- 2.6.6使用EL表达式改造图书详细页面
- 三、JSTL
-
- 3.1什么是JSTL
- 3.2引入JSTL
- 3.2JSP中使用JSTL标准标签库
-
- 3.2.1通用标签库-out标签
- 3.2.2通用标签库-set标签
- 3.2.3通用标签库-remove标签
- 3.2.4条件标签库-if标签
- 3.2.5条件标签库-choose标签
- 3.2.6迭代标签库-forEach标签
- 四、JSTL使用自定义函数
- 总结
一、学习目标
- 掌握EL使用表达式
- 掌握常用JSTL标签的使用
二、EL表达式
在JSP中编写Java脚本的弊端
- 复杂的程序结构
- 可读性差
- 不易维护
<p>书名:<%= book.getTitle() %></p> <p>图书类型:<%= book.category.getCategoryName() %></p> <p>出版社:<%= book.publisher.getPublisherName() %></p>
<p>书名:${book.title}</p> <p>图书类型:${book.category.name}</p> <p>出版社:${book.publisher.name}</p>
2.1初识EL表达式
Expression Language(表达式语言)
1.替代JSP在页面中访问数据时的复杂编码 2.执行表达式
1.自动转换类型 2.使用简单
2.2EL表达式语法
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
${表达式}
<% request.setAttribute("username","张三"); %>
<p>用户名:${username}</p>
<p>用户名:${requestScope.username}</p>
若省略作用域,将按照page → request → session → application
作用域的顺序依次查找,找到即返回,找不到返回null。
pageScope | sessionScope | ||
requestScope | applicationScope |
通过操作符获取对象的属性值
(推荐使用)
${user.name}
${user["name"]}
${ listName[0] }
${ listName[1] }
${ map.keyName }
${ map["keyName"] }
使用EL表达式获取存储于Map中的用户信息示例:
<%
Map<String,String> map = new HashMap<String,String>();
map.put("name","张三");
map.put("hobby","打羽毛球");
request.setAttribute("user",map);
%>
<p>用户名:${user.name}</p>
<p>用户爱好:${user["hobby"]}</p>
运行效果
用户名:张三
用户爱好:打羽毛球
2.3EL表达式使用算数运算符
+ | 加 | ${10+5} |
15 |
- | 减 | ${10-5} |
5 |
* | 乘 | ${10*5} |
50 |
/ 或 div | 除 | ${10/5}或${10 div 5} |
2 |
% 或 mod | 取模 | ${10%5}或${10 mod 5} |
0 |
2.4EL表达式使用关系运算符
== 或eq | 等于 | ${23==5}或${23 eq 5 ${"a"=="a"}或${"a" eq "a"} |
false true |
!= 或ne | 不等于 | ${23!=5}或${23 ne 5} |
true |
< 或lt | 小于 | ${23<5}或${23 lt 5} |
false |
> 或gt | 大于 | ${23>5}或${23 gt 5} |
true |
<= 或le | 小于等于 | ${23<=5}或${23 le 5} |
false |
>= 或ge | 大于等于 | ${23>=5}或${23 ge 5} |
true |
2.5EL表达式使用逻辑运算符和Empty运算符
&& 或and | 逻辑与 | 如果A为true,B为false,则KaTeX parse error: Expected '}', got '&' at position 4: {A &̲& B}或{A and B} | false |
|| 或or | 逻辑或 | 如果A为true,B为false,则 A ∣ ∣ B 或 {A || B}或 A∣∣B或{A or B} | true |
! 或not | 逻辑非 | 如果A为true,则 ! A 或 {!A}或 !A或{not A} | false |
Empty运算符是一个前缀操作符,用于检测一个变量是否为空 :
<% request.setAttribute("username","张明"); %>
${empty username} // 返回 false
${not empty username} // 返回 true
${! empty username} // 返回 true
2.6EL表达式的隐式对象
可以直接从不同作用域和请求中读取信息
2.6.1作用域访问对象
pageScope | 与page作用域中的属性相关联的Map类 |
requestScope | 与request作用域中的属性相关联的Map类 |
sessionScope | 与session作用域中的属性相关联的Map类 |
applicationScope | 与application作用域中的属性相关联的Map类 |
如果指定作用域,EL表达式将在该作用域内查找变量值
如果不指定作用域,EL表达式将按page → request → session → application
的顺序依次查找变量值
2.6.2参数访问对象
param | 按照参数名称访问单一请求值的Map对象 |
paramValues | 按照参数名称访问数组请求值的Map对象 |
2.6.3JSP隐式对象
pageContext | 提供对页面信息和JSP内置对象的访问 |
2.6.4首部访问对象
header | 按名称存储请求头主要值的Map类 |
headerValues | 将请求头的所有值作为String数组存储的Map类,返回指定请求头的所有值组成的字符串数组 |
cookie | 按名称存储请求附带的cookie的Map类 |
2.6.5初始化参数访问对象
initParam | 按名称存储 Web 应用程序上下文初始化参数的Map类 |
2.6.6使用EL表达式改造图书详情页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> <meta name="Robots" content="index,follow" /> <title>"第三波书店"-网上书店</title> <link href="css/global.css" rel="stylesheet" type="text/css" /> <link href="css/channel.css" rel="stylesheet" type="text/css" /> <link href="css/answer.css" rel="stylesheet" type="text/css" /> </head> <body> <!-- 头部 begin --> <%@ include file="common/header.jsp"%> <!-- 头部 end --> <div id="container"> <!--left content--> <!--左侧分类菜单 begin--> <%@ include file="common/leftMenu.jsp"%> <!--左侧分类菜单 end--> <div class="book_view"> <c:if test="${empty requestScope.book }"> <h1 class="b_title">暂无该书籍的详情信息!</h1> </c:if> <c:if test="${not empty requestScope.book}"> <h1 class="b_title">${requestScope.book.title}</h1> <div class="b_exa"> <span class="book_group">丛书名:${requestScope.book.title}</span> <span class="book_status">点击量:${requestScope.book.clicks} <span><a href="#">放入书架</a></span> <a href="#">什么是书架?</a></span> </div> <!--book basic start--> <dl class="put_book"> <dt> <img src="images/BookCovers/${requestScope.book.isbn}.jpg" width="200" height="275" alt="${requestScope.book.title}" /> <div class="chakan"><img src="images/zoom.gif" /> <a class="gray878787a" href="#" name="bigpicture">点击查看大图</a></div> </dt> <dd> <div id="book_editor"> 作 者: ${requestScope.book.author} 著<br /> 出 版 社: ${requestScope.book.publisher.name} </div> <ul id="book_attribute"> <li>出版时间:${requestScope.book.publishDate}</li> <li>ISBN: ${requestScope.book.isbn}</li> <li>库存:(${requestScope.book.sumStock})本</li> </ul> <div id="book_categroy"> 所属分类: <a href="javascript:void(0)" target="_blank" class="blue12a">图书</a> ">>">> <a href="javascript:void(0)" target="_blank" class="blue12a"> ${requestScope.book.categorie.name}</a> <div id="book_price"> <span class="gray87"> 定价:<span class="del">¥${requestScope.book.unitPrice}</span></span> <span class="red"> 当当价:¥<b> <fmt:formatNumber type="number" value="${requestScope.book.unitPrice * 0.6 }" pattern="0.00" maxFractionDigits="2"/></b></span> 折扣:<span class="redc30">6折</span> 节省:¥<fmt:formatNumber type="number" value="${requestScope.book.unitPrice-(requestScope.book.unitPrice * 0.6) }" pattern="0.00" maxFractionDigits="2"/> </div> <div id="book_point"> <span >送积分:<span id="pointsTag" >${requestScope.book.unitPrice}</span></span> <a target="_blank" href="javascript:">积分说明</a> <br /> <a href="javascript:void(0)" id="btn_addCart" cart-id="${requestScope.book.id}"><img src="images/btn_goumai.gif" onmouseover="this.src='images/btn_goumai_click.gif'" onmouseout="this.src='images/btn_goumai.gif'" /> </a> <a href="javascript:history.go(-1)">返回</a> </div> <div id="book_count"> 顾客评分:<span id="book_id_15">5</span> 共有商品评论0条 <a href="#">查看评论摘要</a> </div> </dd> </dl> <!--book basic end--> <!--book intro start--> <dl class="book_intro"> <dt>内容简介</dt> <dd>${requestScope.book.contentDescription}</dd> </dl> <dl class="book_intro"> <dt>目录</dt> <dd>${requestScope.book.toc}</dd> </dl> <!--book intro end--> <!--recommed start--> <div class="comm_answer"> <!--review head start--> <div id="div_product_reviews"> <div class="total_comm"> <div class="comm_title"> <h2>商品评论 共<em>814</em>条 <span class="look_comm"> (<a href="javascript:" name='reviewList' target='_blank'>查看所有评论</a>)</span></h2> </div> <div class="total_body"> <div class="people_average"> <div class="average_left"><p>购买过的顾客平均评分</p><span class="a_red28b pd">4</span><span class="red_bold">星半</span><img src='images/star_red.gif' /><img src='images/star_red.gif' /><img src='images/star_red.gif' /><img src='images/star_red.gif' /><img src='images/star_redgray_big.gif' /> </div> <span class="span_jt" id="div_window_star"><input class="button_down1" value="" type