EL和JSTL核心技术
一、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>
<input type="checkbox" name="hobby" value="跳舞">跳舞<br>
<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>
- 编写标签类继承SimpleTagSupport类或TagSupport类并重写doTag方法或doStartTag方法。
EL和JSTL核心技术的更多相关文章
- jsp与El,jstl知识点总结归纳
jsp与El,jstl知识点总结归纳 jsp部分 一.jsp的三大指令 page ,include,taglib 1.jsp中的page指令 <% page %>-设置jsp 例如: &l ...
- JSP内置标签 JSP中JavaBean标签 JSP开发模式 EL和JSTL快速入门
2 JSP内置标签(美化+业务逻辑) 1)为了取代<%%>脚本形式,使用JSP标签/JSP动作,目的:与JSP页面的美化,即JSP面页都是由标签组成,不再有其它的内容 2)JSP内 ...
- 在idea的maven项目使用el或jstl表达式
必须加上这句: <%@ page isELIgnored="false" %> 否则无法解析el或jstl表达式 <%@ taglib prefix=" ...
- 第75节:Java的中的JSP,EL和JSTL
第75节:Java中的JSP,EL和JSTL 哭吧看不完的!!! Cookie和`Session 请求转发和重定向的区别: 地址不一样 请求次数也不一样 数据无法传递 4.跳转范围有限制 效率 请求转 ...
- JSP、EL、JSTL
JSP(Java Server Pages) 什么是JSP Java Server Pages(Java服务器端的页面) 使用JSP:SP = HTML + Java代码 + JSP自身的东西.执行J ...
- jsp中的EL和JSTL的关系
对于JSTL和EL之间的关系,这个问题对于初学JSP的朋友来说,估计是个问题,下面来详细介绍一下JSTL和EL表达式他们之间的关系,以及JSTL和EL一些相关概念! EL相关概念 JSTL一般要配合E ...
- Jsp应用EL和JSTL实例对比。
普通方式: register.jsp <%@ page language="java" import="java.util.*" pageEncoding ...
- EL 和 JSTL
EL 什么是EL表达式 EL(Express Lanuage) 表达式可以嵌入在jsp页面内部 减少jsp脚本的编写 EL出现的目的是要替代jsp页面中脚本的编写 作用区间 EL最主要的作用是获取四大 ...
- Unit05: WEB项目的开发模式 、转发 和 Unit09: EL、JSTL
Unit05: WEB项目的开发模式 .转发 和 Unit09: EL.JSTL dao package dao; import java.io.Serializable; import jav ...
随机推荐
- Prometheus监控软件部署方法
背景:负责基于区块链的某公正项目的状态上报模块设计编码,基于Prometheus进行二次开发 1.说明Prometheus 是一个开源的服务监控软件,它通过 HTTP 协议从远程机器收集数据并存储在本 ...
- python发送丁丁消息
import requests import time import hashlib import hmac import base64 import re def SendMessage(messa ...
- Python+Selenium自动化 模拟鼠标操作
Python+Selenium自动化 模拟鼠标操作 在webdriver中,鼠标的一些操作如:双击.右击.悬停.拖动等都被封装在ActionChains类中,我们只用在需要使用的时候,导入这个类就 ...
- Python+Selenium学习笔记14 - python官网的tutorial - just() fill() format()
repr(x).rjust(n) 左侧空格填充,右侧列对齐,str()和repr()是一种输出,也可不用,直接x.rjust() repr(x).ljust(n) 右侧空格填充,左侧列对齐 rep ...
- python_appium 之使用Appium Inspector定位工具进行元素识别,编写验证demo
一.前提条件 appium环境搭建完成,模拟器Genymotion 安装完成,且已经下载成功了模拟设备 二.元素识别操作步骤及demo 1.进入appium如下菜单 2.填写Desired Capab ...
- 【NX二次开发】Block UI 指定方位
属性说明 属性 类型 描述 常规 BlockID String 控件ID Enable Logical 是否可操作 Group ...
- 设置NX欢迎界面
环境变量 变量名:UGII_WELCOME_PAGE 变量值:http://www.baidu.com/
- centos 7 能ping通但是telnet 22 不通解决方法
试过关闭Linux防火墙,打开sshd服务,修改ens33为enth0.发现不好使. 经过不断的努力我发现,windows系统里面的VMware Network Adapter VMnet8设置的ip ...
- iNeuOS工业互联网平台,在高校教学实训领域的应用
目 录 1. 概述... 2 2. 实训柜... 2 3. 培训内容... 4 4. 二次开发培训... 5 1. 概述 中国工业互联网从 0 ...
- csp-s模拟测试57(10.2)「天空龙」·「巨神兵」·「太阳神」
题目是古埃及神话??? A. 天空龙 傻逼模拟,看来没有滑天下之大稽QAQ,也没有打错快读(大雾...) B. 巨神兵 难度爆增,一脸懵比..... 60分状压: 因为是求有向图,关于有向图好像拓扑用 ...