zoukankan      html  css  js  c++  java
  • javaweb回顾第九篇EL表达式

     前言:关于EL表示式开发用的非常多,现在我们回顾一下关于如果去操作EL表达式

    1:EL表达式语法

    所有EL表达式都是由{开始}结束,表达式中用.和[]操作符来访问数据比喻${user.userName}、${user["userName"]}是等效的。

    2:几个重要的操作符

    算术,逻辑,关系操作符和我们java语法操作的一样。

    2.1:Empty操作符

    Empty操作是判断一个值是否为null或者"",写法如${!empty user}

    2.2:三目运算符

    EL表达式同时也是支持三目运算符${A?结果1:结果2}比如:${1+1>2?1:2}输出的结果是2

    3:隐含对象

    在EL表达式中有11中隐含对象下面我一一列举下来

    3.1:pageContext

    pageContext是javax.servlet.jsp.PageContext的实例,可以通过pageContext访问ServletContext,Request,Response,Session等对象。

    3.2:pageScope

    我们以前看过Jsp的作用域,这个和Jsp作用域一样,从意思我们可以看出这个主要是获取页面范围内属性的。我们看个例子我们先创建一个jsp文件

    <%
    UserBean user1=new UserBean();
    user1.setAge(12);
    user1.setEmail("123@outlook.com");
    user1.setUserName("李四");
    pageContext.setAttribute("user1", user1);
    %>

    然后我们开始访问${pageScope.user1.userName} 我也顺便把第一个pageContext的应用加上${pageContext.request.requestURI}

    <body>
    ${pageContext.request.requestURI}
    ${pageScope.user1.userName}
    </body>

    3.3:requestScope

    主要获取请求范围内的属性的值,在上面的代码修改为以下代码

    <%
    UserBean user1=new UserBean();
    user1.setAge(12);
    user1.setEmail("123@outlook.com");
    user1.setUserName("李四");
    request.setAttribute("user", user1);
    %>

    jsp中的el为${requestScope.user1.userName}

    3.4:sessionScope

     这个主要获取会话范围中属性的值。 我们先建立一个Servlet类然后给Session赋值

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
            UserBean user=new UserBean();
            user.setAge(19);
            user.setEmail("16455@qq.com");
            user.setUserName("张三");
            HttpSession session=request.getSession();
            session.setAttribute("user", user);
        }

    然后在el.jsp中来获取Session属性的值${sessionScope.user.userName},记得先运行Servlet类然后在运行el.jsp效果如下

    3.5:applicationScope

    这个是获取全局范围内对象的值,这个不过多的说和上面都一样。

    3.6:param

    如果我们想获取URL(http://localhost:8080/taglib-test/el.jsp?userName=赵四)请求的参数值,我们就可以使用${param.userName}来获取

    3.7:paramValues

    这个主要来获取参数请求参数的相关信息是一个数组,用的不是很多

    3.8:header

    用来获取请求的头信息,如${header["User-Agent"]}来获取头信息中参数的值

    3.9:headerValues

    主要用来获取请求头信息所有的值。

    3.10:cookie

    不用说太多

    3.11:initParam

    主要获取web应用程序初始化参数的值

    4:命名变量

    在EL表达式中对于命名变量值是通过pageContext.findAttribute()方法来查找完成的,比喻上面如果我们不写他们的范围,那么就会按照page,Request,Session,application来进行查找,所以我们尽量去写,这样可以达到优化程序的目的。

    5:EL表达式使用函数

    这个和自定义标签很像,我们也可以使用函数

    首先我们先定义一个类(我创建了一个很简单的)

    public class ElFun {
        public static String getHelloWorld(String str)
        {
            return str;
        }
    }

    然后我们在创建一个tld文件

    <?xml version="1.0" encoding="GBK"?>  
    <taglib xmlns="http://java.sun.com/xml/ns/j2ee"       
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
        http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"       
        version="2.0">     
        <!-- 定 义函数版本 -->  
        <tlib-version>1.0</tlib-version>  
        <!-- 定 义函数名称 -->  
        <short-name>el</short-name>  
        <!-- 定 义第一个函数 -->  
        <function>  
            <!-- 定 义一个函数 -->  
            <name>hello</name>  
            <!-- 定 义函数处理类 -->  
            <function-class>com.lp.els.ElFun</function-class>  
            <!-- 定 义函数的对应方法 -->  
            <function-signature>  
                java.lang.String getHelloWorld(java.lang.String)  
            </function-signature>  
        </function>    
    </taglib> 

    大家注意一个事项:就是这个定义的函数名是你jsp中el表达式要引用的不要弄错了

    然后我们就可以在jsp页面引用

    <body>
    <%@ taglib uri="/WEB-INF/tlds/el.tld" prefix="el"%>
    ${el:hello("Hello World")}
    </body>

    从这里我们看到el后面的hello并不是我们在类中getHelloWorld。还有就是不要习惯性的在el表达式后面加入;号,会带来 错误。最后指的说明的是如果使用EL表达式一定要把值存放起来,比喻存放Request,application,pageContext,Session等,如果不存放是无法使用的。

  • 相关阅读:
    DFS复习
    二叉搜索树专题
    二叉树路径问题
    二叉树LCA--leetcode236题
    二叉树创建与前、中、后序遍历
    leetCode--n数之和--哈希表/双指针
    leetCode--单词接龙--BFS
    vue-router简单实现
    Promise的简单实现
    闭包&作用域链&let
  • 原文地址:https://www.cnblogs.com/LipeiNet/p/5746182.html
Copyright © 2011-2022 走看看