JSP与EL表达式

来源:互联网 发布:redhat yum 编辑:程序博客网 时间:2024/06/05 19:47

EL表达式作用:

     1.主要用于获取数据对象或变量值

                     EL表达式主要用于替代JSP页面的脚本表达式(<%=expression%),以从各种类型的web域中检索java对象
     2.在JSP页面执行一些基本关系运算、逻辑运算和算术运算
     3.获取web开发常用对象
        EL表达式定义了一些隐式对象,利用这些隐式对象,可以轻松获得对web常用对象(JSP九大内置对象)的引用
     4.调用Java方法
        EL表达式允许用户自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法
        EL自定义函数开发与应用的3个步骤:
            1.编写一个Java类的静态方法
            2.编写标签库描述(tld)文件,在tld文件中描述自定义函数
            3.在JSP页面导入和使用自定义函数
     在JSP页面中可以使用形如${标识符}的形式,默认通知JSP引擎调用pageContext(jsp内置的九大对象之一,封装了其它八大对象).findAttribute()方法,以标识符为关键字从各个域对象(即page-》request-》session-》application从小范围往大范围找)中获取数据对象。如果所有域对象中不存在标识符所对应的数据对象,则返回结果为""(注意,不是null)
EL表达式格式:
     用美元符号"$"定界,内容包括在一对花括号"{}"中;注意${}里面不能再嵌套${}即EL表达式不能相互嵌套
     即${表达式}
     在EL表达式中,取一个对象的属性 点语法(.)和中括号[]语法是通用的
        如:${user.sex} ${user["sex"]}
    []还可以用来进行集合元素的定位
        如:${booklist[0].price} 即${booklist[0]["price"]}
    []还可以用来动态的取值
        如:${user[param]};//param是一个变量

    EL表达式自带的11大对象:EL表达式语言中定义了11个隐含对象,使用这些隐含对象可以更方便地获取web开发中的一些常见对象,并读取这些对象的数据。
  语法:${隐式对象名称}:获得对象的引用
序号     隐含对象名称     描       述
1     pageContext     即JSP九大内置对象中的pageContext对象(注意:取的是pageContext对象。)           该对象存在的重要意义:分装了JSP九大内置对象中的其它八大对象,即可以通过该对象获取其它8大对象
2     pageScope     代表page域中用于保存属性的Map集合对象
3     requestScope     代表request域中用于保存属性的Map集合对象
4     sessionScope     代表session域中用于保存属性的Map集合对象
5     applicationScope     代表application域中用于保存属性的Map集合对象    Notice这四个只是保存键值对的集合类型的对象

6     param         表示一个保存了所有请求参数的Map集合对象
            至少应该包含两个Map对象:URL请求参数Map对象和Request对象设置的属性Map对象
7     paramValues     表示一个保存了所有请求参数的Map集合对象;对于某个请求参数,返回的是一个string[]
8     header         表示一个保存了所有http请求头字段的Map集合对象,注意:如果头里面有“-” ,例Accept-Encoding,则要header[“Accept-Encoding”]
9     headerValues     表示一个保存了所有http请求头字段的Map集合对象,它对于某个请求参数,返回的是一个string[]数组。注意:如果头里面有“-” ,例Accept-Encoding,则要headerValues[“Accept-Encoding”]
10   cookie     表示一个保存了所有cookie的Map集合对象
11     initParam     表示一个保存了所有web应用初始化参数的map集合对象

EL表达式支持大部分Java所提供的算术和逻辑操作符:
    操作符     描述
    .     访问一个Bean属性或者一个映射条目
    []     访问一个数组或者链表的元素
    ........    
    关系运算符:==(或eq)、!=(或ne)、<=(或le)、>=。。。。。。。
    验证运算符:empty  不为NULL返回true 为NUll返回false

EL自动类型转换
    非EL时我们需要这样写;
        String str_count=request.getParameter("count");
        int count=Integer.parseInt(str_count);//手动转换类型
        count=count+20;
    EL会进行自动类型转换
        ${param.count+20}

在页面中使用JSTL标签的两个步骤:
    1、导入jstl.jar和standerd.jar这两个JSTLdejia文件
    2、在JSP页面中使用<%@ tablid url="" prifix="" %>导入标签库
    
EL表达式配合JSTL的使用:
    --EL表达式经常与JSTL配合使用,使JSP页面更直观,写法更简单
    --普通写法:    <%=session.getValue("name")%>
    --EL表达式写法: <c:out value="${sessionScope.name}/>"

JSTL核心标签分类:
    1.表达式控制标签:out、set、remove、catch、
    2.流程控制标签:if、choose、when、otherwise
    3.循环标签:forEach、forTokens
    4.URL操作标签:import、url、redirect、param
    具体:
    <c:out/>功能与JSP传统的<%=表达式%>或 <% out.println(“字符串”)%>很类似,用于输出常量值或变量值 变量值用EL表达式获取

       <c:set/>功能1:存值到scope(即page、request、session、application)中
        <c:set value="today" var="day" scope="session"></c:set>
        <c:out value="${day}"></c:out>
          或
        <c:set var="age" scope="session">eleven</c:set>
        <c:out value="${age}"></c:out>    
        功能2:存值到JavaBean中    如果指定了target属性(指明目标Bean),那么property属性(指明该Bean的属性)也需要被指定。当然这里必须指定洛
        <jsp:usebean id="person" scope="session"/>//设置JavaBean
        <c:set target="${sessionScope.person}" property="name" value="lihao"></c:set>
        <c:out value="${sessionScope.person.name}"></c:out>

    <c:remove/>移除指定域的数据对象

    <c:catch/>功能与Java程序中的try{}catch{}语句功能很类似
        <c:catch var="error">//将错误信息保存到error变量中
            <c:set target="aa" property="bb"/>bbbb</c:set>//为一个不存在的JavaBean对象设置属性值
        </c:catch>
        <c:out value="${error}"/>



    <c:if test="" var="" scope=""/>与程序中的if作用相同,用来实现分支条件控制
        test属性用来存放判断条件,一般用EL表达式来编写
            var指定存放结果true或false的变量名称,结果为true则执行标签体 默认结果为false
        scope指定用来指定var的存放范围 默认page

    <c:choose>、<c:when>、<c:otherwise>这三个标签一般组合起来使用 相当于switch case default条件分支结构

    <c:forEach>:用于对一个集合对象中的元素进行迭代操作
    属性名            作用
    var            指定将当前迭代到的元素保存到page这个域中的属性名称
    varstatus        记住了当前是第几次迭代
    items            将要迭代的集合对象
    begin
    end
    step            步长
    

    <c:param>标签可以嵌套在<c:import>、<c:url>、<c:redirect>标签内,为这些标签所使用的URL地址附加参数
    <c:param>标签再为一个URL地址附加参数时,将自动对参数值进行URL编码;例如 如果附加的参数值为“中国”,则将其转换为
    "%d6%d0%b9%fa"后再附加到URL地址后面,这就是使用<c:param>标签的最大好处
    示例:<c:param name="" value=""/>
    
    <c:url>标签用于在JSP页面中构造一个URL地址,其主要目的是为了实现URL重写。所谓的URL重写就是将回话标识符
    以参数形式附加到URL地址后面
    属性名        是否支持EL    作用
    value        true    
    var        false        
    scope        false        指定将构造出的URL保存到哪个web作用域   
0 0