欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SCWCD之路——表达式语言 博客分类: SCWCD Certification D语言JSPWeb编程C 

程序员文章站 2024-02-27 21:24:21
...

介绍

 

        EL(Expression Language,表达式语言)是JSP2.0引入的,它可以与Scriptlets一起使用,也能和JSTL一起使用。EL擅长寻找对象及其属性,然后对这些对象的属性进行简单的操作。它严格来说不是一门编程语言,但它却能使用很简单的符号来表示复杂的行为。

        考试中单独考EL的题目比较少,更多时候是作为一个小知识点放在其他题目里一起考,而且考查时隐含对象考得比较多,希望大家注意。

 

 

表达式的语法

 

        EL中的语法主要包括以下几个部分:

 

        1)变量:在EL中使用变量十分容易,使用形如“${表达式}”的形式即可,如${userName}表示在某一范围内取出名称为useName的变量值,当没有指明范围的时候,会依照page->request->session->application的范围一直搜索,一旦找到则返回其值,如果没有找到则返回null。当然也可以显式地指明范围,在EL中的属性范围有:

             a)pageScope

             b)requestScope

             c)sessionScope

             d)applicationScope

             比如${sessionScope.userName}表示在session范围内寻找userName变量并返回其值,相当于JSP中的session.getAttribute("userName")。

 

        2)隐含对象:表达式一共定义了11个隐含对象(包括上面的4个表示范围的对象),其他的还有:

             e)pageContext:表示JSP页面的上下文,在这个对象里提供了访问其他对象的方法,主要包括有servletContext、session、request、response这几个对象,如:

${oageContext.request.contextPath}

             f)param:把request中的参数名和单个值进行映射,如${param.name}即相当于

request.getParameter(name); 

             g)paramValues:把request中的参数名和一个数组值进行映射。

             h)header:把request中的header名字和单个值进行映射。

             i)headerValues:把request中的header名字和一个数组值进行映射。

             j)cookie:把request中的Cookie名字和单个值进行映射。

             k)initParam:把context中的初始化参数和单个值进行映射。

 

        3)字面量:EL中定义里如下的字面量:

             a)Boolean

             b)Integer

             c)Float

             d)String

             e)Null

 

        4)操作:EL中定义了许多的操作,常见的有:

             a)算术操作(+ - * / dive % mod)

             b)逻辑操作(and or not && ||)

             c)关系操作(eq ne lt gt ge le == !=)

             d)Empty运算符:用来判断值是否为null,如:

${empty param.name}

             e)条件操作,如:

${test ? exp1 : exp2}

             f)存取数据运算符:EL中提供了两种不同的存取运算符:“.”和“[]”。前者通常用来访问对象的属性,后者则用来检索数组和集合中的元素。两者在一定的程度可以互用,但是如果需要存取的属性名中包含一些特殊字符或者变量是动态变化的则要使用“[]”,如

${yser[my-name]}

 

        5)保留字:EL中定义了一些关键字,虽然这些关键字并没有完全使用,但也予以保留。

 

        6)函数:EL中允许自定义函数,并且函数定义和使用的机制与标签库类似。这是一个考点,下面给出一个例子,如:

             步骤1:编写一个Java类,其类里有一个静态方法(必须静态)用来转换字符格式。

package el;

public class Function {
    public static String format(String str) {
        String result = null;
        byte[] temp;
        try {
            temp = str.getBytes("iso-8859-1");
            result = new String(temp);
        } catch (Exception e) {
            return null;
        }
        return result;
    }
}

             步骤2:编写标签库文件(WEB-INF/tlds/function.tld)

<taglib>
  <uri>/WEB-INF/tlds/function</uri>
   <function>
       <name>format</name><!--注意这个值必须与你的方法名一致-->
       <function-class>el.Function</function-class>
       <function-signature>java.lang.String format(java.lang.String)</function-signature>
   </function>
</taglib>

             步骤3:在web.xml中添加如下内容

<web-app>
    <jsp-config>
        <taglib>
            <taglib-uri>/WEB-INF/tlds/function</taglib-uri>
            <taglib-location>/WEB-INF/tlds/function.tld</taglib-location>
        </taglib>
    </jsp-config>
</web-app>

             步骤4:编写一个用来测试的JSP页面

<%@taglib prefix="function" uri="/WEB-INF/tlds/function" %>
<%@page contentType="text/html; charset=gb2312" %>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
        <title>JSP Page</title>
    </head>
    <body>
        <form action="index.jsp" method="post">
            <input type="text" name="name"><br />
            <input type="submit" name="submit">
        </form>
        <br /><hr />
        ${function:format(param.name)}
    </body>
</html>
 

 

总结

 

        在考试中EL的内容很少单独出现,一定要熟悉EL中的一般使用,如变量、隐含对象、操作和函数等,因为如果这些看不懂的话很有可能影响到答题。