一、El表达式(熟悉)
1、基本概念
- EL(Expression Language)表达式提供了在JSP中简化表达式的方法,可以方便地访问各种数据并输出。
2、主要功能
- 依次访问pageContext、request、session和application作用
- 域对象存储的数据。
- 获取请求参数值。
- 访问Bean对象的属性。
- 访问集合中的数据。
- 输出简单的运算结果。
<%--
Created by IntelliJ IDEA.
User: Soldier
Date: 2021/8/17
Time: 14:37
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>实现从内置对象中获取数据并打印</title>
</head>
<body>
<%
/*pageContext.setAttribute("name1", "pageContext对象中的属性值:赵云");
request.setAttribute("name2", "request对象中的属性值:吕布");
session.setAttribute("name3", "session对象中的属性值:典韦");
application.setAttribute("name4", "application对象中的属性值为:马超");*/
session.setAttribute("name", "session对象中的属性值:典韦");
request.setAttribute("name", "request对象中的属性值:吕布");
application.setAttribute("name", "application对象中的属性值为:马超");
pageContext.setAttribute("name", "pageContext对象中的属性值:赵云");
%>
<%--使用jsp中原始方式获取数据并打印--%>
<%--<%= "name1的数值为:" + pageContext.getAttribute("name1") %><br/>
<%= "name2的数值为:" + request.getAttribute("name2") %><br/>
<%= "name3的数值为:" + session.getAttribute("name3") %><br/>
<%= "name4的数值为:" + application.getAttribute("name4") %><br/>--%>
<%-- 使用EL表达式十三年获取数据和打印 --%>
<%--<h1>name1的数值为:${name1}</h1><br/>
name2的数值为:${name2}<br/>
name3的数值为:${name3}<br/>
name4的数值为:${name4}<br/>--%>
<%--当name值相同时:依次访问pageContext、request、session和application作用--%>
name的数值为:${name} <%-- 输出:pageContext对象中的属性值:赵云 --%>
</body>
</html>
3、访问内置对象的数据
1.访问方式
- <%=request.getAttribute(“ varName”)%>
- 用EL实现: ${ varName }
2.执行流程
4、访问请求参数的数据
- 在EL之前使用下列方式访问请求参数的数据
request.getParameter(name);
request.getParameterValues(name);
- 在EL中使用下列方式访问请求参数的数据
param:接收的参数只有一个值。
paramValues:接受的参数有多个值。
<!-- 获取指定参数的数值 -->
${param.name}
<!-- 获取指定参数中指定下标的数值 -->
${paramValues.hobby[0]}
5、访问Bean对象的属性
1.访问方式
- 方式一: $ { 对象名 . 属性名 },例如:${user.name}
- 方式二: $ { 对象名 [“属性名”] },例如:${user["name"]}
2.主要区别
- 当要存取的属性名中包含一些特殊字符,如: . 或 ,等并非字母或数字的符号,就一定要使用 [ ]而不是.的方式
- 使用[]的方式可以动态取值,具体方式如下:
<%
request.setAttribute(“prop”,“age”);
%>
<!-- 相当于表达式中写一个变量 -->
${ user[prop] }
<%@ page import="com.soldier.demo.Person" %><%--
Created by IntelliJ IDEA.
User: Soldier
Date: 2021/8/17
Time: 15:29
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>实现bean对象中属性的获取和打印</title>
</head>
<body>
<%-- 使用JSP语法规则中的原始方式实现对象的创建、设置以及输出 --%>
<%
Person person = new Person();
person.setName("吕布");
person.setAge(30);
pageContext.setAttribute("person", person);
/*pageContext.setAttribute("var", "name");*/
pageContext.setAttribute("var", "age");
%>
<%--<%= "获取到的姓名为:" + person.getName() %><br/>
<%= "获取到的年龄为:" + person.getAge() %><br/>--%>
<%-- 使用El表达式实现属性的获取并打印 --%>
<%--获取到的姓名为:${person.name}<br/>
获取到的年龄为:${person.age}<br/>--%>
<%-- 另一种方式--%>
姓名:${person["name"]}<br/>
年龄:${person["age"]}<br>
<%-- 测试一下动态取值的效果 --%>
<%--动态取值的结果为:${person[var]} <%– 输出:吕布 –%>--%>
动态取值的结果为:${person[var]} <%-- 输出:30 --%>
</body>
</html>
6、访问集合中的数据
<!-- student为ArrayList类型的对象 -->
${student[0].name}
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %><%--
Created by IntelliJ IDEA.
User: Soldier
Date: 2021/8/17
Time: 17:01
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>实现集合中的数据获取和打印</title>
</head>
<body>
<%
// 准备一个集合添加数据内容
List<String> list = new ArrayList();
list.add("two");
list.add("one");
list.add("three");
// 将整个集合放入指定的内置对象中
pageContext.setAttribute("list", list);
// 准备一个Map集合并添加数据
Map<String, Integer> map = new HashMap<>();
map.put("one", 1);
map.put("two", 2);
map.put("th.ree", 3);
// 将整个Map集合放入指定的内置对象中
pageContext.setAttribute("map", map);
%>
<%-- 使用EL表达式实现集合中数据内容的获取 --%>
集合中下标为0的元素为:${list[0]}<br/>
集合中下标为1的元素为:${list[1]}<br/>
集合中下标为2的元素为:${list[2]}<br/>
<hr/>
map集合中所有元素为:${map}<br/>
获取带有特殊字符key的map:${map["th.ree"]}<br/>
</body>
</html>
7、常用的内置对象
![image-20210816152408577](https://gitee.com/CN_soldier/upload-image/raw/master/img/20210816152408.png)
8、常用的运算符
1.常用的算术运算符
![image-20210816152451187](https://gitee.com/CN_soldier/upload-image/raw/master/img/20210816152451.png)
2.常用的关系运算符
![image-20210816152511988](https://gitee.com/CN_soldier/upload-image/raw/master/img/20210816152512.png)
3.常用的逻辑运算符
![image-20210816152541870](https://gitee.com/CN_soldier/upload-image/raw/master/img/20210816152541.png)
4.条件运算符
${条件表达式? 语句1 : 语句2}
5.验证运算符
${empty 表达式}
返回布尔值判断表达式是否为"空"值,null值、无元素的集合或数组、长度为零的String被认为是空值。
二、JSTL标签(熟悉)
1、基本概念
- JSTL( JSP Standard Tag Library ) 被称为JSP标准标签库。
- 开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。
2、使用方式
<!-- prefix属性用于指定库前缀 -->
<!-- uri属性用于指定库的标识 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3、常用的核心标签
1.输出标签
<c:out></c:out> 用来将指定内容输出的标签
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%--
Created by IntelliJ IDEA.
User: Soldier
Date: 2021/8/18
Time: 15:39
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>实现out输出标签的使用</title>
</head>
<body>
<c:out value="Hello World"></c:out>
</body>
</html>
2.设置标签
<c:set></c:set> 用来设置属性范围值的标签
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
Created by IntelliJ IDEA.
User: Soldier
Date: 2021/8/18
Time: 16:07
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>实现set标签的使用</title>
</head>
<body>
<%-- 设置一个名字为name的属性,对应的数值为赵云,有效范围page--%>
<%-- pageContext.setAttibute("name", "赵云") --%>
<c:set var="name" value="赵云" scope="page"></c:set>
<%-- 使用out标签打印出来 --%>
<c:out value="${name}"></c:out>
<hr/>
<%-- 设置一个对象的属性值并打印出来 --%>
<jsp:useBean id="person" class="com.soldier.demo.Person" scope="page"></jsp:useBean>
<c:set property="name" value="吕布" target="${person}"></c:set>
<c:set property="age" value="30" target="${person}"></c:set>
<c:out value="${person.name}"></c:out><br/>
<c:out value="${person.age}"></c:out><br/>
</body>
</html>
3.删除标签
<c:remove></c:remove> 用来删除指定数据的标签
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
Created by IntelliJ IDEA.
User: Soldier
Date: 2021/8/18
Time: 16:36
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>实现remove标签的使用</title>
</head>
<body>
<%-- 设置一个属性值并打印 --%>
<jsp:useBean id="person" class="com.soldier.demo.Person" scope="page"></jsp:useBean>
<c:set property="name" value="典韦" target="${person}"></c:set>
<c:set property="age" value="35" target="${person}"></c:set>
属性name值为:<c:out value="${person.name}"></c:out><br/>
属性age值为:<c:out value="${person.age}"></c:out><br/>
<hr/>
<%-- 删除属性值后并打印 --%>
<c:remove var="person"></c:remove>
删除后属性name值为:<c:out value="${person.name}"></c:out><br/>
删除后属性name值为:<c:out value="${person.age}"></c:out><br/>
</body>
</html>
4.单条件判断标签
<c:if test =“EL条件表达式”>
满足条件执行
</c:if >
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
Created by IntelliJ IDEA.
User: Soldier
Date: 2021/8/18
Time: 16:50
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>实现if标签的使用</title>
</head>
<body>
<%-- 设置一个变量已经对应的数值 --%>
<c:set var="age" value="17"></c:set>
<c:out value="${age}"></c:out>
<hr/>
<c:if test="${age >= 18}">
<c:out value="已经成年"></c:out>
</c:if>
</body>
</html>
5.多条件判断标签
<c:choose >
<c:when test =“EL表达式”>
满足条件执行
</c:when>
…
<c:otherwise>
不满足上述when条件时执行
</c:otherwise>
</c:choose >
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
Created by IntelliJ IDEA.
User: Soldier
Date: 2021/8/18
Time: 16:56
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>实现choose标签的使用</title>
</head>
<body>
<c:set var="score" value="95"></c:set>
<c:out value="${score}"></c:out><br/>
<hr/>
<%-- 实现choose考试成绩的判断 --%>
<c:choose>
<c:when test="${score < 60 }">
<c:out value="不及格"></c:out><br/>
</c:when>
<c:when test="${score >= 60 && score < 75}">
<c:out value="及格"></c:out><br/>
</c:when>
<c:when test="${score>=75 && score<90}">
<c:out value="良好"></c:out><br/>
</c:when>
<c:otherwise>
<c:out value="优秀"></c:out><br/>
</c:otherwise>
</c:choose>
</body>
</html>
6.循环标签
<c:forEach var=“循环变量” items=“集合”>
…
</c:forEach>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
Created by IntelliJ IDEA.
User: Soldier
Date: 2021/8/18
Time: 17:05
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>实现循环标签的使用</title>
</head>
<body>
<%
// 准备一个数组并初始化
String[] sArr = {"11", "22", "33", "44", "55"};
pageContext.setAttribute("sArr", sArr);
%>
<%-- 使用for循环标签遍历数组中所有元素 --%>
<c:forEach var="ts" items="${sArr}">
<c:out value="${ts}"></c:out><br/>
</c:forEach>
<hr/>
<%-- 跳跃性遍历 --%>
<c:forEach var="ts" items="${sArr}" step="2">
<c:out value="${ts}"></c:out><br/>
</c:forEach>
<hr/>
<%-- 指定起始位置循环 --%>
<c:forEach var="ts" items="${sArr}" begin="1" end="3">
<c:out value="${ts}"></c:out><br/>
</c:forEach>
</body>
</html>
4、常用的函数标签
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%--
Created by IntelliJ IDEA.
User: Soldier
Date: 2021/8/18
Time: 17:18
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>实现常用函数的使用</title>
</head>
<body>
<%
pageContext.setAttribute("var", "Hello World!");
%>
原始字符串为:${var}<br/> <%-- Hello World --%>
判断该字符串是否包含自定字符串的结果为:${fn:contains(var, "Hello")}<br/> <%-- true --%>
将字符串中所有字符转换为大写的结果为:${fn:toUpperCase(var)}<br> <%-- HELLO WORLD! --%>
将字符串中所有字符转换为小写的结果为:${fn:toLowerCase(var)}<br> <%-- hello world! --%>
</body>
</html>
5、常用格式化标签
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ page import="java.util.Date" %><%--
Created by IntelliJ IDEA.
User: Soldier
Date: 2021/8/18
Time: 18:01
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>实现格式标签的使用</title>
</head>
<body>
<%
// 获取当前系统时间
Date date = new Date();
pageContext.setAttribute("date", date);
%>
当前系统时间为:${date}<br/>
<hr>
格式化后的当前系统时间:<fmt:formatDate value="${date}" pattern="yyyy-MM-dd HH:mm:ss"></fmt:formatDate><br/>
</body>
</html>
6、自定义标签
- 如果上面几个标签不能满足需求,程序员也可以自定义标签,步骤如下:
- 编写标签类继承SimpleTagSupport类或TagSupport类并重写doTag方法或doStartTag方法。
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下:
<tag>
<name>helloTag</name>
<tag-class>com.lagou.demo02.HelloTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>name</name>
<required>true</required>
</attribute>
</tag>
<%@ taglib prefix="hello" uri="http://lagou.com" %>