EL表达式
- 概念:Expression Language 表达式语言
- 作用:替换和简化jsp页面中的java代码的编写
- 语法:${表达式}
- 注意:
- jsp默认支持EL表达式
- 设置jsp中page指令中:isELIgonred=“true”,忽略当前页面全部的el表达式,也可以在el表达式前\忽略单个el表达式
- 使用:
- 运算:
- 算数运算符:+ - * / %
- 比较运算符:> < >= <= == !=
- 逻辑运算符:&& || !
- 空运算符:empty
${empty str}
用于判断字符串、集合、数组对象是否为null并且长度是否为0${not empty str}
:判断字符串、集合、数组对象是否不为null,或者长度》0
- 获取值:
- el表达式只能从域对象中获取值
- 语法:
${ 域名称,键名 }
: 从指定域中获取指定键的值- pageScope–》pageContext
- requestScope–》request
- sessionScope–》session
- applicationScope–》application(ServletContext)
- 举例:在request域中存储了name=张三
- 获取:${requestScope.name}
${键名}
:表示依次从最小的域中查找是否有该键对应的值,直到找到为止- 获取List集合、Map的值
- 对象:
${域名.键名.属性名}
*本质上回去调用对象的getter方法来获取属性值 - List集合:
${域名.键名[索引]}
- Map集合:
${域名.键名.key名}
- 对象:
- 运算:
<%@ page import="domain.User" %>
<%@ page import="java.util.*" %><%--
Created by IntelliJ IDEA.
User: 竹鼠商人
Date: 2020/9/22
Time: 15:01
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域内
User user=new User();
user.setName("张三");
user.setAge(23);
user.setBrithday(new Date());
request.setAttribute("user",user);
List list =new ArrayList();
list.add("aaa");
list.add("bbb");
request.setAttribute("list",list);
Map map=new HashMap();
map.put("name","李四");
map.put("age","22");
request.setAttribute("map",map);
%>
<%-- 通过对象的属性获取值--%>
<h1>获取user对象</h1>
${requestScope.user.bristr}
<h1>获取list</h1>
${requestScope.list[0]}
<h1>获取map</h1>
${requestScope.map.name}
${requestScope.map["name"]}
</body>
</html>
-
- 隐式对象:
- 在el表达式内有11个隐式对象
- pageContext:
- 获取jsp其他8个内置对象如:
${pageContext.request.contextPath}
动态获取虚拟目录
- 获取jsp其他8个内置对象如:
- 隐式对象:
JSTL
- 概念:JavaServer Pages Tag Liabrary JSP标准标签库
- 是由Apache组织提供的开源的免费的jsp标签 <标签>
- 作用:用于简化和替换jsp页面上的java代码
- 使用步骤
-
打入jstl相关的jar包
-
引入标签库:使用taglib指令:
<%@ taglib %>
-
使用标签
-
- 常用的JSTL标签:
-
if
:相当于java代码的if- 属性:test为必须属性,接受Boolean的值可以理解为if的判断条件
- 注意没有else的标签,如果想使用else的情况需要再定义一个相反条件的if标签
-
choose
:相当于java代码的switch- chose标签:相当于switch
- when标签:相当于case
- otherwise标签:相当于default
-
foreach
:相当于java代码的for- 完成重复的操作:如从0输出到10
- 属性:
begin
:开始值end
:结束值var
:临时变量step
:步长:每次循环临时变量变化的大小varStatus
:循环状态对象index
:容器中元素的索引count
:循环执行的次数
- 属性:
- 便利容器,如遍历list
- 属性:
items
:容器对象var
容器中的临时变量varStatus
:循环状态对象index
:容器中元素的索引count
:循环执行的次数
- 属性:
- 完成重复的操作:如从0输出到10
-
- JSTL小练习
- 需求:在request域中有一个存有User对象的List集合,需要使用jstl+el将list集合中的数据展示到jsp页面的表格table中,且奇数行显示红色,偶数行显示绿色
- 需求:在request域中有一个存有User对象的List集合,需要使用jstl+el将list集合中的数据展示到jsp页面的表格table中,且奇数行显示红色,偶数行显示绿色
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="domain.User" %>
<%@ page import="java.util.Date" %><%--
Created by IntelliJ IDEA.
User: 竹鼠商人
Date: 2020/9/22
Time: 20:06
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
//准备数据
List list=new ArrayList();
list.add(new User("张三",23,new Date()));
list.add(new User("李四",22,new Date()));
list.add(new User("王五",21,new Date()));
request.setAttribute("list",list);
%>
<table border="1" width="500" align="center">
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
<th>生日</th>
</tr>
<c:forEach items="${list}" var="user" varStatus="s">
<c:if test="${s.count%2!=0}">
<%-- 奇数行显示红色--%>
<tr bgcolor="red">
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.bristr}</td>
</tr>
</c:if>
<c:if test="${s.count%2==0}">
<%-- 偶数行显示绿色--%>
<tr bgcolor="green">
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.bristr}</td>
</tr>
</c:if>
</c:forEach>
</table>
</body>
</html>
三层架构:软件设计架构
- 界面层(表示层):用户看到的界面,用户可以通过界面的组件和服务器进行交互
- 业务逻辑层:处理业务逻辑的。
- 数据访问层:操作数据存储文件。