目录
一、EL表达式
????????1、概念
????????2、作用
????????3、语法
????????4、注意
????????5、使用
6、隐式对象
7、c:set、c:out和c:remove
1.
2.
3.
二、JSTL
????????1、概念
????????2、作用
????????3、使用步骤
????????4、常用的JSTL标签
???????(1)if:相当于java代码的if语句
????????(2)choose:相当于java代码的switch语句
????????(3)foreach:相当于java代码的for语句
????????5、练习
三丶本章总结
一、EL表达式
????????1、概念
????????????????Expression Language 表达式语言
????????2、作用
????????????????替换和简化jsp页面中java代码的编写
????????3、语法
????????????????${表达式}
????????4、注意
????????????????jsp默认支持el表达式的。如果要忽略el表达式 ????????????????设置jsp中page指令中:isELIgnored="true",忽略当前jsp页面中所有的el表达式 ????????????????\${表达式}:忽略当前这个el表达式
????????5、使用
????????(1)运算
????????????????运算符:
- 算数运算符:+ - * /(div) %(mod)
- 比较运算符:> < >= <= == !=
- 逻辑运算符:&&(and) ||(or) !(not)
- 空运算符: empty
- 功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0
- ${empty list}:判断字符串、集合、数组对象是否为null或者长度为0
- ${not empty str}:表示判断字符串、集合、数组对象是否不为null 并且 长度>0
????????(2)获取值
????????(3)获取对象、List集合、Map集合的值
-
对象:${域名称.键名.属性名}
-
List集合:${域名称.键名[索引]} -
Map集合:
${域名称.键名.key名称} ${域名称.键名["key名称"]}
6、隐式对象
- el表达式中有11个隐式对象
pageContext :
- 获取jsp其他八个内置对象
${pageContext.request.contextPath} :动态获取虚拟目录
7、c:set、c:out和c:remove
1.<c:set>
<c:set>标签用于设置变量值和对象属性。它会计算表达式的值,然后使用计算结果来设置 JavaBean 对象或 java.util.Map 对象的值。
属性
- value:要存储的值
- var:存储信息的变量
- target:要修改的属性所属的对象
- property:要修改的属性
- scope:var属性的作用域
2.<c:out>
<c:out>标签用来显示一个表达式的结果,与<%= %>作用相似,它们的区别就是<c:out>标签可以直接通过"."操作符来访问属性。
举例来说,如果想要访问customer.address.street,只需要这样写:<c:out value=“customer.address.street”>。
<c:out>标签会自动忽略XML标记字符,所以它们不会被当做标签来处理。
属性
- value:要输出的内容
- default:输出的默认值
- escapeXml:是否忽略XML特殊字符(默认值为true表示会自动进行转义处理,手动设置为false后可以显示标签)
3.<c:remove>
<c:remove>标签用于移除指定作用域内的指定变量。
<c:remove var="<string>" scope="String">
- var:待移除的变量名称
- scope:?待移除变量所在的作用域(默认为page)
二、JSTL
????????1、概念
- ????????????????JavaServer Pages Tag Library JSP标准标签库
- 是由Apache组织提供的开源的免费的jsp标签?
<标签>
????????2、作用
- ????????????????用于简化和替换jsp页面上的java代码
????????3、使用步骤
- 导入jstl相关jar包
- 引入标签库:taglib指令: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- 使用标签
????????4、常用的JSTL标签
????????5、练习
- 需求:在request域中有一个存有User对象的List集合。需要使用jstl+el将list集合数据展示到jsp页面的表格table中
- 代码如下:
-
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.allen.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="green">
<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="red">
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.birStr}</td>
</tr>
</c:if>
</c:forEach>
</table>
</body>
</html>
-
package Servlet;
import entity.Dog;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@WebServlet("/TextServlet") //用注解给这个文件取个路径
public class TextServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setAttribute("a",10);
req.getSession().setAttribute("b",20);
Dog d1=new Dog("小白",2,"白色");
Dog d2=new Dog("小黑",3,"黑色");
List<Dog>list=new ArrayList<>();
list.add(d1);
list.add(d2);
req.getSession().setAttribute("list",list);
req.getSession().setAttribute("Flag",1);
req.getSession().setAttribute("html","<a>点我啊</a>");
req.getRequestDispatcher("index.jsp").forward(req,resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
} -
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<%--用于从作用域中取值--%>
<%--page<requset<session<application--%>
<%--可以不用写作用域,它会从小到大去寻找--%>
${requestScope.a}
${sessionScope.b}
<table border="2">
<c:forEach var="ob" items="${list}">
<tr>
<td>${ob.name}</td>
<td>${ob.age}</td>
<td>${ob.color}</td>
</tr>
</c:forEach>
</table>
<c:if test="${Flag>0}">
<h1>欢迎你,啊啊啊!</h1>
</c:if>
<c:if test="${Flag<=0}">
<h1>请登录!</h1>
</c:if>
<%-- var:键 value:值 scope:作用域--%>
<c:set var="cd" value="123" scope="session">
</c:set>
<c:out value="${html}" escapeXml="true"></c:out>
<c:out value="${html}" escapeXml="false"></c:out>
<c:out value="${cd}"></c:out>
</body>
</html>
三丶本章总结
- EL表达式的语法有$和{}两个要数,两者缺一不可。
- EL表达式提供了pageScope丶requestScope丶sessionScope丶applicationScope丶param丶paramValues丶pageContext丶cookie丶initParam等隐式对象。
- EL表达式具有类型无关性,可以使用点操作符或[]操作符取得某个属性的值。
- JSTL核心标签库中常用的标签有如下三类。
- 通用标签:<c:set>丶<c:out>丶<c:remove>。
- 条件标签:<c:if>丶<c:choose>丶<c:when>丶<c:otherwise>。
- 迭代标签:<c:forEach>。
- EL表达式与JSTL标签结合使用,可以在很大程度上减少在JSP中嵌入的Java代码,有利于程序的维护和扩展。
?
?
|