Java基础 EL表达式

EL表达式
EL表达式介绍
什么是EL表达式?
EL是expression Language的缩写,它是jsp内置的一种表达式语言,从jsp2.0开始,就不让在使用java脚本,而是使用el表达式来替换jsp中java脚本。
El表达式格式  ${表达式}
使用el表达式的主要敘是代替jsp页面上的<%=%>,也就是说,el表达式主要作用是向浏览器输出数据,例如${1+2} 会浏览器输出3.
 
为什么使用el表达式
       主要目的是为了替换jsp页面上的脚本,使用jsp更加简单,安全。
       EL主要作用:
1.      获取数据(主要是域中数据)
2.      执行运算
3.      获取web常用对象
4.      调用java方法(EL函数)
 
El表达式使用时注意事项
EL表达式是在jsp2.0规范中的一门技术,要想使用el表达式必须使用支持jsp2.0技术的web服务器(tomcat)
Jsp2.0对应的servlet版本是servlet2.4 对应 javaEE1.4.
而我们现在使用的servlet版本是servlet2.5  javaEE5.0
如果在程序中发现el不可以使用:
1.      tomcat是否版本有问题,使用tomcat6以上
2.      在jsp页面上是否设置了isELIgnored="true"
 
El表达式获取数据
El表达式怎样获取域中数据
1.      page域----------------------${pageScope.name}
2.      request域----------------------${requestScope.name}
3.      session域----------------------${sessionScope.name}
4.      application域----------------------${applicationScope.name}
使用el表达式获取时,如果没有查找到结果,返回的不是null,而是一个””.
 
1.      获取域中简单数据
El表达式获取复杂数据
<%@page import="cn.itcast.domain.User"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 
 
My JSP 'index.jsp' starting page
 
       EL获取域中复杂数据
      
       <%
              //定义一个数组
              String[] st = { "aa", "bb", "cc" };
              request.setAttribute("st", st);
       %>
       获取request域中st数组第二个值:
      
jsp:<%=((String[]) request.getAttribute("st"))[1]%>
       el:${requestScope.st[1]}
 
      
       <%
              //定义一个集合List
              List list = new ArrayList();
              list.add("111");
              list.add("222");
              list.add("333");
              request.setAttribute("list", list);
       %>
       获取request域中list集合中第二个值:
      
jsp:<%=((List) request.getAttribute("list")).get(1)%>
      
el:${requestScope.list[1]}
 
      
       <%
              //定义一个Map集合
              Map map = new HashMap();
              map.put("one", "aaa");
              map.put("two", "bbb");
              request.setAttribute("map", map);
       %>
       获取request域中map集合key=two的value值
      
jsp:<%=((Map) request.getAttribute("map"))
                                   .get("two")%>
      
el:${requestScope.map.two }
 
      
       <%
              //向request中存储一个javaBean
              User user = new User();
              user.setUsername("tom");
              user.setPassword("123");
              request.setAttribute("user", user);
       %>
       获取requst域中user对象的username属性值
      
jsp:<%=((User) request.getAttribute("user")).getUsername()%>
       el:${requestScope.user.username}
      
 
      
       在el中使用"."与[]可以实现同样的效果:
      
${user["username"]}
      
${user.username}
      
问题:.与[]有什么区别?
      
注意:如果名称中不包含特殊符号,那么.与[]一样,但是如果名称中包含了特殊符号,那么我们就只能使用[]
      
       <%
              request.setAttribute("login.msg", "用户名或密码错误");
       %>
      
${requestScope.login.msg }
      
${requestScope["login.msg"] }
 
      
       关于[]中名称如果不使用引号引起有什么问题?
      
       <%
              request.setAttribute("username", "fox");
              request.setAttribute("fox", "这是一个好人");
       %>
      
       ${requestScope["username"]}
       ${requestScope[username]}
 
EL执行运算
在el表达式中可以使用运算符来进行操作
1.      算术运算符 + - * /(div)  %(mod)
对于算术运算符注意+,它永远执行的就是加法运算。
 
2.      关系运算符  >(gt) >=(ge) <(lt) <=(le) == (eq) !=(ne)
执行关系运算它得到的结果就是boolean
3.      逻辑运算符
&&(and)  ||(or)  !(not)
执行逻辑运算得到的结果也是boolean
 
4.      三目运算符
(表达式1)?(表达式2):(表达式3)
它与java中的三元运算符一样。
 
5.      empty
                 i.           如果是一个普通对象,它判断对象是否为null,如果为null返回true.否则返回false.
                ii.           如果是一个容器(数组或集合),它不仅判断对象是否为null,还判断是否有元素。
 
El获取web常用对象
       主要是通过el内置对象来操作,它一共有11个内置对象
       pageScope  requestScope  sessionScope  applicationScope
      
       以下两个可以用于获取请求参数:
       param:获取一个Map key就是请求参数名称,value是值
       paramValues:获取一个Map它与request.getParameterMap()结果一样。
 
       header:获取一个Map它封装的是所有的http请求头信息
       headerValues:获取一个Map它封装的是所有的http请求头信息
 
       initParam 获取一个Map它封装了所有的全局初始化参数
 
cookie:获取一个Map 它封装了所有的http请求的中cookie信息,key就是cookie的名称,value就是这个cookie对象。
      
       pageContext 它与jsp页面上内置对象pageContext一样。
       我们在el中使用pageContext一般使用:
       ${pageContext.request.contextPath}
      
      
El函数
       Jstl标签库,在jstl标签库中有已经定义好的一些EL函数。
       EL函数它的本质是调用了一个java类的方法。
       在jsp页面上要使用EL函数必须导入jstl标签库。
      
在jsp页面上就可以使用el函数,例如
 
注意:如果在开发中,我们使用的不是myeclipse,那么我们在使用el函数时,必须导入jstl的jar包。因为我们使用的是myeclipse,它会默认导入javaee5.0的库,在这个库中包含了jstl标签库的jar文件,所以不用导入了。

JSTL标签库
JSTL介绍
JSTL(jsp standard tag Library) jsp标准标签库,它是apache对el表达式的扩展,jstl与el结合可以完成更强大的功能。
JSTL它是一种标签语言,它不是jsp内置标签,所以在使用JSTL需要导入相关的jar包。但是我们使用myeclipse开发,在创建web project时,会导入javaee5.0的类库,它已经包含了JSTL标签jar包所以我们不需要导入了,但是如果你使用的不是myeclipse,那么在使用jstl标签时,需要手动导入JSTL标签库。
注意,我们使用JSTL1.0版本以上才支持在JSTL中使用el表达式。
 
JSTL它的作用:
1.      core 核心标签库,重点学习
2.      fmt 格式化标签库,不使用,简单介绍
3.      sql 数据库标签库,过时不使用
4.      xml xml标签库,过时不使用
5.      jstl中包含了el函数库。
 
怎样在jsp页面上使用jstl标签:
1.      导入jstl的jar包
2.      在jsp页面上使用taglib指令来导入jstl
注意:没有jsp的是jstl1.0版本,它不支持el表达式,我们要使用带jsp,它是jstl1.0以上版本,支持el表达式。
3.      在jsp页面上使用jstl标签。
 
重点学习jstl的core标签库。
 
Jstl中核心标签
       一共有12个标签
1.      out
2.      set
3.      remove
4.      catch
5.      if
6.      choose when otherwise
7.      forEach(重要)
它的主要作用是用于循环操作。
简单使用
介绍c:forEach基本使用1

      ${n}
<%--
      上述代码相当于是
      for(int n=1;n<=10;n++){
             out.println(n);
      }
      begin:循环开始变量
      end:循环结束变量
      var:定义一个变量,用于接收循环
      step:步长
     --%>
 

介绍c:forEach基本使用2

      ${n}--${vs.count }--${vs.index}--${vs.first}--${vs.last}--${vs.current}
<%--
        varStatus它是用于记录循环状态,它是一个对象,可使用的属性有
        count:用来记录循环的元素的个数
        index:用来记录所循环的容器中的元素的下标
        first:判断当前是否是第一个元素
        last:判断当前是否是最后一个元素
        current:代表当前循环的元素
 --%>
高级使用
c:forEach高级使用:
   
   

遍历数组

    <%
           String[] st = { "aaa", "bbb", "ccc" };
           request.setAttribute("st", st);
    %>
   
           ${s}---${vs.index }
   
    <%--
           items:用于接收一个容器
           var:它是用于接收从容器中迭代出来元素
           上面代码相当于增强for循环
           for(String s:st){
           }
          
     --%>
   
   

遍历List集合

    <%
           List list = new ArrayList();
           list.add("111");
           list.add("222");
           list.add("333");
           request.setAttribute("list", list);
    %>
   
           ${n}
   
   
   
   

遍历Map集合

    <%
           Map map=new HashMap();
           map.put("one", "111");
           map.put("two", "222");
           request.setAttribute("map", map);
    %>
   
           ${entry.key}--${entry.value}
   
   
    <%--
           对map集合遍历,它相当于是使用entrySet()方法遍历
          
           Set> entry=map.entrySet();
           for(Map.Entry me:entry){
                  me.getKey()  me.getValue():
           }            
     --%>
 
8.      forToken
9.      import
10.    url ----param
11.    redirect
 
Jstl核心标签案例-显示商品信息
1.      创建一个Product类
类中有以下属性
2.      创建一个test.jsp页面
在页面上显示商品信息
生成数据
展示数据
 
 
 
 

你可能感兴趣的:(Java基础)