EL表达式
1,概念:Expression Language 表达式语言
2,作用:替换和简化jsp页面中java代码的编写
3,语法:${表达式}
4,注意:
- jsp默认支持EL表达式的。如果要忽略El表达式
- 1,设置jsp中page指令中:isELIgnored="true"忽略当前jsp页面中所有的EL表达式
- 2,${表达式}:忽略当前这个EL表达式
5,使用
- 1,运算
- 算数运算符
- 比较运算符
- 逻辑运算符
- 空运算符:empty
- 功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0
${empty list}
:判断字符串、集合、数组对象是否为null或者长度等于0.${not empty list}
:表示判断字符串、集合、数组对象是否不为null,并且长度>0。
- 2,获取值
-
1,EL表达式只能从域对象中获取值
-
2,语法:
- 1,${域名称.键名}:从指定域名中获取指定键的值
- 域名称:
- 1,pageSope -------> pageContext
- 2,requestScope -------> request
- 3,sessionScope -------> session
- 4,applicationScope -------> application(ServletContext)
<% //在域中存储数据 request.setAttribute("name","张三"); session.setAttribute("age","23"); %> <h3>el获取值</h3> ${requestScope.name}<br> ${sessionScope.age}<br>
- 2,${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。
- 3,获取对象、List集合、Map集合的值
- 1,对象:
${域名称.键名.属性名}
- 本质上会去调用对象的getter方法
- 2,List集合:
${域名称.键名[索引]}
- 3,Map集合:
${域名称.键名.key名称}
&${域名称.键名["key名称"]}
- 1,对象:
<%@ page import="cn.jsp.domain.User" %> <%@ page import="java.util.*" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>获取数据</title> </head> <body> <% User user = new User(); user.setName("张三"); user.setAge(23); user.setBirthday(new Date()); request.setAttribute("u",user); List list = new ArrayList(); list.add("aaa"); list.add("bbb"); list.add(user); request.setAttribute("list",list); Map map = new HashMap(); map.put("sname","李四"); map.put("gender","男"); map.put("user",user); request.setAttribute("map",map); %> <h3>el获取对象中的值</h3> ${requestScope.u} ${requestScope.u.name} ${requestScope.u.birStr} <h3>el获取List中的值</h3> ${list}<br> ${list[0]}<br> ${list[1]}<br> ${list[10]}<br> ${list[2].name}<br> <h3>el获取Map中的值</h3> ${map.gender}<br> ${map["gender"]}<br> ${map.user.name}<br> </body> </html>
-
6,隐式对象:
EL表达式中由11个隐式对象
- pageContext:
- 1,获取jsp其他八个内置对象
- 2,动态获取虚拟目录:
${pageContext.request.contextPath}
JSTL标签
1,概念:JavaServer Pages Tag Library JSP标准标签库
- 是由Apache组织提供的开源的免费的jsp标签
2,作用:用于简化和替换jsp页面上的java代码
3,使用步骤:
- 1,导入jstl相关jar包
- 2,引入标签库:taglib指令 <%@ taglib %>
- 3,使用标签
4,常用的JSTL标签
1,if :相当于java代码的if语句
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>if标签</title>
</head>
<body>
<%--
c:if标签:
test:必须属性,接受boolean表达式
如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容
一般情况下,test属性值会结合EL表达式一起使用
注意:c:if标签没有else情况,想要else情况,则可以再定义一个c:if标签
--%>
<c:if test="true">
<h1>我是Jsp</h1>
</c:if>
<br>
<%
//判断request域中的一个list集合是否为空,如果不为null则显示遍历集合
List list = new ArrayList();
list.add("aaaa");
request.setAttribute("list",list);
request.setAttribute("number",4);
%>
<c:if test="${not empty list}">
遍历集合
</c:if><br>
<c:if test="${number % 2 == 0}">
${number}为偶数。
</c:if>
</body>
</html>
2,choose :相当于java代码的switch语句
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>choose标签</title>
</head>
<body>
<%--
完成数字编号对应星期几案例
1,域中存储数字
2,使用choose标签取出数字 相当于switch
3,使用when标签做数字判断 相当于case
4,otherwise标签做其他情况的声明 相当于default
--%>
<%
request.setAttribute("number","3");
%>
<c:choose>
<c:when test="${number == 1}">星期一</c:when>
<c:when test="${number == 2}">星期二</c:when>
<c:when test="${number == 3}">星期三</c:when>
<c:when test="${number == 4}">星期四</c:when>
<c:when test="${number == 5}">星期五</c:when>
<c:when test="${number == 6}">星期六</c:when>
<c:when test="${number == 7}">星期天</c:when>
<c:otherwise>数字输入有误</c:otherwise>
</c:choose>
</body>
</html>
3,foreach :相当于java代码的for语句
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>foreach标签</title>
</head>
<body>
<%--
foreach:相当于java代码中的for语句
1,完成重复操作
for(int i=0;i<10;i++){}
属性:
begin:开始值
end:结束值
var:临时变量
step:步长
varStatus:循环状态对象
index:容器中元素的索引,从0开始
count:循环次数,从1开始
2,遍历容器
List<User> list
for(User user:list){}
属性:
items:容器对象
var:容器中元素的临时变量
varStatus:循环状态对象
index:容器中元素的索引,从0开始
count:循环次数,从1开始
--%>
<c:forEach begin="1" end="10" var="i" step="2" varStatus="s">
${i} 索引:${s.index} 循环次数:${s.count}<br>
</c:forEach>
<hr>
<%
List list = new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
request.setAttribute("list",list);
%>
<c:forEach items="${list}" var="str" varStatus="s">
${s.index} ${s.count} ${str}<br>
</c:forEach>
</body>
</html>
案例:
需求:在request域中有一个存有User对象的List集合。需要使用jstl+el将list集合数据展示到jsp页面的表格table中。
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="cn.jsp.domain.User" %>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>test</title>
</head>
<body>
<%
List list = new ArrayList();
list.add(new User("张三",23,new Date()));
list.add(new User("李四",24,new Date()));
list.add(new User("王五",25,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="#8a2be2">
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.birStr}</td>
</tr>
</c:if>
<c:if test="${s.count % 2 != 0}">
<tr bgcolor="#d2691e">
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.birStr}</td>
</tr>
</c:if>
</c:forEach>
</table>
</body>
</html>
效果图:
三层架构:软件设计架构
1,界面层(表示层):用户看的界面。用户可以通过界面上的组件和服务器进行交互
2,业务逻辑层:处理业务逻辑的。
3,数据访问层:操作数据存储文件