锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

JSP-07使用EL和JSTL简化JSP

时间:2022-10-11 18:30:01 塑封包胶电位器

JSP-07使用EL和JSTL简化JSP

一、学习目标

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

二、EL表达式

为什么要用?EL表达式?

在JSP中编写Java脚本的弊端

  1. 复杂的程序结构
  2. 可读性差
  3. 不易维护

书名:<%= book.getTitle() %>

图书类型:<%= book.category.getCategoryName() %>

出版社:<%= book.publisher.getPublisherName() %>

使用EL表达式可以大大简化JSP代码

<p>书名:${book.title}p> <p>图书类型:${book.category.name}p> <p>出版社:${book.publisher.name}p> 

2.1初识EL表达式

什么是EL表达式

Expression Language(表达式语言) 

EL的功能

1.替代JSP在页面中访问数据时的复杂编码 2.执行表达式 

EL的特点

1.自动转换类型 2.使用简单 

2.2EL表达式语法

前提:web.xml配置文件的头部必须是3.0或以上版本

 <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","张三"); %>

用户名:${username}

用户名:${requestScope.username}

若省略作用域,将按照page → request → session → application作用域的顺序依次查找,找到即返回,找不到返回null。

EL表达式对应JSP作用域的名称

属性范围 EL表达式中的名称 属性范围 EL表达式中的名称
page pageScope session sessionScope
request requestScope application applicationScope

EL表达式中的对象元素和集合元素

通过操作符获取对象的属性值

点操作符

(推荐使用)

${user.name}

[ ]操作符

${user["name"]}

获取List集合中的值

${ listName[0] }
${ listName[1] }

获取Map集合中的值

${ map.keyName }
${ map["keyName"] }

使用EL表达式输出用户信息

使用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

注意事项:EL表达式中“+”运算符两侧的内容如果无法自动转化为数字类型,该表达式将会抛出异常


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}或 AB{A or B} true
! 或not 逻辑非 如果A为true,则 ! A 或 {!A}或 !A{not A} false

Empty运算符

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>
	
	<%@ include file="common/header.jsp"%>
	
<div id="container">
	 	
		
		<%@ include file="common/leftMenu.jsp"%>
		
    <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>        
        
        <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">5span>  共有商品评论0条  <a href="#">查看评论摘要a>
                div>
            dd>
        dl>
        
        
        
        <dl class="book_intro">
        	<dt>内容简介dt>
            <dd>${requestScope.book.contentDescription}dd>
        dl>
        <dl class="book_intro">
        	<dt>目录dt>
            <dd>${requestScope.book.toc}dd>
        dl>
        
        
        
        <div class="comm_answer">
			
            <div id="div_product_reviews">
                <div class="total_comm">
                    <div class="comm_title">
                        <h2>商品评论 共<em>814em><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">4span><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 

相关文章