EL 表达式的全称是: Expression Language。 是表达式语言。
EL 表达式的什么作用: EL 表达式主要是代替 jsp 页面中的表达式脚本在 jsp 页面中进行数据的输出。
因为 EL 表达式在输出数据的时候, 要比 jsp 的表达式脚本要简洁很多。
EL 表达式的格式是: ${表达式}
主要是输出域对象中的数据
当四个域中都有相同的的 key 的数据的时候, EL 表达式会按照四个域的从小到大的顺序去进行搜索, 找到就输出。
<body>
<%
//往四个域中都保存了相同的key 的数据。
request.setAttribute("key", "request");
session.setAttribute("key", "session");
application.setAttribute("key", "application");
pageContext.setAttribute("key", "pageContext");
%>
${
key }
</body>
empty 运算可以判断一个数据是否为空, 如果为空, 则输出 true,不为空输出 false。
以下几种情况为空:
.点运算, 可以输出 Bean 对象中某个属性的值。
[]中括号运算,可以输出有序集合中某个元素的值
并且[]中括号运算,还可以输出map集合中key里含由特殊字符的key值
<body>
<%
Map<String,Object> map = new HashMap<String, Object>();
map.put("a.a.a", "aaaValue");
map.put("b+b+b", "bbbValue");
map.put("c-c-c", "cccValue");
request.setAttribute("map", map);
%>
${
map['a.a.a'] } <br>
${
map["b+b+b"] } <br>
${
map['c-c-c'] } <br>
</body>
变量 | 类型 | 作用 |
---|---|---|
pageContext | PageContextImpl | 它可以获取 jsp 中的九大内置对象 |
pageScorpe | Map |
它可以获取pageContext域中的数据 |
requestScope | Map |
它可以获取 Request 域中的数据 |
sessionScope | Map |
它可以获取 Session 域中的数据 |
applicationScope | Map |
它可以获取 ServletContext 域中的数据 |
param | Map |
它可以获取请求参数的值 |
paramValues | Map |
Map |
header | Map |
它可以获取请求头的信息 |
headerValues | Map |
它可以获取请求头的信息, 它可以获取多个值的情况 |
cookie | Map |
它可以获取当前请求的 Cookie 信息 |
initParam | Map |
它可以获取在 web.xml 中配置的 |
pageScope pageContext 域
requestScope Request 域
sessionScope Session 域
applicationScope ServletContext 域
<%
pageContext.setAttribute(“key1”, “pageContext1”);
pageContext.setAttribute(“key2”, “pageContext2”);
request.setAttribute(“key2”, “request”);
session.setAttribute(“key2”, “session”);
application.setAttribute(“key2”, “application”);
%>
${ applicationScope.key2 }
<body>
<%--
request.getScheme() 它可以获取请求的协议
request.getServerName() 获取请求的服务器ip 或域名
request.getServerPort() 获取请求的服务器端口号
getContextPath() 获取当前工程路径
request.getMethod() 获取请求的方式(GET 或POST)
request.getRemoteHost() 获取客户端的ip 地址
session.getId() 获取会话的唯一标识
--%>
<%
pageContext.setAttribute("req", request);
%>
<%=request.getScheme() %> <br>
1.协议: ${
req.scheme }<br>
2.服务器 ip:${
pageContext.request.serverName }<br>
3.服务器端口:${
pageContext.request.serverPort }<br>
4.获取工程路径:${
pageContext.request.contextPath }<br>
5.获取请求方法:${
pageContext.request.method }<br>
6.获取客户端 ip 地址:${
pageContext.request.remoteHost }<br>
7.获取会话的 id 编号:${
pageContext.session.id }<br>
</body>
param Map
paramValues Map
输出请求参数 username 的值: ${
param.username } <br>
输出请求参数 password 的值: ${
param.password } <br>
输出请求参数 username 的值: ${
paramValues.username[0] } <br>
输出请求参数 hobby 的值: ${
paramValues.hobby[0] } <br>
输出请求参数 hobby 的值: ${
paramValues.hobby[1] } <br>
请求地址:
http://localhost:8080/09_EL_JSTL/other_el_obj.jsp?username=wzg168&password=666666&hobby=java&hobby=cpp
header Map
headerValues Map
输出请求头【User-Agent】的值:${
header['User-Agent'] } <br>
输出请求头【Connection】的值:${
header.Connection } <br>
输出请求头【User-Agent】的值:${
headerValues['User-Agent'][0] } <br>
cookie Map
获取 Cookie 的名称: ${ cookie.JSESSIONID.name }
获取 Cookie 的值: ${ cookie.JSESSIONID.value }
initParam Map
<context-param>
<param-name>username</param-name>
<param-value>root</param-value>
</context-param>
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql:///test
</context-param>
示例代码:
输出<Context-param>username 的值:${
initParam.username } <br>
输出<Context-param>url 的值:${
initParam.url } <br>
JSTL 标签库 是一个不断完善的开放源代码的 JSP 标签库
EL表达式主要是为了替代JSP中的表达式,而标签库则是为了替代代码脚本,这样使得整个jsp页面变得更加的简洁
在 jsp 标签库中使用 taglib 指令引入标签库
CORE 标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
XML 标签库
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
FMT 标签库
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
SQL 标签库
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
FUNCTIONS 标签库
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
作用:set 标签可以往域中保存数据
保存之前:${
sessionScope.abc } <br>
<c:set scope="session" var="abc" value="abcValue"/>
保存之后:${
sessionScope.abc } <br>
if 标签用来做 if 判断
<c:if test="${ 12 == 12 }">
<h1>12 等于 12</h1>
</c:if>
<c:if test="${ 12 != 12 }">
<h1>12 不等于 12</h1>
</c:if>
作用: 多路判断。 跟 switch … case … default 非常接近
<%--
iii.:choose> <c:when> <c:otherwise>标签
作用:多路判断。跟switch ... case .... default 非常接近
choose 标签开始选择判断
when 标签表示每一种判断情况
test 属性表示当前这种判断情况的值
otherwise 标签表示剩下的情况
<c:choose> <c:when> <c:otherwise>标签使用时需要注意的点:
1、标签里不能使用html 注释,要使用jsp 注释
2、when 标签的父标签一定要是choose 标签
--%>
<%
request.setAttribute("height", 180);
%>
<c:choose>
<%-- 这是html 注释 --%>
<c:when test="${ requestScope.height > 190 }">
<h2>小巨人</h2>
</c:when>
<c:when test="${ requestScope.height > 180 }">
<h2>很高</h2>
</c:when>
<c:when test="${ requestScope.height > 170 }">
<h2>还可以</h2>
</c:when>
<c:otherwise>
<c:choose>
<c:when test="${requestScope.height > 160}">
<h3>大于 160</h3>
</c:when>
<c:when test="${requestScope.height > 150}">
<h3>大于 150</h3>
</c:when>
<c:when test="${requestScope.height > 140}">
<h3>大于 140</h3>
</c:when>
<c:otherwise>
其他小于 140
</c:otherwise>
</c:choose>
</c:otherwise>
</c:choose
作用: 遍历输出使用。
遍历 1 到 10, 输出
<%--1.遍历1 到10,输出
begin 属性设置开始的索引
end 属性设置结束的索引
var 属性表示循环的变量(也是当前正在遍历到的数据)
for (int i = 1; i < 10; i++)
--%>
第${i}行