一、EL表达式
目的就是去掉JSP中的Java代码,都是以标签的形式表示,以标签的形式美工或者前端都可以修改,利于团队的合作。这套标签和Java语言无关。
JSP核心语法:JSP表达式 JSP脚本
JSP开发的原则:尽量在JSP页面少写甚至不写Java代码,Java代码放在Servlet。
使用EL表达式来代替JSP表达式
EL表达式的作用:向浏览器输出域对象(只能输出域对象)的变量或者表达式计算的结果。
语法:${变量或表达式} ${list}
JSP表达式:
EL表达式替代上面的脚本:${requestScope.name}
EL最主要的作用是获得四大域中的数据,格式${EL表达式}
- EL获得pageContext域中的值:${pageScope.key}; PageContext
- EL获得request域中的值:${requestScope.key};
- EL获得session域中的值:${sessionScope.key};
- EL获得application域中的值:${applicationScope.key}; ServletContext
${name} ${sessionScope.key}
从四个域对象中取某个值${}
依次从page域 < request域 < session域 < application域获取值,在某个域中找到不再往后找。
就是现在小的域范围找,找不到再去大的范围找.
1、获得普通字符串
2、获得Student对象的值
3、获得List的值
html
<body>
<%--${list}--%>
<%
//JSP页面内置对象
//pageContext、request、session、application(ServletContext)域对象,也是内置对象
//1.普通字符串
pageContext.setAttribute("name", "zhangsan");
request.setAttribute("name", "lisi");
//2.Student对象
Student student = new Student(1, "zhansga", 23, "男");
session.setAttribute("student", student);
//3.List<Student>
List<Student> list = new ArrayList<>();
Student student1 = new Student(1, "zhangsan1", 23, "男");
Student student2 = new Student(2, "zhangsan2", 23, "男");
Student student3 = new Student(3, "zhangsan3", 23, "男");
list.add(student1);
list.add(student2);
list.add(student3);
application.setAttribute("list", list);
%>
<%--JSP表达式--%>
<%=pageContext.getAttribute("name")%><br/>
<%=request.getAttribute("name")%><br/>
<%
Student stu = (Student) session.getAttribute("student");
%>
<%=stu.getName()%><br/>
<%=stu.getAge()%><br/>
<%=((Student) session.getAttribute("student")).getGender()%><br>
<%
List<Student> stuList = (List<Student>) application.getAttribute("list");
%>
<%=stuList.get(0).getName()%>
<hr/>
<%--EL表达式--%>
${pageScope.name}<br/>
${requestScope.name}<br/>
${name}<br/>
${sessionScope.student.name}<br/>
${student.age}<br/>
${list}<br/>
${list[0].name}<br/>
</body>
二、JSTL标签
JSTL(JSP Standard Tag Library),JSP标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能。jstl出现的目的同EL一样也是要代替JSP页面中的脚本代码。JSTL标准标准标签库有5个子库,但随着发展,目前常使用的是他的核心库
java
<%@ page import="com.situ.web.pojo.Student" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--1、向域对象放数据--%>
<%
pageContext.setAttribute("age", 23);
session.setAttribute("gender", "男");
%>
<c:set var="age" value="24" scope="request"></c:set>
${age} <br/>
<hr/>
<%--2、条件判断--%>
<c:if test="${gender=='男'}">
男
</c:if>
<c:if test="${gender=='女'}">
女
</c:if>
<hr/>
<%--3、多条件判断--%>
<c:set var="score" value="78"></c:set>
<c:choose>
<c:when test="${score>=90&&score<=100}">
优秀
</c:when>
<c:when test="${score>=80&&score<90}">
良好
</c:when>
<c:when test="${score>=70&&score<80}">
一般
</c:when>
<c:when test="${score>=60&&score<70}">
及格
</c:when>
<c:otherwise>
不及格
</c:otherwise>
</c:choose>
<hr/>
<%--4、集合遍历
List<Student>
Map<String, String>
Map<String, Student>
--%>
<c:forEach begin="1" end="10" var="i" step="1">
${i}
</c:forEach>
<br/>
<%
List<Student> list = new ArrayList<>();
Student student1 = new Student(1, "zhangsan1", 23, "男");
Student student2 = new Student(2, "zhangsan2", 23, "男");
Student student3 = new Student(3, "zhangsan3", 23, "男");
list.add(student1);
list.add(student2);
list.add(student3);
application.setAttribute("list", list);
%>
<c:forEach items="${list}" var="student">
${student.id}--${student.name}--${student.age}--${student.gender} <br/>
</c:forEach>
<hr/>
<%--Map<String, String>--%>
<%
Map<String, String> map = new HashMap<>();
map.put("cn", "中国");
map.put("us", "美国");
request.setAttribute("map", map);
%>
<c:forEach items="${map}" var="entry">
${entry.key}--${entry.value}<br/>
</c:forEach>
<hr/>
<%--Map<String, Student>--%>
<%
Map<String, Student> studentMap = new HashMap<>();
studentMap.put("student1", student1);
studentMap.put("student2", student2);
studentMap.put("student3", student3);
request.setAttribute("studentMap", studentMap);
%>
<c:forEach items="${studentMap}" var="entry">
${entry.key}--${entry.value.name}--${entry.value}<br/>
</c:forEach>
</body>
</html>
三、问题总结
JSP本质是Servlet
C:\Users\Gao\AppData\Local\JetBrains\IntelliJIdea2024.1\tomcat\ec76a933-0aaf-4bab-8eb7-d7c16c957743\work\Catalina\localhost\ROOT\org\apache\jsp