• EL表达式的使用


    E L(Expression Language)  目的:为了使JSP写起来更加简单。

    1、获取数据
         ${expression}

    2、[ ]与.运算符
         EL 提供“.“和“[ ]“两种运算符来存取数据。
         当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用“[ ]“。例如:
             ${user.My-Name}应当改为${user["My-Name"] }
         如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。例如:
             ${sessionScope.user[data]}中data 是一个变量
    3、变量
         EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。
         因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找

    使用范例:

    <%@page import="org.eclipse.jdt.internal.compiler.lookup.ImportConflictBinding"%>
    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
    <%@page import="com.entity.People"%>
    <%@page import="java.util.*"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Insert title here</title>
    </head>
    <body>
      <!-- 直接取数据 -->
        <%
            pageContext.setAttribute("info1", "page范围属性");
            request.setAttribute("info1", "request范围属性");
            session.setAttribute("info1", "session范围属性");
            application.setAttribute("info1", "application范围属性");
        %>
        ${info1}
        <hr>

    <!-- 提交表单参数 --> <form action="el.jsp" method="psot"> name属性:<input type="text" name="name" /> <br> age属性:<input type="text" name="age" /> <br> <input type="submit" value="提交到el.jsp"> <hr>

    <!-- paramValues提交一组参数 --> <form action="el.jsp" method="post"> <input type="checkbox" name="hobby" value="java语言" />java语言 <input type="checkbox" name="hobby" value="C语言" />C语言 <input type="checkbox" name="hobby" value="php语言" />php语言 <br> <input type="submit" value="提交到el.jsp"> <hr>

    <!-- 对象操作 --> <% People zhangsan = new People(); zhangsan.setId(1); zhangsan.setName("zhangsan"); zhangsan.setAge(12); request.setAttribute("zhangsan", zhangsan); %> 编号:${zhangsan.id }<br> 姓名:${zhangsan.name }<br> 年龄:${zhangsan.age }<br> <hr>
    <!-- list操作 --> <% People p1 = new People(); p1.setName("张三"); People p2 = new People(); p2.setName("李四"); List<People> list = new ArrayList<People>(); list.add(p1); list.add(p2); request.setAttribute("list",list); %> <!-- 取list指定位置的数据 --> ${list[0].name} ${list[1].name} <hr> <!-- 运算符操作 --> <% request.setAttribute("num1", 10); request.setAttribute("num2", 3); request.setAttribute("flog1", true); request.setAttribute("flog2", false); %> 算术运算符<br> num1=${num1 },num2=${num2 }<br> num1+num2=${num1+num2 }<br> num1-num2=${num1-num2 }<br> num1-num2=${num1-num2 }<br> num1*num2=${num1*num2 }<br> num1/num2=${num1/num2 }<br> num1%num2=${num1%num2 } <hr> 关系运算符<br> flag1=${flag1 },flag2=${flag2 }<br> flag1 && flag2: ${flag1 && flag2 }<br> flag1 || flag2: ${flag1 || flag2 }<br> !flag1: ${!flag1} } <hr> 三目运算符<br> num1>num2: ${num1>num2?"yes":"no" } <hr> 判断空操作:${empty num1 } EL表达式中使用二元表达式<hr> <% session.setAttribute("user",new People("张三")); %> ${user==null? "对不起,您没有登陆 " : user.username} </body> </html>

      在对对象进行操作时要用<%@page import%>把包引进来  

     <%=user.getAddr( ) %>等价于${user.addr} 

    el.jsp页面范例:

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Insert title here</title>
    </head>
    <body>
        this is el.jsp
        <%
            request.setCharacterEncoding("utf-8");
        %>
        <!--表单提交过来的参数 -->
        姓名:${param.name}<br>
        年龄:${param.age}<hr>
        <!-- 提交过来的一组参数 -->
        技能1:${paramValues.hobby[0]}<br>
        技能2:${paramValues.hobby[1]}<br>
        技能3:${paramValues.hobby[2]}
    </body>
    </html>

     4、表达式内置对象说明

    EL表达式语言中定义了11个隐含对象,使用这些隐含对象可以很方便地获取web开发中的一些常见对象,并读取这些对象的数据。
      语法:${隐式对象名称}:获得对象的引用

    序号 隐含对象名称 描       述
    1 pageContext 对应于JSP页面中的pageContext对象(注意:取的是pageContext对象。)
    2 pageScope 代表page域中用于保存属性的Map对象
    3 requestScope 代表request域中用于保存属性的Map对象
    4 sessionScope 代表session域中用于保存属性的Map对象
    5 applicationScope 代表application域中用于保存属性的Map对象
    6 param 表示一个保存了所有请求参数的Map对象
    7 paramValues 表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个string[]
    8 header 表示一个保存了所有http请求头字段的Map对象,注意:如果头里面有“-” ,例Accept-Encoding,则要header[“Accept-Encoding”]
    9 headerValues 表示一个保存了所有http请求头字段的Map对象,它对于某个请求参数,返回的是一个string[]数组。注意:如果头里面有“-” ,例Accept-Encoding,则要headerValues[“Accept-Encoding”]
    10 cookie 表示一个保存了所有cookie的Map对象
    11 initParam 表示一个保存了所有web应用初始化参数的map对象

     示例代码:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML>
    <html>
    <head>
    <title>el隐式对象</title>
    </head>
    
    <body>
        1、pageContext对象:获取JSP页面中的pageContext对象
        <br /> ${pageContext}
        <hr>
        2、pageScope对象:从page域(pageScope)中查找数据
        <br />
        <%
            pageContext.setAttribute("name", "张三"); //map
        %>
        ${pageScope.name}
        <hr>
        3、requestScope对象:从request域(requestScope)中获取数据
        <br />
        <%
            request.setAttribute("name", "李四"); //map
        %>
        ${requestScope.name}
        <hr>
        4、sessionScope对象:从session域(sessionScope)中获取数据
        <br />
        <%
            session.setAttribute("user", "sf1"); //map
        %>
        ${sessionScope.user}
        <hr>
        5、applicationScope对象:从application域(applicationScope)中获取数据
        <br />
        <%
            application.setAttribute("user", "sf2"); //map
        %>
        ${applicationScope.user}
        <hr>
        6、param对象:获得用于保存请求参数map,并从map中获取数据
        <br />
        ${param.name}
        <!-- 此表达式会经常用在数据回显上 -->
        <form
            action="${pageContext.request.contextPath}/servlet/RegisterServlet"
            method="post">
            <input type="text" name="username" value="${param.username}">
            <input type="submit" value="注册">
        </form>
        <hr>
        7、paramValues对象:paramValues获得请求参数//map{"",String[]}
        <br />
        <!-- http://localhost:8080/JavaWeb_EL_Study_20140826/ELDemo03.jsp?like=aaa&like=bbb -->
        ${paramValues.like[0]} ${paramValues.like[1]}
        <hr>
        8、header对象:header获得请求头
        <br /> ${header.Accept}
        <br />
        <%--${header.Accept-Encoding} 这样写会报错
                     测试headerValues时,如果头里面有“-” ,例Accept-Encoding,则要headerValues[“Accept-Encoding”]
                --%>
        ${header["Accept-Encoding"]}
        <hr>
        9、headerValues对象:headerValues获得请求头的值
        <br />
        <%--headerValues表示一个保存了所有http请求头字段的Map对象,它对于某个请求参数,返回的是一个string[]数组 
                例如:headerValues.Accept返回的是一个string[]数组 ,headerValues.Accept[0]取出数组中的第一个值
                --%>
        ${headerValues.Accept[0]}
        <br />
        <%--${headerValues.Accept-Encoding} 这样写会报错
                     测试headerValues时,如果头里面有“-” ,例Accept-Encoding,则要headerValues[“Accept-Encoding”]
                     headerValues["Accept-Encoding"]返回的是一个string[]数组,headerValues["Accept-Encoding"][0]取出数组中的第一个值
                --%>
        ${headerValues["Accept-Encoding"][0]}
        <hr>
        10、cookie对象:cookie对象获取客户机提交的cookie
        <br />
        <!-- 从cookie隐式对象中根据名称获取到的是cookie对象,要想获取值,还需要.value -->
        ${cookie.JSESSIONID.value} //保存所有cookie的map
        <hr>
        11、initParam对象:initParam对象获取在web.xml文件中配置的初始化参数
        <br />
        <%--
             <!-- web.xml文件中配置初始化参数 -->
           <context-param>
               <param-name>xxx</param-name>
               <param-value>yyyy</param-value>
           </context-param>
           <context-param>
               <param-name>root</param-name>
               <param-value>/JavaWeb_EL_Study_20140826</param-value>
           </context-param>
             --%>
        <%--获取servletContext中用于保存初始化参数的map --%>
        ${initParam.xxx}
        <br /> ${initParam.root}
    </body>
    </html>

    RegisterServlet的代码如下:

    package com.web.controller;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class RegisterServlet extends HttpServlet {
        /* 
         * 处理用户注册的方法
         */
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            //1、接收参数
            String userName = request.getParameter("username");
            /**
             * 2、直接跳转回/ELDemo03.jsp页面,没有使用request.setAttribute("userName", userName)将userName存储到request对象中
             * 但是在ELDemo03.jsp页面中可以使用${param.username}获取到request对象中的username参数的值
             */
            request.getRequestDispatcher("/ELDemo03.jsp").forward(request, response);
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    }

    注意:
      测试header和headerValues时,如果头里面有“-” ,例Accept-Encoding,则要header["Accept-Encoding"]、headerValues["Accept-Encoding"]
      测试cookie时,例${cookie.key}取的是cookie对象,如访问cookie的名称和值,须${cookie.key.name}或${cookie.key.value}

    使用EL调用Java方法

      EL表达式语法允许开发人员开发自定义函数,以调用Java类的方法。语法:${prefix:method(params)}
      在EL表达式中调用的只能是Java类的静态方法,这个Java类的静态方法需要在TLD文件中描述,才可以被EL表达式调用。
      EL自定义函数用于扩展EL表达式的功能,可以让EL表达式完成普通Java程序代码所能完成的功能。

    是否启用EL表达式:

      <%@ page isELIgnored="true" %> 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中默认的启用EL语言

  • 相关阅读:
    springboot:springboot初识(相关概念、新建项目)
    ssm项目无法加载静态资源
    js:初识(相关概念、js代码的书写位置、注释方式、输入输出语句)
    lucene:索引维护(删除、更新、查询)
    数据库连接池:Durid(执行流程、工具类)
    redis:HyperLogLog&发布订阅(HyperLogLog的概念和命令、redis的发布订阅)
    redis:zset(赋值、取值、删除、修改分数)
    css:css3新特性(过渡)
    css:css3新特性(盒子模型的box-sizing属性、图片模糊处理、calc函数)
    css:css3新特性(属性选择器、结构伪类选择器)
  • 原文地址:https://www.cnblogs.com/hefeisf/p/4635902.html
Copyright © 2020-2023  润新知