美文网首页
Web 基础16 JSP之EL 入门

Web 基础16 JSP之EL 入门

作者: 小熊先生很不开心 | 来源:发表于2018-03-31 18:38 被阅读23次

    1.1 EL表达式的概述

      全称是Expression Language

      EL(Expression Language) 是为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。

    • 来自百度百科

    • 主要作用

      • 获取域对象中的数据并输出
      • 执行运算并将结果输出
      • 获取WEB开发中的常用对象
    格式
        ${}
    

    1.2 EL表达式获取并输出其他类型的对象

    el表达式作用: 替代jsp页面中的<% 主要是用来展示数据的

    1.2.1 从4个域对象中根据键的名字获取值

    <%
    User u = new User("zhangsan",13);
    pageContext.setAttribute("aaa", u);
    %>
    ${aaa }  // 约等于pageContext.findAttribute("aaa")
    

    1.2.2 可以获取对象中的属性或者集合中的元素

    • 数组/集合:使用数组/集合名[索引] 来获得元素
    <%
    int[] arr ={1,2,3,4,5};
    pageContext.setAttribute("bbb", arr);
    %>
    ${bbb[1] }
    
    • 对象/map集合:使用对象名或者map名["属性名"]来获取对应的属性(标准写法)
    <%
    User u = new User("zhangsan",13);
    pageContext.setAttribute("aaa", u);
    %>
    ${aaa["username"] }
                
    
    • 对于对象/map集合还有一种简化写法,可以通过对象名/map集合名.属性名来获取对应的属性(简化写法)
    <%
    User u = new User("zhangsan",13);
    pageContext.setAttribute("aaa", u);
    %>
    ${aaa.username }
    
    • 有一种例外,map集合中有一个键值对,键是"a b c",值是"zzz"
    <%
    Map<String,String> map = new HashMap();
    map.put("abc", "www");
    map.put("a b c", "zzz");
    pageContext.setAttribute("ccc", map);
    %>
    ${ccc["a b c"]}
    
    • 注意:el表示式获取对象里面成员变量,调用的是成员变量的get方法
      • el表达式里面不能写菱形泛型

    1.3 使用EL表达式进行运算并输出结果

    • 数组里面没有元素 用${empty list }获得的是true
    • el表达式不能嵌套

    1.4 EL表达式内置对象的概述

    对象 简述
    pageContext 是JSP页面的上下文对象,代表了JSP页面
    pageScope 封装了pageContext域对象的数据
    requestScope 封装了request域对象的数据
    sessionScope 封装了session域对象的数据
    applicationScope 封装了application域对象的数据
    param 封装了表单提交的数据,Map的value类型是String
    paramValues 封装了表单提交的数据,Map的value类型是String[]
    header 封装了请求头,Map的value类型是String
    headerValues 封装了请求头,Map的value类型是String[]
    cookie 封装了客户端带来的cookie
    initParam 封装了WEB应用的初始化参数
    • 这里的内置和JSP的中的对象是有区别的

      • request对象作为域对象,除了3种方法(setAttribute(),getAttribute(),removeAttribute()) 还可以获得转发对象,进行转发,
      • 还可以得到请求的请求头,请求行,但是requestScope没有这些方法,他只是作为域-对象存储数据的map集合,他只能获取数据,
      • 而对于其他的功能,他是没有的,他其实是一个阉割版的域对象
    • 作用

      • 如果出现重名的属性,我们就可以用El表达式里面跟域对象相关的对象 来获取,如果没有重名的,直接${属性}就可以
      • requestScope 有一个username属性
      • sessionScope 有一个username属性
      • 直接用${username} 获取的是requestScope里面的username
      • 如果要获取sessionScope的username 那么${sessionScope.username}

    1.5 测试EL表达式的内置对象

    • 获取web应用的根路径:${pageContext.request.contextPath}

    • 注意:直接写cookie,得到的是一个Cookie对象

    • pageContext 页面上下文对象(完整的对象)

    比如:${pageContext.request.contextPath} 相当于 pageContext.getRequest().getContextPath()
    
    • pageScope requestScope sessionScope applicationScope 就是4个域对象存储数据的map集合,如果出现重名的属性,可以使用这4个来获取
    比如:${sessionScope.username}  相当于 pageContext.getAttribute("username",REQUEST_SCOPE);
    
    • param paramValues 就是表单提交过来的数据的map集合
    比如:${param.password} 相当于 request.getParamter("password")
    
    • header headerValues 获取请求消息头中的数据
    比如:${header["user-agent"]} 相当于 request.getHeader("ser-agent")
    
    • cookie 就是浏览器携带过来的所有cookie的map集合 键是cookie的名字 值是cookie对象
    map.put("username", new Cookie("username","zhangsan")) 类似这样把cookie对象放到map集合里面
    比如: ${cookie.username} 得到的是一个Cookie对象,  ${cookie.username.value} 得到的是Cookie对象里面的值
    
    • initParam 就是获得初始化参数,获取是应用的初始化参数<content-param>标签里面的值
    比如${ initParam.username} 相当于 ServletContext.getInitParam("usename")
    

    相关文章

      网友评论

          本文标题:Web 基础16 JSP之EL 入门

          本文链接:https://www.haomeiwen.com/subject/uicncftx.html