JSP EL表达式基本使用

今天我们来说EL表达式
这在整个jsp中都是非常重要的一章

因为 如果我们用 <%=属性%>
属性为空时 直接就是个 null 这个肯定是不能让用户看到的东西
所以 我们就需要EL表达式

例如 我们jsp代码编写如下

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%request.setCharacterEncoding("UTF-8");%>
DOCTYPE html>
<html>
<head>
    <title>JSP - Hello Worldtitle>
head>
<body>
<%=request.getAttribute("userName")%>、
body>
html>

这里 因为我们并没有设置过userName 所以肯定是没有值的 那么 他的默认值就是 null
页面效果如下
JSP EL表达式基本使用_第1张图片
实际开发中 也会存在很多变量没值的情况,那你不可能让用户看这个null啊 用户又不知道是什么情况

这边 我们可以将写法改成

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%request.setCharacterEncoding("UTF-8");%>
DOCTYPE html>
<html>
<head>
    <title>JSP - Hello Worldtitle>
head>
<body>
${userName}
body>
html>

${内容} 这就是一个标准的EL表达式
而且方便在 我们只需要写个名字 他就会自己去作用域找 不需要我们再什么什么get的了
然后 EL表达式的默认值是空字符串 而不是null
我们运行界面 看到效果
JSP EL表达式基本使用_第2张图片
刚才的null就没了

为了证明没问题 我们这里定义一下

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%request.setCharacterEncoding("UTF-8");%>
DOCTYPE html>
<html>
<head>
    <title>JSP - Hello Worldtitle>
head>
<body>
<%
    request.setAttribute("userName","你好");
%>
${userName}
body>
html>

我们在java代码中定义了request作用域中的 userName 的值为你好 然后下面用EL表达式输出
运行结果如下
JSP EL表达式基本使用_第3张图片
非常的完美

然后 这边需要注意 EL会自己去域对象中 拿取对应名字的变量 但是 他一般操作的都是域对象中的东西 他是操作不了局部变量的
还可以操作字面量 但比较少用 主要还是域对象
域对象 我们之前 JSP 四大域对象
中也讲过了

那么 这里就有个问题了 如果四个域对象设置同一个变量 它用谁的?
我们代码写成这样

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%request.setCharacterEncoding("UTF-8");%>
DOCTYPE html>
<html>
<head>
    <title>JSP - Hello Worldtitle>
head>
<body>
<%
    //设置page作用域
    pageContext.setAttribute("name","zhangsan");
    //设置request作用域
    request.setAttribute("name","lisi");
    //设置session作用域
    session.setAttribute("name","wangwu");
    //设置application作用域
    application.setAttribute("name","zhoaliu");
%>
${name}
body>
html>

我们运行之后看界面
JSP EL表达式基本使用_第4张图片
他采用了 page作用域的
那么 我们这里 可以总结为 EL 是从小到大去找 顺序就是 page request session application
取到了 他就不会去找其他作用域了

然后还有一个点就是 EL 不操作局部变量 我们可以这样写

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%request.setCharacterEncoding("UTF-8");%>
DOCTYPE html>
<html>
<head>
    <title>JSP - Hello Worldtitle>
head>
<body>
<%
    String name = "你好";
%>
${name}
body>
html>

运行之后 也会发现 EL是没能输出我们在局部定义的这个name的
JSP EL表达式基本使用_第5张图片
但是 很多人就会想 那EL 是不是表示我们就不能在不同作用域设置同名变量了呢?
当然不是 EL是方便jsp开发的 他不会限制你
我们可以将代码改成这样

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%request.setCharacterEncoding("UTF-8");%>
DOCTYPE html>
<html>
<head>
    <title>JSP - Hello Worldtitle>
head>
<body>
<%
    //设置page作用域
    pageContext.setAttribute("name","zhangsan");
    //设置request作用域
    request.setAttribute("name","lisi");
    //设置session作用域
    session.setAttribute("name","wangwu");
    //设置application作用域
    application.setAttribute("name","zhoaliu");
%>
<p>${pageScope.name}p>
<p>${requestScope.name}p>
<p>${sessionScope.name}p>
<p>${applicationScope.name}p>
body>
html>

作用域后跟Scope
告诉它去哪个作用域取
运行结果如下
JSP EL表达式基本使用_第6张图片
但这里还是建议大家不要取同样的名字 毕竟 搞不好自己都弄混了 别人看也不好维护

你可能感兴趣的:(java,vue.js,开发语言)