EL表达式
Expression Language 表达式语言
EL表达式可以替代JSP中的java代码,让JSP文件中的程序看起来更加整洁美观。
EL表达式属于JSP
EL表达式出现在JSP中
从某个作用域中取数据,然后将其转换为字符串,然后将其输出到浏览器。
从某个域中取数据
将取来的数据转出字符串
将字符串输出到浏览器
jsp表达式-->EL表达式
EL表达式获取数据
从某个作用域中取数据,然后将其转换为字符串,然后将其输出到浏览器。
<%
request.setAttribute("username","张三");
%>
<%=request.getAttribute("username")%>
EL表达式
${username}
EL表达式的使用(EL表达式只负责取数据,不负责存数据)
${表达式}
EL表达式会从某个范围中取数据,将其转为字符串,输出至浏览器。如果是object,自动调用toString。
${Object}
输出对象的属性(自动调用get方法)
// Object.username需要提供get方法。
${Object.username}
//添加双引号当做String输出到浏览器
${“Object.username”}
//${Object}与${“Object”}的区别
${Object}表示从某个域中取出数据并输出到浏览器中
${“Object”}表示将String字符串“Object”输出到浏览器中。
<%
//session.setAttribute("value","session");
//request.setAttribute("value","request");
//pageContext.setAttribute("value","pageContext");
application.setAttribute("value","application");
%>
${value}
<br>
<%--在没有指定范围中:EL表达式有限从小范围开始写--%>
pageContext < request < session < application
<%
Staff staff =new Staff();
staff.setName("小红");
request.setAttribute("value",staff);
Map<String,Staff> staffMap =new HashMap<>();
staffMap.put("staff",staff);
request.setAttribute("value2",staffMap);
// 定义数组
int[] a={1,2,3,4,5};
request.setAttribute("array",a);
//定义list集合
List<String> list =new ArrayList<>();
list.add("张三");
list.add("李四");
request.setAttribute("list2",list);
%>
<%--取对象staff的属性值name EL的三种方式--%>
${value}
${value.name}
${value["name"]}
<%--将map集合中的staff对象的username取出--%>
<br>
map:
${value2.staff.name}
<br>
数组:<br>
<%--EL表达式取数组中的值--%>
输出数组对象:${array}<br>
根据下标输出:${array[0]}<br>
数组越界:${array[999]} 不显示,也不报错<br>
<%--取出list的值 --%>
list<br>
${list2.get(0)}
${list2.get(1)}
<br>
${list2[0]}
${list2[1]}<br>
<%--isELIgnored="true" true为设置忽略EL表达式--%>
<%@page contentType="text/html; charset=UTF-8" isELIgnored="true"%>
<%--EL表达式获取应用的根路径--%>
${pageContext.request.contextPath}
EL获取数据
<%--<%=request.getParameter("id")%>== ${param.id} --%>
hello <br>
id:<%=request.getParameter("id")%>
<br>
id:${param.id}
<%--param获取的是一维数组[0]、paramValues[下标]获取任意下标的值--%>
hello <br>
id:<%=request.getParameter("id")%>
<br>
id:${param.id}<br>
password:${param.password}<br>
paramValues:${paramValues.id[3]}
<%--param获取的是一维数组[0]、paramValues[下标]获取任意下标的值--%>
ServletContext是Servlet上下文对象,对应的JSP九大内置对象是application
Servlet上下文初始化参数
上下文初始化参数被封装到:ServletContext对象当中
<context-param>
<param-name>hello</param-name>
<param-value>123456</param-value>
</context-param>
EL表达式运算符
算术运算符: + - * / %
关系运算符: == != > < >= <= eq(equals())
逻辑运算符:! && || not and or ( ! 和 not两个都是取反)
条件运算符(类似三目运算符): ? :
取值运算符: = .
Empty运算符:
<%--EL表达式中的+号,不能字符串拼接--%>
${99+"aaa"}<%--这样会500报错--%>
${"a" == "a"}<%--返回值:true--%>
${对象 == 对象}<%--Object地址相同则返回值:true--%>
JSTL
Java Standard Tag Lib(Java标准的标签库)
JSTL标签库通常结合EL表达式一起使用。为了让在JSP中的java代码消息。
或Maven引入JSTL标签库
<!-- 引入JSTL标签库-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<!-- groupId不是javax.servlet.jsp.jstl-->
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
!使用标签,但背后是java程序
核心标签库指向是的一个c.tld文件。而c.tld文件实际上是一个xml配置文件。
Jstl.sjp页面
%--引入核心标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--格式化标签库--%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%--sql标签库--%>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
常用标签
<%
List<String> list =new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("hhh");
request.setAttribute("list",list);
%>
<%--forEach标签
遍历list
items=""指定集合
var="" 代表集合中的每一个元素
begin="1"开始下标
End="10"结束下标
step="1"步长
varStatus表示var的状态对象(java对象)可用于序号从1开始递增
--%>
<c:forEach items="${list}" var="s" varStatus="listStatus">
记号:${listStatus.count} value:${s}<br>
</c:forEach>
if标签
<%--if标签
test="" boolean布尔类型
var不是必须的
scope指定var的存储范围
将var的a存储到request域中
--%>
<c:if test="${empty list}" var="a" scope="request">
<h3>list集合为null</h3>
</c:if>
<%--a变量中存储的是test属性的值--%>
${a}
<%--
类似
if(){
}else if(){
}else{
}
--%>
<c:choose>
<c:when test="${param.age < 18}">
未成年
</c:when>
<c:when test="${param.age >= 18}">
成年人
</c:when>
<c:otherwise>
不存在
</c:otherwise>
</c:choose>
forEach标签案例
Servlet将集合放入request域
StaffDao mapper = sqlSessionAuto.getMapper(StaffDao.class);
List<Staff> staffs = mapper.selectALL();
//将查询结果放入请求域中
request.setAttribute("staffs",staffs);
Jsp页面
Foreach标签使用案例
<%--引入核心标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:forEach items="${staffs}" var="s">
<tr>
<td>${s.id}</td>
<td>${s.name}</td>
<td>${s.diploma}</td>
<td>${s.title}</td>
<td>${s.marriage}</td>
<td>${s.status}</td>
<td>${s.workTime}</td>
<td>
<a href="javascript:void(0)" onclick="delect(${s.id})">删除</a>
<a href="${pageContext.request.contextPath}/os/modify?id=${s.id}">修改</a>
<a href="${pageContext.request.contextPath}/os/Payslips?id=${s.id}">工资条</a>
</td>
</tr>
</c:forEach>
</table>
在HTML页面中有<base>标签,用来设置基础路径
<base>标签出现在<head>中
设置基础路径<base href="http://locahost:8080/personnerlOS/">:表示但凡在html中的路径没事以”/”开始都会自动加上。
<base>标签是html的语法, 注意:<base>标签对JS代码不起作用
<a href="test/hello"> == <a href=" http://locahost:8080/personnerlOS/test/hello">