el表达式

el表达式的主要作用是代替jsp页面上的<%=   %>,也就是说,el表达式主要作用是向浏览器输出数据,例如${1+2} 会浏览器输出3.

EL主要作用:

  1. 获取数据(主要是域中数据)
  2. 执行运算
  3. 获取web常用对象
  4. 调用java方法(EL函数)

El获取web常用对象

主要是通过el内置对象来操作,它一共有11个内置对象

  • pageScope
  • requestScope 
  • sessionScope 
  • applicationScope

以下两个可以用于获取请求参数:

  •     param:获取一个Map<String,String> key就是请求参数名称,value是值
  •     paramValues:获取一个Map<String,String[]>它与request.getParameterMap()结果一样。

获取http请求头信息:

  •     header:获取一个Map<String,String>它封装的是所有的http请求头信息
  •     headerValues:获取一个Map<String,String[]>它封装的是所有的http请求头信息

获取全局初始化参数:

  •     initParam: 获取一个Map<String,String>它封装了所有的全局初始化参数

获取cookie对象:

  •     cookie:获取一个Map<String,Cookie> 它封装了所有的http请求的中cookie信息,key就是cookie的名称,value就是这个cookie对象。

pageContext对象:

  • pageContext 它与jsp页面上内置对象pageContext一样。

我们在el中使用pageContext一般使用:

${pageContext.request.contextPath}

El表达式获取域中数据

  • page域----------------------${pageScope.name}          //name是对应数据的name
  • request域----------------------${requestScope.name}
  • session域----------------------${sessionScope.name}
  • application域----------------------${applicationScope.name}

使用el表达式获取时,如果没有查找到结果,返回的不是null,而是一个””空字符串.

1

  el表达式获取域中复杂数据:List 和 Map 集合对象,自定义对象。

<%@page import="online.msym.bean.User"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>My JSP 'index.jsp' starting page</title>
</head>

<body>
    EL获取域中复杂数据
    <hr>
    <%
        //定义一个数组
        String[] st = { "aa", "bb", "cc" };
        request.setAttribute("st", st);
    %>
    获取request域中st数组第二个值:
    <br> jsp:<%=((String[]) request.getAttribute("st"))[1]%><br>
    el:${requestScope.st[1]}

    <hr>
    <%
        //定义一个集合List
        List<String> list = new ArrayList<String>();
        list.add("111");
        list.add("222");
        list.add("333");
        request.setAttribute("list", list);
    %>
    获取request域中list集合中第二个值:
    <br> jsp:<%=((List<String>) request.getAttribute("list")).get(1)%>
    <br> el:${requestScope.list[1]}

    <hr>
    <%
        //定义一个Map集合
        Map<String, String> map = new HashMap<String, String>();
        map.put("one", "aaa");
        map.put("two", "bbb");
        request.setAttribute("map", map);
    %>
    获取request域中map集合key=two的value值
    <br> jsp:<%=((Map<String, String>) request.getAttribute("map"))
                    .get("two")%>
    <br> el:${requestScope.map.two }

    <hr>
    <%
        //向request中存储一个javaBean
        User user = new User();
        user.setUsername("tom");
        user.setPassword("123");
        request.setAttribute("user", user);
    %>
    获取requst域中user对象的username属性值
    <br> jsp:<%=((User) request.getAttribute("user")).getUsername()%><br>
    el:${requestScope.user.username}
    <br>

    <hr>
    在el中使用"."与[]可以实现同样的效果:
    <br> ${user["username"]}
    <br> ${user.username}
    <br> 问题:.与[]有什么区别?
    <br> 注意:如果名称中不包含特殊符号,那么.与[]一样,但是如果名称中包含了特殊符号,那么我们就只能使用[]
    <br>
    <%
        request.setAttribute("login.msg", "用户名或密码错误");
    %>
    <br> ${requestScope.login.msg }    //这里不会打印出内容,因为获取的是空字符串””
    <br> ${requestScope["login.msg"] }   //这里会打印出:用户名或密码错误

    <hr>
    关于[]中名称如果不使用引号引起有什么问题?
    <br>
    <%
        request.setAttribute("username", "fox");
        request.setAttribute("fox", "这是一个好人");
    %>
    <br>
    ${requestScope["username"]}<br>    //这里会打印:fox
    ${requestScope[username]}        //这里会打印:这是一个好人
</body>
</html>

El表达式使用时注意事项:

    EL表达式是在jsp2.0规范中的一门技术,要想使用el表达式必须使用支持jsp2.0技术的web服务器(tomcat6以上)

    Jsp2.0对应的servlet版本是servlet2.4 对应 javaEE1.4.

    我现在使用的servlet版本是servlet2.5  javaEE5.0

如果在程序中发现el不可以使用:

  1. tomcat是否版本有问题,使用tomcat6以上;
  2. 在jsp页面上是否设置了isELIgnored="true"。
posted @ 2017-03-19 22:03  码上猿梦  阅读(608)  评论(0编辑  收藏  举报