EL表达式语言

1,EL表达式简介


¨ EL 全名为Expression Language。EL主要作用:
¨ 获取数据:
EL表达式主要用于替换JSP页面中的 脚本表达式,以从各种类型的web域 中检索java对象、 获取数据。(某个web域中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)
¨ 执行运算:
利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。${user==null}
¨ 获取web开发常用对象
EL表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。
¨ 调用Java方法
EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。
2, 获取数据

¨ 使用EL表达式获取数据语法:“${标识符}”
¨ EL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、request、session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回””(注意,不是null,而是空字符串)。
¨ 示例:${user}
¨ EL表达式也可以很轻松获取JavaBean的属性,或获取数组、Collection、Map类型集合的数据,例如:
${user.address.city}
${user.list[0]}:访问 有序集合某个位置 的元素
${map.key}  : 获得map集合中指定key的 结合JSTL的foreach标签,使用EL表达式也可以很轻松迭代各种类型的数组或集合,示例:
迭代数组
迭代collection类型集合迭代map类型集合
3, 执行运算

empty运算符:检查对象是否为null或“空”, 很好用!!!
二元表达式:${user!=null?user.name: “”} , 很好用!!!
[ ] 和. 号运算符

4,获得web开发常用对象

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

5,执行运算


¨ 运算示例index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    
    <title>My JSP 'login.jsp' starting page</title>
    
    

  </head>
 
  <body>
    <form action="index.jsp" method="post">
        <table>
            <tr>
                    <td>用户名</td>
                    <td><input type="text" name="name"></td>
            </tr>
            <tr>
                    <td>密码</td>
                    <td><input type="password" name="pass"></td>
            </tr>
            <tr>
                <td>爱好</td>
                <td>
                    <input type="checkbox" name="likes" value="book">看书
                    <input type="checkbox" name="likes" value="sport">运动
                    <input type="checkbox" name="likes" value="run">     跑
                </td>
            </tr>
            <tr>
                    
                    <td><input type="submit" value="提交" ></td>
                    <td><input type="reset"  value="重置" ></td>
            </tr>
        </table>
    </form>
  </body>
</html>
2,GroupDao
package dao;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import bean.Group;
import bean.User;

public class GroupDao {

    public static Group getList(){
        
        Group group=new Group();
        User u1=new User("1","张3","123455",19,true,100);
        User u2=new User("2","李四","123455",21,false,80);
        User u3=new User("3","王五","123455",20,true,90);
        List<User> list=new ArrayList<User>();
        list.add(u1);
        list.add(u2);
        list.add(u3);
        
        group.setList(list);
        
        return group;
    }
    
public static Group getMap(){
        
    Group group=new Group();
    User u1=new User("1","张3","123455",19,true,100);
    User u2=new User("2","李四","123455",21,false,80);
    User u3=new User("3","王五","123455",20,true,90);
    
    Map<String,User> map=new HashMap<String,User>();
    
    map.put(u1.getId(),u1);
    map.put(u2.getId(),u2);
    map.put(u3.getId(),u3);
    
    return group;
    }
}
3,TagUtil.java
package util;

public class TagUtil {
    public static String trans(String str){
        
        StringBuffer stb=new StringBuffer();
        for(int i=0;i<str.length();i++){
            char c=str.charAt(i);
            switch (c) {
            case '<':
                stb.append("&lt;");
                break;
            case '>':
                stb.append("&gt;");
                break;
            case '&':
                stb.append("&amp;");
                break;
            case '"':
                stb.append("&quot;");
                break;
            default:
                 stb.append(c);
            }
        }
        
        return stb.toString();
    }
    public static void main(String[] args) {
        System.out.println(TagUtil.trans("<b>Hello!!</b>"));
    }
}


6,获得web开发常用对象

7,获得web开发常用对象
¨ 测试各个隐式对象
¨ 注意事项
测试 headerValues时, 如果头里面有“-” ,例 Accept-Encoding,则要headerValues[“Accept-Encoding”]
测试cookie时,例${cookie.key}取的是cookie对象,如访问cookie的名称和值,须${cookie.key.name}或${cookie.key.value}
8, 使用EL调用Java方法

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

¨ 一般来说, EL自定义函数开发与应用包括以下三个步骤:
编写一个Java类的静态方法
编写 标签库描述符(tld)文件 ,在tld文件中描述自定义函数。
在JSP页面中导入和使用自定义函数
¨ 示例:开发对html标签进行转义的el function
10, 开发ELFunction注意事项

¨ 编写完标签库描述文件后,需要将它放置到<web应用>\WEB-INF目录中或WEB-INF目录下的除了classes和lib目录之外的任意子目录中。
¨ TLD文件中的<uri>元素用指定该TLD文件的URI,在JSP文件中需要通过这个URI来引入该标签库描述文件。
¨ <function>元素用于描述一个EL自定义函数,其中:
<name>子元素用于指定EL自定义函数的名称。
<function-class>子元素用于指定 完整的Java类名
<function-signature>子元素用于指定Java类中的静态方法的签名,方法签名必须指明方法的返回值类型及各个参数的类型,各个参数之间用逗号分隔。
11, EL注意事项

¨ EL表达式是JSP 2.0规范中的一门技术。因此,若想正确解析EL表达式,需使用支持Servlet2.4/JSP2.0技术的WEB服务器。
¨ 注意:有些Tomcat服务器如不能使用EL表达式

  (1)升级成tomcat6

  (2)在JSP中加入<%@ pageisELIgnored="false" %>

12,  EL表达式保留关键字

13,案例

score.jsp

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


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
   
    
    <title>平均分表达式</title>
    
    
  </head>
 
  <body bgcolor="pink">
   <h1>五门学科平均分</h1>
   <form action="score.jsp" border="1px" bordercolor="blank" >
           <tr>
               <td>请输入语文的成绩:</td>
               <td><input type="text" value="${param.chinese}" name="chinese" size="5" maxlength="3"/>
               <b>100</b></td><br/>
           </tr>
           <tr>
               <td>请输入英语的成绩:</td>
               <td><input type="text" value="${param.English}" name="English" size="5" maxlength="3"/>
               <b>100</b></td><br/>
           </tr>
           <tr>
               <td>请输入数学的成绩:</td>
               <td><input type="text" value="${param.math}" name="math" size="5" maxlength="3"/>
               <b>100</b></td><br/>
           </tr>
           <tr>
               <td>请输入地理的成绩:</td>
               <td><input type="text" value="${param.geography}" name="geography" size="5" maxlength="3"/>
               <b>100</b></td><br/>
           </tr>
           <tr>
               <td>请输入历史的成绩:</td>
               <td><input type="text" value="${param.history}" name="history" size="5" maxlength="3"/>
               <b>100</b></td><br/>
           </tr>
           <tr>
               <td>总分:</td><td>${param.chinese+param.English+param.math+param.geography+param.history}</td>
           </tr><br/>
           <tr>
               <td>平均分:</td><td>${(param.chinese+param.English+param.math+param.geography+param.history)/5}</td>
           </tr><br/>
           <tr>
               <td><input type="submit" value="提交"/></td><br/>
               <td><input type="reset" value="重置"/></td>
           </tr>
   </form>
  </body>
</html>

compare.jsp

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


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <
    
    <title>数学运算,比较2个整数</title>
    
    

  </head>
 
  <body bgcolor="#ffffff">
  <h1>关系运算符</h1>
      <form action="compare.jsp">
          <table border="1">
              <tr>
                 <td><b>数字</b></td> <td><b>运算符</b></td> <td><b>数字</b></td> <td><b>结果</b></td>
              </tr>
              <tr>
                  <td><input type="text" name="num1" value="${param.num1}" size="5" maxlength="3"/></td>
                  <td width=20 align="center"><b>&gt</b></td>
                  <td><input type="text" name="num2" value="${param.num2}" size="5" maxlength="3"/></td>
                  <td>${param.num1 gt param.num2}</td>
              </tr>
              <tr>
                  <td><input type="text" name="num3" value="${param.num3}" size="5" maxlength="3"/></td>
                  <td width=20 align="center"><b>&lt</b></td>
                  <td><input type="text" name="num4" value="${param.num4}" size="5" maxlength="3"/></td>
                  <td>${param.num3 lt param.num4}</td>
              </tr>
              <tr>
                  <td><input type="text" name="num5" value="${param.num3}" size="5" maxlength="3"/></td>
                  <td width=20 align="center"><b>==</b></td>
                  <td><input type="text" name="num6" value="${param.num4}" size="5" maxlength="3"/></td>
                  <td>${param.num5 eq param.num6}</td>
              </tr>
          </table>
          <input type="submit" value="结果"/>
          
      </form>
  </body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值