一、EL

  • EL表达式简化了jsp表达式方法,可以方便的访问各种数据并输出,依次访问pageContext、request、session和application作用域对象存储的数据,获取请求参数值,bean对象、集合和简单运算结果。
  • 同名时,按顺序pageContext、request、session和application作用域访问数据,没有则下推

1. 访问内置对象数据

  由jsp中的<%=request.getAttribute(“ varName”)%>转变为EL实现: ${ varName }

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>el表达式</title>
</head>
<body>
<% /*设置参数*/
pageContext.setAttribute("name1","pageContext参数名:张飞");
request.setAttribute("name2","request参数名:黄忠");
session.setAttribute("name3","session参数名:刘备");
application.setAttribute("name4","application参数名:赵云"); pageContext.setAttribute("name","pageContext参数名:关羽");
request.setAttribute("name","request参数名:关羽");
session.setAttribute("name","session参数名:关羽");
application.setAttribute("name","application参数名:关羽");
%>
<%--获取参数--%>
<h1> <%="pageContext"%>+${name1}</h1><br>
<h1> <%="request"%>+${name2}</h1><br>
<h1> <%="session"%>+${name3}</h1><br>
<h1> <%="application"%>+${name4}</h1><br>
<%-- pageContext==>request==>session==>application--%>
<h1> <%="谁先出来呢"%>+${name}</h1><br> </body>
</html>

2. 访问请求参数的对象数据

  由request中的request.getParameter(name);request.getParameterValues(name); 转变为EL中的param:接收的参数只有一个值;paramValues:接受的参数有多个值。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>el表达式</title>
</head>
<body>
<form action="elresponse.jsp" method="post">
姓名:<input type="text" name="name"><br>
爱好:<input type="checkbox" name="hobby" value="唱歌"> 唱歌<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" name="hobby" value="跳舞">跳舞<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="checkbox" name="hobby" value="乐器">乐器<br>
<input type="submit" value="提交">
</form> </body>
</html>
<%@ page import="java.lang.reflect.Array" %>
<%@ page import="java.util.Arrays" %><%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2021/1/29
Time: 9:42
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>el表达式</title>
</head>
<body>
<%--设置编码格式--%>
<% request.setCharacterEncoding("utf-8");%>
<%--jsp中requese获取参数--%>
<%="姓名是"+request.getParameter("name")%><br>
<%="爱好是"+ Arrays.toString(request.getParameterValues("hobby"))%>
<%-- el 获取参数 --%>
<br>
<h1>姓名是${param.name}</h1>
<h1>爱好是${paramValues.hobby}</h1>
<h1>第一个爱好是${paramValues.hobby[0]}</h1>
</body>
</html>

3. 访问bean对象

访问方式:$ { 对象名 . 属性名 } 或$ { 对象名 [“属性名”] } ,当要存取的属性名中包含一些特殊字符,或动态取值时用[]方式

<%@ page import="java.lang.reflect.Array" %>
<%@ page import="java.util.Arrays" %>
<%@ page import="com.entity.Person" %><%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2021/1/29
Time: 9:42
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>elbean</title>
</head>
<body>
<%--创建bean对象--%>
<%
Person person=new Person("zhangfei",30);
pageContext.setAttribute("var","name");
pageContext.setAttribute("va2","age");
pageContext.setAttribute("person",person);
%> <%--jsp读取--%>
姓名:<%= person.getName()%>
年龄:<%=person.getAge()%>
<hr>
<%--el获取一--%>
姓名:${person.name}
年龄:${person.age}
<hr>
<%--el获取二--%>
姓名:${person["name"]}
年龄:${person["age"]}
<hr>
姓名:${person[var]}
年龄:${person[va2]}
<hr>
</body>
</html>

4. 访问集合元素

访问方式与bean类似,${集合名[下标].属性}

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>elbean</title>
</head>
<body>
<%--创建bean对象--%>
<% List<String> list=new LinkedList<>();
list.add("zhangfei");
list.add("liubei");
list.add("guanyu");
Map<String,Integer> map=new HashMap<>();
map.put("zhanfei",20);
map.put("liubei",30);
map.put("guanyu",40);
pageContext.setAttribute("list",list);
pageContext.setAttribute("map",map);
%> <%--el获取list一--%>
第一个list元素:${list[0]}
第二个list元素:${list[1]}
第三个list元素:${list[2]}
<hr>
<%--el获取map--%>
第一个map元素:${map["zhanfei"]}
第二个map元素:${map["guanyu"]}
第三个map元素:${map["liubei"]}
<hr>
</body>
</html>

5. el常用内置对象

类别 标识符 描述
JSP pageContext PageContext 处理当前页面
作用域 pageScope 同页面作用域属性名称和值有关的Map类
requestScope 同请求作用域属性的名称和值有关的Map类
sessionScope 同会话作用域属性的名称和值有关的Map类
applicationScope 同应用程序作用域属性的名称和值有关的Map类
请求参数 param 根据名称存储请求参数的值的Map类
paramValues 把请求参数的所有值作为一个String数组来存储的Map类
请求头 header 根据名称存储请求头主要值的Map类
headerValues 把请求头的所有值作为一个String数组来存储的Map类
Cookie cookie 根据名称存储请求附带的cookie的Map类
初始化参数 initParam 根据名称存储Web应用程序上下文初始化参数的Map类

6. 简单运算

  • 算术运算符
算术运算符 说 明 范 例 运算结果
+ ${1+2} 3
${2-1} 1
* ${2*3} 6
/ 或 div ${16/5}或${16div5} 3.2
% 或 mod 取余 ${16%5}或${16mod5} 1
  • 关系运算符
关系运算符 说 明 范 例 运算结果
==或eq 等于 ${1==2}或${1 eq 2} false
!= 或ne 不等于 ${2!=1}或${1 ne 2} true
< 或lt 小于 ${2<3}或${2 lt 3 } true
> 或 gt 大于 ${16>5}或${16 gt 5} true
<= 或 le 小于等于 ${16<=5}或${16 le 5} false
>= 或 ge 大于等于 ${16>=5}或${16 ge 5} true
  • 逻辑运算符
逻辑运算符 说 明 范 例 运算结果
&& 或 and 与运算 ${true&&true}或${true and true} true
|| 或or 或运算 ${true||false}或${true or false} true
! 或not 非运算 ${!true}或${not true } false
  • 条件运算符:${条件表达式? 语句1 : 语句2}
  • 验证运算符:${empty 表达式},返回布尔值,判断表达式是否为"空"值,null值、无元素的集合或数组、长度为零的String被认为是空值。

二、JSTL标签

  • jstl是jsp的标准标签库,用于简化jsp中的java代码
  • 使用: 添加jar包;导包

  • 在JSP页面中使用taglib指定引入jstl标签库 
<!-- prefix属性用于指定库前缀 -->
<!-- uri属性用于指定库的标识 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  • 常用核心标签

    • 输出标签<c:out></c:out> 用来将指定内容输出的标签
    • 设置标签<c:set></c:set> 用来设置属性范围值的标签
    • 删除标签<c:remove></c:remove> 用来删除指定数据的标签
    • 单条件判断标签
      <c:if test =“EL条件表达式”>
      满足条件执行
      </c:if >
    • 多条件判断标签
      <c:choose >
      <c:when test =“EL表达式”>
      满足条件执行
      </c:when>
      … <
      c:otherwise>
      不满足上述when条件时执行
      </c:otherwise>
      </c:choose >
    • 循环标签
      <c:forEach var=“循环变量” items=“集合”>

      </c:forEach>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core_1_1" %>
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2021/1/29
Time: 15:42
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>jstl的常用核心标签</title>
</head>
<body>
<%--初始值--%>
<%
pageContext.setAttribute("score",59);
String[] list={"11","22","33","44","55"};
pageContext.setAttribute("list",list);
%>
<%--设置标签--%>
<%--默认作用域为page--%>
<jsp:useBean id="person" class="com.entity.Person" scope="page"></jsp:useBean>
<c:set target="${person}" property="name" value="zhangfei"></c:set>
<c:set target="${person}" property="age" value="20"></c:set>
<c:set var="name" value="guanyu"></c:set>
<%--输出标签--%>
<c:out value="${person.name}"></c:out> <%--zhangfei --%>
<c:out value="${person.age}"></c:out> <%--20--%>
<c:out value="${name}"></c:out> <%--guanyu--%>
<hr/>
<%--删除标签--%>
<c:remove var="name"></c:remove>
<c:out value="${name}" default="hello"></c:out> <%--hello--%>
<%--单条件标签--%>
<c:if test="${score<60}">
<c:out value="不及格"></c:out>
</c:if>
<hr>
<%--多条件标签--%>
<c:choose>
<c:when test="${score<60}">
<c:out value="不及格了呀"></c:out>
</c:when>
<c:when test="${score==60}">
<c:out value="刚好及格"></c:out>
</c:when>
<c:otherwise>
<c:out value="恭喜恭喜"></c:out>
</c:otherwise>
</c:choose>
<hr>
<%--循环标签--%>
<%--对list集合遍历,begin初始值,end结束值,循环包含begin和end,step表示间隔,items表示作用对象--%>
<c:forEach var="ts" items="${list}" begin="1" end="4" step="2" >
<c:out value="${ts}"></c:out> <%--22,44--%>
</c:forEach>
</body>
</html>
  • 常用函数标签<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
  • 常用格式标签 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ page import="java.util.Date" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2021/1/29
Time: 15:59
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>函数与格式</title>
</head>
<body>
<%--加入变量--%>
<c:set var="string" value="Hello World!"></c:set>
<c:out value="${fn:contains(string,'o')}"></c:out> <%--true--%>
<c:out value="${fn:toUpperCase(string)}"></c:out> <%--HELLOWORLD--%>
<c:out value="${fn:toLowerCase(string)}"></c:out><%--helloworld--%> <%
Date date = new Date();
pageContext.setAttribute("date",date);
%>
<fmt:formatDate value="${date}" pattern="yyyy-MM-dd HH:mm:ss"></fmt:formatDate>
</body>
</html>
  • 自定义标签

    • 编写标签类继承SimpleTagSupport类或TagSupport类并重写doTag方法或doStartTag方法。

      package com.entity;
      import javax.servlet.jsp.JspException;
      import javax.servlet.jsp.JspWriter;
      import javax.servlet.jsp.tagext.SimpleTagSupport;import java.io.IOException;
      public class HelloTag extends SimpleTagSupport {
      private String name; public String getName() {
      return name;
      } public void setName(String name) {
      this.name = name;
      } @Override
      public void doTag() throws JspException, IOException {
      JspWriter out = this.getJspContext().getOut();
      out.println("自定义标签"+name);
      }
      }
    • 定义标签库文件(tld标签库文件)并配置标签说明文件到到WEB-INF下
      <?xml version="1.0" encoding="ISO-8859-1"?>
      
      <taglib xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
      version="2.1"> <tlib-version>1.0</tlib-version>
      <short-name>my</short-name>
      <uri>http://rf.com</uri> <!-- Invoke 'Generate' action to add tags or functions -->
      <tag>
      <name>helloTag</name>
      <tag-class>com.entity.HelloTag</tag-class>
      <body-content>empty</body-content>
      <attribute>
      <name>name</name>
      <required>true</required>
      </attribute>
      </tag>
      </taglib>
    • 在JSP中添加taglib指令引入标签库使用
      <%--
      Created by IntelliJ IDEA.
      User: Administrator
      Date: 2021/1/29
      Time: 16:19
      To change this template use File | Settings | File Templates.
      --%>
      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <%@ taglib prefix="my" uri="http://rf.com" %>
      <html>
      <head>
      <title>自定义标签</title>
      </head>
      <body>
      <my:helloTag name="zhangfei"/> </body>
      </html>

EL和JSTL核心技术的更多相关文章

  1. jsp与El,jstl知识点总结归纳

    jsp与El,jstl知识点总结归纳 jsp部分 一.jsp的三大指令 page ,include,taglib 1.jsp中的page指令 <% page %>-设置jsp 例如: &l ...

  2. JSP内置标签 JSP中JavaBean标签 JSP开发模式 EL和JSTL快速入门

    2 JSP内置标签(美化+业务逻辑)   1)为了取代<%%>脚本形式,使用JSP标签/JSP动作,目的:与JSP页面的美化,即JSP面页都是由标签组成,不再有其它的内容   2)JSP内 ...

  3. 在idea的maven项目使用el或jstl表达式

    必须加上这句: <%@ page isELIgnored="false" %> 否则无法解析el或jstl表达式 <%@ taglib prefix=" ...

  4. 第75节:Java的中的JSP,EL和JSTL

    第75节:Java中的JSP,EL和JSTL 哭吧看不完的!!! Cookie和`Session 请求转发和重定向的区别: 地址不一样 请求次数也不一样 数据无法传递 4.跳转范围有限制 效率 请求转 ...

  5. JSP、EL、JSTL

    JSP(Java Server Pages) 什么是JSP Java Server Pages(Java服务器端的页面) 使用JSP:SP = HTML + Java代码 + JSP自身的东西.执行J ...

  6. jsp中的EL和JSTL的关系

    对于JSTL和EL之间的关系,这个问题对于初学JSP的朋友来说,估计是个问题,下面来详细介绍一下JSTL和EL表达式他们之间的关系,以及JSTL和EL一些相关概念! EL相关概念 JSTL一般要配合E ...

  7. Jsp应用EL和JSTL实例对比。

    普通方式: register.jsp <%@ page language="java" import="java.util.*" pageEncoding ...

  8. EL 和 JSTL

    EL 什么是EL表达式 EL(Express Lanuage) 表达式可以嵌入在jsp页面内部 减少jsp脚本的编写 EL出现的目的是要替代jsp页面中脚本的编写 作用区间 EL最主要的作用是获取四大 ...

  9. Unit05: WEB项目的开发模式 、转发 和 Unit09: EL、JSTL

    Unit05: WEB项目的开发模式 .转发   和  Unit09: EL.JSTL dao package dao; import java.io.Serializable; import jav ...

随机推荐

  1. [LeetCode] 1074. 元素和为目标值的子矩阵数量

    矩阵前缀和.因为矩阵中可能包含负值,所以这题肯定不会存在什么剪枝,动态规划的可能性.所以这个题也就没什么弯弯绕绕.个人感觉算不上个Hard题目. 最直观的思路就是枚举子矩阵,既枚举矩阵的左上角节点和右 ...

  2. FinFET与2nm晶圆工艺壁垒

    FinFET与2nm晶圆工艺壁垒 谈到半导体工艺尺寸的时候,通常对于下面的一串数字耳熟能详:3um.2um.1.5um.1um.0.8um.0.5um.0.35um.0.25um.0.18um.0.1 ...

  3. GPU 硬件虚拟化Hardware Virtualization

    GPU 硬件虚拟化Hardware Virtualization 1. Principles 一个物理GPU可以虚拟化为多个vGPUs.VMs可以绑定到vGPUs以直接访问一些物理GPU资源. 2. ...

  4. Nucleus 实时操作系统中断(下)

    Nucleus 实时操作系统中断(下) Nucleus RTOS兼容性 由于中断在Nucleus SE中的实现方式与Nucleus rto截然不同,因此不应期望有特定的兼容性.Nucleus RTOS ...

  5. BlazorCharts 原生图表库的建设历程

    作者:陈超超 Ant Design Blazor 项目贡献者,拥有十多年从业经验,长期基于.Net技术栈进行架构与开发产品的工作,现就职于正泰集团. 邮箱:timchen@live.com 欢迎各位读 ...

  6. 尚硅谷Java——宋红康笔记【day6-day10】

    day6 一.数组的概述 1.数组的理解:数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理. 2.数组相关的概念: 数组名 元素 ...

  7. Android adb的常用命令

    环境部署: 1.下载adb工具 2.下载奇兔刷机(或其它一键刷机软件),将手机与电脑进行连接 3.一键root手机 命令 1.获取设备列表及设备状态:adb devices  如果连接的设备不止一个, ...

  8. 【Android漏洞复现】StrandHogg漏洞复现及原理分析_Android系统上的维京海盗

    文章作者MG1937 CNBLOG博客:ALDYS4 QQ:3496925334 0x00 StrandHogg漏洞详情 StrandHogg漏洞 CVE编号:暂无 [漏洞危害] 近日,Android ...

  9. 【NX二次开发】属性操作相关函数的使用方法

    内容包括:1.属性创建2.判断属性是否存在3.读取属性值4.时间属性转换成字符串5.统计属性的数量6.删除指定属性7.删除全部属性效果: 源码: #include <stdlib.h> # ...

  10. NOIP模拟测试23「mine·water·gcd」

    mine 题解 一道比较水的dp 考试因为初始化挂掉了只有$80$分 代码有注释 #include<bits/stdc++.h> using namespace std; //无脑dp # ...