笔记输出来源:拉勾教育Java就业急训营
修改时间:2021年2月1日
作者:pp_x
邮箱:[email protected]
文章目录
EL表达式
简介
- EL(Expression Language)表达式提供了在JSP中简化表达式的方法,可以方便地访问各种数据并输出
主要功能
- 依次访问
pageContext
、request
、session
和application
作用域对象存储的数据。 - 获取请求参数值。
- 访问Bean对象的属性。
- 访问集合中的数据。
- 输出简单的运算结果。
访问内置对象的数据
语法
- 传统jsp:
<%=request.getAttribute(“ varName”)%>
- EL表达式:
${ varName }
- 如果遇到同名参数,表达式以作用域从小到大查询。
示例代码
<%
/*pageContext.setAttribute("name1", "pageContext对象中的属性值:zhangfei");
request.setAttribute("name2", "request对象中的属性值:guanyu");
session.setAttribute("name3", "session对象中的属性值:liubei");
application.setAttribute("name4", "session对象中的属性值:zhaoyun");*/
//pageContext.setAttribute("name", "pageContext对象中的属性值:zhangfei");
//request.setAttribute("name", "request对象中的属性值:guanyu");
//session.setAttribute("name", "session对象中的属性值:liubei");
application.setAttribute("name", "session对象中的属性值:zhaoyun");
%>
<%-- 使用JSP中原始方式获取数据和打印 --%>
<%--<%= "name1的数值为:" + pageContext.getAttribute("name1") %><br/> <%– zhangfei –%>
<%= "name2的数值为:" + request.getAttribute("name2") %><br/> <%– guanyu –%>
<%= "name3的数值为:" + session.getAttribute("name3") %><br/> <%– liubei –%>
<%= "name4的数值为:" + application.getAttribute("name4") %><br/> <%– zhaoyun –%>--%>
<%-- 使用EL表达式实现获取数据和打印 --%>
<h1>name1的数值为:${
name1}</h1><br/>
name2的数值为:${
name2}<br/>
name3的数值为:${
name3}<br/>
name4的数值为:${
name4}<br/>
<h1>name的数值为:${
name}</h1><br/>
访问请求参数的数据
访问方式
- 传统方式
request.getParameter(name);
request.getParameterValues(name);
- EL表达式
param
:接收的参数只有一个值。paramValues
:接受的参数有多个值。
示例代码
<%
request.setCharacterEncoding("utf-8");
%>
<%-- 使用JSP语法中的原始方式获取请求参数值 --%>
<%--<%= "姓名是:" + request.getParameter("name") %><br/>
<%= "爱好是:" + Arrays.toString(request.getParameterValues("hobby")) %><br/>--%>
<%-- 使用EL表达式中的方式获取请求参数值 --%>
姓名是:${
param.name}<br/>
爱好是:${
paramValues.hobby[0]}<br/>
访问bean对象的属性
访问方式
- $ { 对象名 . 属性名 },例如:
${user.name}
- $ { 对象名 [“属性名”] },例如:
${user["name"]}
- 两者区别:如果属性名中含有特殊字符(.,)等就一定要使用[]的方式,[]的方式可以动态的取值
示例代码
<%-- 使用JSP语法规则中的原始方式实现对象的创建和设置以及输出 --%>
<%
Person person = new Person();
person.setName("zhangfei");
person.setAge(30);
pageContext.setAttribute("person", person);
pageContext.setAttribute("var1", "name");
pageContext.setAttribute("var2", "age");
%>
<%--<%= "获取到的姓名为:" + person.getName() %><br/>
<%= "获取到的年龄为:" + person.getAge() %><br/>--%>
<%-- 使用EL表达式实现属性的获取和打印 --%>
<%--获取到的姓名是:${
person.name}<br/>
获取到的年龄是:${
person.age}<br/>--%>
<%-- 另外一种写法 --%>
${
person["name"]}<br/>
${
person["age"]}<br/>
<%-- 测试一下动态取值的效果 --%>
动态取值的结果为:${
person[var1]}
访问集合中的数据
<body>
<%
// 准备一个List集合并添加数据内容
List<String> list = new LinkedList<>();
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);
// 将整个集合放入指定的内置对象中
pageContext.setAttribute("map", map);
%>
<%-- 使用EL表达式实现集合中数据内容的获取 --%>
集合中下标为0的元素是:${
list[0]}<br/> <%-- two --%>
集合中下标为1的元素是:${
list[1]}<br/> <%-- one --%>
集合中下标为2的元素是:${
list[2]}<br/> <%-- three --%>
<hr/>
<%-- 使用EL表达式实现Map集合中数据内容的获取 不支持下标 --%>
整个Map集合中的元素有:${
map}<br/>
获取带有特殊字符key对应的数值为:${
map["th.ree"]}<br/> <%-- 3 --%>
常用的内置对象
类别 | 标识符 | 描述 |
---|---|---|
JSP | pageContext | PageContext 处理当前页面 |
作用域 | pageScope | 同页面作用域属性名和值有关的Map类 |
requestScope | 同请求作用域属性名和值有关的Map类 | |
sessionScope | 同会话作用域属性和值有关的Map类 | |
applicationScope | 同应用程序作用域属性和值有关的Map类 | |
请求参数 | param | 根据名称存储请求参数的Map类 |
paramValues | 把请求参数所有值放入一个String数组的Map类 | |
Header | header | 根据名称存储请求头的Map类 |
headerValues | 把请求头所有的值放入一个String数组的Map类 | |
Cookie | cookie | 根据名称存储请求附带的cookie的Map类 |
初始化参数 | initParam | 根据名称存储Web应用程序上下文初始化参数的Map类 |
常用的运算符
算术运算符
符号 | 含义 | 范例 | 结果 |
---|---|---|---|
+ | 加 | ${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 或 &&
- or 或 ||
- not 或 !
条件运算符
${条件表达式? 语句1 : 语句2}
验算运算符
- 返回布尔值判断表达式是否为"空"值,null值、无元素的集合或数组、长度为零的String被认为是空值。
${empty 表达式}
<%
// 通过内置对象设置属性的方式来准备操作数
request.setAttribute("ia", 5);
request.setAttribute("ib", 2);
request.setAttribute("b1", true);
request.setAttribute("b2", false);
%>
<%-- 实现上述所有操作数的获取和打印 --%>
ia的数值为:${
ia}<br/> <%-- 5 --%>
ib的数值为:${
ib}<br/> <%-- 2 --%>
b1的数值为:${
b1}<br/> <%-- true --%>
b2的数值为:${
b2}<br/> <%-- false --%>
<hr/>
<%-- 实现算术运算符的使用 --%>
ia+ib的结果为:${
ia+ib}<br/> <%-- 7 --%>
ia-ib的结果为:${
ia-ib}<br/> <%-- 3 --%>
ia*ib的结果为:${
ia*ib}<br/> <%-- 10 --%>
ia/ib的结果为:${
ia/ib}<br/> <%-- 2.5 --%>
ia%ib的结果为:${
ia%ib}<br/> <%-- 1 --%>
<hr/>
<%-- 实现关系运算符的使用 --%>
ia大于ib的结果为:${
ia > ib}<br/> <%-- true --%>
ia大于等于ib的结果为:${
ia >= ib}<br/> <%-- true --%>
ia小于ib的结果为:${
ia < ib}<br/> <%-- false --%>
ia小于等于ib的结果为:${
ia <= ib}<br/> <%-- false --%>
ia等于ib的结果为:${
ia == ib}<br/> <%-- false --%>
ia不等于ib的结果为:${
ia != ib}<br/> <%-- true --%>
<hr/>
<%-- 实现逻辑运算符的使用 --%>
b1并且b2的结果为:${
b1 && b2}<br/> <%-- false --%>
b1或者b2的结果为:${
b1 || b2}<br/> <%-- true --%>
b1取反的结果为:${
!b1 }<br/> <%-- false --%>
b2取反的结果为:${
!b2 }<br/> <%-- true --%>
<hr/>
<%
String str1 = null;
String str2 = "";
String str3 = "hello";
List<Integer> list1 = new LinkedList<>();
List<Integer> list2 = Arrays.asList(11, 22, 33, 44, 55);
request.setAttribute("str1", str1);
request.setAttribute("str2", str2);
request.setAttribute("str3", str3);
request.setAttribute("list1", list1);
request.setAttribute("list2", list2);
%>
<%-- 实现条件运算符和验证运算符的使用 --%>
ia和ib之间的最大值为:${
ia>ib? ia: ib}<br/>
判断是否为空的结果是:${
empty str1}<br/> <%-- true --%>
判断是否为空的结果是:${
empty str2}<br/> <%-- true --%>
判断是否为空的结果是:${
empty str3}<br/> <%-- false --%>
判断是否为空的结果是:${
empty list1}<br/> <%-- true --%>
判断是否为空的结果是:${
empty list2}<br/> <%-- false --%>
JSTL标签
基本概念
- JSTL( JSP Standard Tag Library ) 被称为JSP标准标签库。
- 开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。
需要的jar包
引入方式
<!-- 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:set var="name" value="liuxiao" scope="page"></c:set>
<c:out value="${name}"></c:out>
<c:remove var="name"></c:remove>
<c:out value="${name}" default="无名"></c:out>
<c:if test =“EL条件表达式”> 满足条件执行 </c:if >
:单条件判断
<%-- 设置一个变量以及对应的数值 --%>
<c:set var="age" value="17" scope="page"></c:set>
<c:out value="${age}"></c:out>
<hr/>
<%-- 判断该年龄是否成年,若成年则提示已经成年了 --%>
<c:if test="${age >= 18}">
<c:out value="已经成年了!"></c:out>
</c:if>
- 多条件判断标签
<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>
- 循环标签:
<c:forEach var=“循环变量” items=“集合”> … </c:forEach>
自定义标签
- 编写标签类继承SimpleTagSupport类或agSupport类并重写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.write("自定义标签哦!" + name);
// 关闭流对象
out.close();
}
}
- 定义标签库文件(tld标签库文件)并配置标签说明文件到WEB-INF下:
<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://lagou.com</uri>
<!-- Invoke 'Generate' action to add tags or functions -->
<tag>
<name>hello</name>
<tag-class>com.lagou.demo01.HelloTag</tag-class>
<body-content>empty</body-content>
<attribute>
<name>name</name>
<required>true</required>
</attribute>
</tag>
</taglib>
- 在JSP中添加taglib指令引入标签库使用
<%@ taglib prefix="hello" uri="http://lagou.com" %>