资讯详情

JSP-07使用EL和JSTL简化JSP

JSP-07使用EL和JSTL简化JSP

一、学习目标

  1. 掌握EL使用表达式
  2. 掌握常用JSTL标签的使用

二、EL表达式

在JSP中编写Java脚本的弊端

  1. 复杂的程序结构
  2. 可读性差
  3. 不易维护
<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> ">&gt;">&gt;
                	 <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 

标签: 塑封包胶电位器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台