JavaWEB-05---EL 表达式 & JSTL 标签库

EL 表达式 & JSTL 标签库

EL 表达式

什么是 EL 表达式, EL 表达式的作用?

EL 表达式的全称是: Expression Language。 是表达式语言。
EL 表达式的什么作用: EL 表达式主要是代替 jsp 页面中的表达式脚本在 jsp 页面中进行数据的输出。
因为 EL 表达式在输出数据的时候, 要比 jsp 的表达式脚本要简洁很多。

EL 表达式的格式是: ${表达式}

EL 表达式搜索域数据的顺序

主要是输出域对象中的数据

当四个域中都有相同的的 key 的数据的时候, EL 表达式会按照四个域的从小到大的顺序去进行搜索, 找到就输出。

<body>
    <%
        //往四个域中都保存了相同的key 的数据。
        request.setAttribute("key", "request");

        session.setAttribute("key", "session");
        application.setAttribute("key", "application");
        pageContext.setAttribute("key", "pageContext");
    %>
    ${
      key }
</body>

EL 表达式输出 Bean 的普通属性, 数组属性。 List 集合属性, map 集合属性

empty 运算

empty 运算可以判断一个数据是否为空, 如果为空, 则输出 true,不为空输出 false。

以下几种情况为空:

  • 值为 null 值的时候, 为空
  • 值为空串的时候, 为空
  • 值是 Object 类型数组, 长度为零的时候
  • list 集合, 元素个数为零
  • map 集合, 元素个数为零
  1. 三目运算

“.”点运算 和 [] 中括号运算符

.点运算, 可以输出 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>

EL 表达式的 11 个隐含对象

变量 类型 作用
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 中配置的上下文参数

EL 获取四个特定域中的属性

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 }

pageContext 对象的使用

<body>
    <%--
        request.getScheme() 它可以获取请求的协议
        request.getServerName()  获取请求的服务器ip 或域名
        request.getServerPort() 获取请求的服务器端口号
        getContextPath() 获取当前工程路径
        request.getMethod()  获取请求的方式(GETPOST)
        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>

EL 表达式其他隐含对象的使用

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 的名称: ${ cookie.JSESSIONID.name } 
获取 Cookie 的值: ${ cookie.JSESSIONID.value }

initParam Map 它可以获取在 web.xml 中配置的上下文参数

<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>

示例代码:

输出&lt;Context-param&gt;username 的值:${
      initParam.username } <br>
输出&lt;Context-param&gt;url 的值:${
      initParam.url } <br>

JSTL 标签库

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" %>

core 核心库使用

(使用很少)

作用: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}行

你可能感兴趣的:(JavaWeb,java,jsp,js,web)