• jsp 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类的方法。

    原理:       

    lEL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,分别从pagerequestsessionapplication四个域中查找相应的对象,找到则返回相应对象,找不到则返回””注意,不是null,而是空字符串)。

    使用:       

    获取数据:

    ${user.address.city}           --获取javabean中的属性(属性address为javabean )的属性

    ${user.list[0]}                   --访问有序集合某个位置的元素

    ${map.key}                       --获得map集合中指定key的值

    执行运算:

    EL表达式支持如下运算符:

    image

    image

    ${empty(list) }                             --empty()运算,检查对象是否为null或“空”

    ${user!=null?name : “”}             --二元表达式, (true|false):true?false

    EL表达式中的11个隐含对象     

    隐含对象名称

    描 述

    pageContext 对应于 JSP页面 中的 pageContext对象 (注意:取的是pageContext对象。)
    pageScope 代表 page域 中用于保存属性的 Map对象
    requestScope 代表 request 域中用于保存属性的 Map对象
    sessionScope 代表 session 域中用于保存属性的 Map对象
    applicationScope 代表 application 域中用于保存属性的 Map对象
    param 表示一个保存了所有请求参数的Map对象
    paramValues

    表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个string[]

    header 表示一个保存了所有http请求头字段Map对象
    headerValues 同上,返回string[]数组。注意:如果头里面有“-” ,例Accept-Encoding,则要headerValues[“Accept-Encoding”]
    cookie 表示一个保存了所有cookie的Map对象
    initParam 表示一个保存了所有web应用初始化参数的map对象

    EL 全名为Expression Language

    EL 语法很简单,它最大的特点就是使用上很方便。接下来介绍EL主要的语法结构:

    ${sessionScope.user.sex}

    所有EL都是以${为起始、以}为结尾的。上述EL范例的意思是:从Session的范围中,取得

    用户的性别。假若依照之前JSP Scriptlet的写法如下:

    User user = (User)session.getAttribute("user");

    String sex = user.getSex( );

    两者相比较之下,可以发现EL 的语法比传统JSP Scriptlet 更为方便、简洁。

    .与 [ ] 运算符

    EL 提供 . 和 [ ] 两种运算符来导航数据。下列两者所代表的意思是一样的:

    ${sessionScope.user.sex}等于${sessionScope.user["sex"]}

    和 [ ] 也可以同时混合使用,如下:

    ${sessionScope.shoppingCart[0].price}

    回传结果为shoppingCart中第一项物品的价格。

    不过,以下两种情况,两者会有差异:

    (1) 当要存取的属性名称中包含一些特殊字符,如. 或 – 等并非字母或数字的符号,就一定要使用 [ ],例如:${user.My-Name }

    上述是不正确的方式,应当改为:${user["My-Name"] }

    (2) 我们来考虑下列情况:

    ${sessionScope.user[data]}

    此时,data 是一个变量,假若data的值为"sex"时,那上述的例子等于${sessionScope.user.sex};

    假若data 的值为"name"时,它就等于${sessionScope.user.name}。因此,如果要动态取值时,就可以用上述的方法来做,但无法做到动态取值。

     

    EL 变量

    EL 存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。因为我们并没有指定哪一个范围的username,所以它的默认值会先从Page 范围找,假如找不到,再依序到Request、Session、Application范围。假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null,当然EL表达式还会做出优化,页面上显示空白,而不是打印输出NULL。

    属性范围(jstl名称)

    EL中的名称

    Page

    PageScope

    Request

    RequestScope

    Session

    SessionScope

    Application

    ApplicationScope

    我们也可以指定要取出哪一个范围的变量:

    范例

    说明

    ${pageScope.username}

    取出Page范围的username变量

    ${requestScope.username}

    取出Request范围的username变量

    ${sessionScope.username}

    取出Session范围的username变量

    ${applicationScope.username}

    取出Application范围的username变量

    其中,pageScope、requestScope、sessionScope和applicationScope都是EL 的隐含对象,由它们的名称可以很容易猜出它们所代表的意思,例如:${sessionScope.username}是取出Session范围的username 变量。这种写法是不是比之前JSP 的写法:

    String username = (String) session.getAttribute("username");容易、简洁许多.

    自动转变类型

    EL 除了提供方便存取变量的语法之外,它另外一个方便的功能就是:自动转变类型,我们来看下面这个范例:

    ${param.count + 20}

    假若窗体传来count的值为10时,那么上面的结果为30。之前没接触过JSP 的读者可能会认为上面的例子是理所当然的,但是在JSP 1.2 之中不能这样做,原因是从窗体所传来的值,它们的类型一律是String,所以当你接收之后,必须再将它转为其他类型,如:int、float 等等,然后才能执行一些数学运算,下面是之前的做法:

    String str_count = request.getParameter("count");

    int count = Integer.parseInt(str_count);

    count = count + 20; 所以,注意不要和java的语法(当字符串和数字用“+”链接时会把数字转换为字符串)搞混淆喽

    EL 隐含对象

    JSP有9个隐含对象,而EL也有自己的隐含对象。EL隐含对象总共有11 个

    隐含对象

    类型

    说明

    PageContext

    javax.servlet.ServletContext

    表示此JSP的PageContext

    PageScope

    java.util.Map

    取得Page范围的属性名称所对应的值

    RequestScope

    java.util.Map

    取得Request范围的属性名称所对应的值

    sessionScope

    java.util.Map

    取得Session范围的属性名称所对应的值

    applicationScope

    java.util.Map

    取得Application范围的属性名称所对应的值

    param

    java.util.Map

    如同ServletRequest.getParameter(String name)。回传String类型的值

    paramValues

    java.util.Map

    如同ServletRequest.getParameterValues(String name)。回传String[]类型的值

    header

    java.util.Map

    如同ServletRequest.getHeader(String name)。回传String类型的值

    headerValues

    java.util.Map

    如同ServletRequest.getHeaders(String name)。回传String[]类型的值

    cookie

    java.util.Map

    如同HttpServletRequest.getCookies()

    initParam

    java.util.Map

    如同ServletContext.getInitParameter(String name)。回传String类型的值

     

    不过有一点要注意的是如果你要用EL输出一个常量的话,字符串要加双引号,不然的话EL会默认把你认为的常量当做一个变量来处理,这时如果这个变量在4个声明范围不存在的话会输出空,如果存在则输出该变量的值。

    属性(Attribute)与范围(Scope)

    与范围有关的EL 隐含对象包含以下四个:pageScope、requestScope、sessionScope 和

    applicationScope,它们基本上就和JSP的pageContext、request、session和application一样,所以笔者在这里只稍略说明。不过必须注意的是,这四个隐含对象只能用来取得范围属性值,即JSP中的getAttribute(String name),却不能取得其他相关信息,例如:JSP中的request对象除可以存取属性之外,还可以取得用户的请求参数或表头信息等等。但是在EL中,它就只能单纯用来取得对应范围的属性值,例如:我们要在session 中储存一个属性,它的名称为username,在JSP 中使用session.getAttribute("username") 来取得username 的值, 但是在EL中,则是使用${sessionScope.username}来取得其值的。

    cookie

    所谓的cookie是一个小小的文本文件,它是以key、value的方式将Session Tracking的内容记录在这个文本文件内,这个文本文件通常存在于浏览器的暂存区内。JSTL并没有提供设定cookie的动作,因为这个动作通常都是后端开发者必须去做的事情,而不是交给前端的开发者。假若我们在cookie 中设定一个名称为userCountry的值,那么可以使用${cookie.userCountry}来取得它。

     

    header 和headerValues

    header 储存用户浏览器和服务端用来沟通的数据,当用户要求服务端的网页时,会送出一个记载要求信息的标头文件,例如:用户浏览器的版本、用户计算机所设定的区域等其他相关数据。假若要取得用户浏览器的版本,即${header["User-Agent"]}。另外在鲜少机会下,有可能同一标头名称拥有不同的值,此时必须改为使用headerValues 来取得这些值。

     

    注意:因为User-Agent 中包含“-”这个特殊字符,所以必须使用“[]”,而不能写成

    $(header.User-Agent)。

      initParam

    就像其他属性一样,我们可以自行设定web 站台的环境参数(Context),当我们想取得这些参数initParam就像其他属性一样,我们可以自行设定web 站台的环境参数(Context),当我们想取得这些参数

    <?xml version="1.0" encoding="ISO-8859-1"?>

    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

    version="2.4">:

    <context-param>

    <param-name>userid</param-name>

    <param-value>mike</param-value>

    </context-param>:

    </web-app>

    那么我们就可以直接使用 ${initParam.userid}来取得名称为userid,其值为mike 的参数。下面是之前的做法:String userid = (String)application.getInitParameter("userid");

    param和paramValues 在取得用户参数时通常使用一下方法:

    request.getParameter(String name) request.getParameterValues(String name)

     

    在 EL中则可以使用param和paramValues两者来取得数据。 ${param.name} ${paramValues.name}

    这里param 的功能和request.getParameter(String name)相同,而paramValues和 request.getParameterValues(String name)相同。如果用户填了一个表格,表格名称为username,则我们就可以使用${param.username}来取得用户填入的值。

    看到这里,大家应该很明确EL表达式只能通过内置对象取值,也就是只读操作,如果想进行写操作的话就让后台代码去完成,毕竟EL表达式仅仅是视图上的输出标签罢了。
    pageContext

    我们可以使用 ${pageContext}来取得其他有关用户要求或页面的详细信息。下表列出了几个比较常用的部分

    Expression

    说明

    ${pageContext.request.queryString}

    取得请求的参数字符串

    ${pageContext.request.requestURL}

    取得请求的URL,但不包括请求之参数字符串,即servlet的HTTP地址。

    ${pageContext.request.contextPath}

    服务的webapplication的名称

    ${pageContext.request.method}

    取得HTTP的方法(GET、POST)

    ${pageContext.request.protocol}

    取得使用的协议(HTTP/1.1、HTTP/1.0)

    ${pageContext.request.remoteUser}

    取得用户名称

    ${pageContext.request.remoteAddr}

    取得用户的IP地址

    ${pageContext.session.new}

    判断session是否为新的,所谓新的session,表示刚由server产生而client尚未使用

    ${pageContext.session.id}

    取得session的ID

    ${pageContext.servletContext.serverInfo}

    取得主机端的服务信息

     这个对象可有效地改善代码的硬编码问题,如页面中有一A标签链接访问一个SERVLET,如果写死了该SERVLET的HTTP地址那么如果当该SERVLET的SERVLET-MAPPING改变的时候必须要修改源代码,这样维护性会大打折扣。

    EL算术运算

    表达式语言支持的算术运算符和逻辑运算符非常多,所有在Java语言里支持的算术运算符,表达式语言都可以使用;甚至Java语言不支持的一些算术运算符和逻辑运算符,表达式语言也支持。

     

    复制代码
    <%@ page contentType="text/html; charset=gb2312"%>
    <html>
    <head>
    <title>表达式语言 - 算术运算符</title>
    </head>
    <body>
    <h2>表达式语言 - 算术运算符</h2>
    <hr>
    <table border="1" bgcolor="aaaadd">
    <tr>
    <td><b>表达式语言</b></td>
    <td><b>计算结果</b></td>
    </tr>
    <!-- 直接输出常量 -->
    <tr>
    <td>${1}</td>
    <td>${1}</td>
    </tr>
    <!-- 计算加法 -->
    <tr>
    <td>${1.2 + 2.3}</td>
    <td>${1.2 + 2.3}</td>
    </tr>
    <!-- 计算加法 -->
    <tr>
    <td>${1.2E4 + 1.4}</td>
    <td>${1.2E4 + 1.4}</td>
    </tr>
    <!-- 计算减法 -->
    <tr>
    <td>${-4 - 2}</td>
    <td>${-4 - 2}</td>
    </tr>
    <!-- 计算乘法 -->
    <tr>
    <td>${21 * 2}</td>
    <td>${21 * 2}</td>
    </tr>
    <!-- 计算除法 -->
    <tr>
    <td>${3/4}</td>
    <td>${3/4}</td>
    </tr>
    <!-- 计算除法 -->
    <tr>
    <td>${3 div 4}</td>
    <td>${3 div 4}</td>
    </tr>
    <!-- 计算除法 -->
    <tr>
    <td>${3/0}</td>
    <td>${3/0}</td>
    </tr>
    <!-- 计算求余 -->
    <tr>
    <td>${10%4}</td>
    <td>${10%4}</td>
    </tr>
    <!-- 计算求余 -->
    <tr>
    <td>${10 mod 4}</td>
    <td>${10 mod 4}</td>
    </tr>
    <!-- 计算三目运算符 -->
    <tr>
    <td>${(1==2) ? 3 : 4}</td>
    <td>${(1==2) ? 3 : 4}</td>
    </tr>
    </table>
    </body>
    </html>
    复制代码

    上面页面中示范了表达式语言所支持的加、减、乘、除、求余等算术运算符的功能,读者可能也发现了表达式语言还支持div、mod等运算符。而且表达式语言把所有数值都当成浮点数处理,所以3/0的实质是3.0/0.0,得到结果应该是Infinity。

     

    如果需要在支持表达式语言的页面中正常输出“$”符号,则在“$”符号前加转义字符“”,否则系统以为“$”是表达式语言的特殊标记。

    EL关系运算符

    关系运算符

    说明

    范例

    结果

    == 或 eq

    等于

    ${5==5}或${5eq5}

    true

    != 或 ne

    不等于

    ${5!=5}或${5ne5}

    false

    < 或 lt

    小于

    ${3<5}或${3lt5}

    true

    > 或 gt

    大于

    ${3>5}或{3gt5}

    false

    <= 或 le

    小于等于

    ${3<=5}或${3le5}

    true

    >= 或 ge

    大于等于

    5}或${3ge5}

    false

    表达式语言不仅可在数字与数字之间比较,还可在字符与字符之间比较,字符串的比较是根据其对应UNICODE值来比较大小的。
    注意:在使用EL 关系运算符时,不能够写成: ${param.password1} = = ${param.password2} 或者 ${ ${param.password1 } = = ${ param.password2 } } 而应写成 ${ param.password1 = = param.password2 }

    EL逻辑运算符

    逻辑运算符

    范例

    结果

    &&或and

    交集${A && B}或${A and B}

    true/false

    ||或or

    并集${A || B}或${A or B}

    true/false

    !或not

    非${! A }或${not A}

    true/false

     

    Empty 运算符

    Empty 运算符主要用来判断值是否为空(NULL,空字符串,空集合)。

     

    条件运算符

    ${ A ? B : C}

     

     

     

           表达式语言(Expression Language)简称EL,它是JSP2.0中引入的一个新内容。通过EL可以简化在JSP开发中对对象的引用,从而规范页面代码,增加程序的可读性及可维护性。EL为不熟悉Java语言页面开发的人员提供了一个开发Java Web应用的新途径。下面对EL的语法、运算符及隐含对象进行详细介绍。

    一、EL概述

    1、EL简介

           EL没出现之前,开发Java Web应用程序时,经常需要将大量的Java代码片段嵌入到JSP页面中,这会使页面开起来很乱,如下例子:

    [php] view plain copy
     
     print?
    1. <%if(session.getAttribute(“username”)!= null){  
    2.   
    3.        out.println(session.getAttribute(“username”).toString());  
    4.   
    5. }%>  

           而是用EL则只需要下面的依据代码即可实现:

              ${username}

           通过上面的例子我们可以知道,EL表达式的语法非常简单,它以”${”开头,以”}”结束,中间为合法的表达式,具体的语法格式为:

              ${expression}

           expression用于指定要输出的内容,可以使字符串,也可以是由EL运算符组成的表达式。

           例如在EL表达式中要输出一个字符串,可以将此字符串放在一对单引号或双引号内:

              灵  或 ‘我叫小武灵灵′或
    {“我叫小武灵灵”}

    EL有以下几个特点:

    •  EL可以与JSTL结合使用,也可以与JavaScript语句结合使用;
    • EL中会自动进行类型转换。如果想通过EL输入两个字符串型数值的和,可以直接通过”+”号进行连接,如${num1+num2};
    •  EL不仅可以访问一般变量,还可以访问JavaBean中的属性以及嵌套属性和集合对象;
    • 在EL中可以获得命名空间(PageContext对象,它是页面中所有其他内置对象的最大范围的集成对象,通过它可以访问其他内置对象);
    • 在使用EL进行除法运算时,如果除数为0,则返回无穷大Infinity,而不是错误;
    • 在EL中可以访问JSP的作用域(request、session、application以及page);
    • 扩展函数可以与Java类的静态方法进行映射。

    2、与低版本的环境兼容——禁用EL

         目前只要安装的Web服务器能够支持Servlet 2.4/JSP 2.0,就可以在JSP页面中直接使用EL。由于在JSP2.0以前版本中没有EL,所以JSP为了和以前的规范兼容,还提供了禁用EL的方法。有以下三种方法:

           1)、使用斜杠””

           只需要在EL的起始标记“$”前加上””即可;

           2)、使用page指令

           使用JSP的page指令也可以禁用EL表达式,语法格式如下;

           <%@ page isELIgnored=”布尔值”%>   true为禁用EL

           3)、在web.xml文件中配置<el-ignored>元素

    [html] view plain copy
     
     print?
    1. <jsp-config>  
    2.   
    3.        <jsp-property-group>  
    4.   
    5.               <url-pattern>*.jsp</url-pattern>  
    6.   
    7.               <el-ignored>true</el-ignored>  
    8.   
    9.        </jsp-property-group>  
    10.   
    11. </jsp-config>  

    3、保留的关键字

           EL中保留的关键字如下,在为变量命名时,应该避免使用这些关键字:

    and

    eq

    gt

    instanceof

    div

    or

    le

    false

    empty

    not

    Lt

    ge

    二、EL的运算符使用


           EL的运算符在按照从左向右的计算原则下,优先级如下:

    1、通过EL访问数据

           通过EL提供的”[]”和”.”运算符可以访问数据。通常情况下这两个运算符是等价的,可以相互代替。

           但也不是所有情况下都可以相互代替,例如当对象的属性名中包含一些特殊的符号(-或.)时,就只能使用[]来访问对喜爱那个的属性。例如而 userInfo[user−id]是正确的,而
    {userInfo.user-name}是错误的。

           下面给出通过这两运算符访问数据的例子:

           1)、获取数组元素(只能使用[],不能用.)

    [html] view plain copy
     
     print?
    1. <%  
    2.   
    3.        String[] str = {"一号" , "二号" , "三号" , "四号" , "五号"};  
    4.   
    5.        request.setAttribute("user",str);  
    6.   
    7. %>  
    8.   
    9. <%  
    10.   
    11.        String[] str1 =(String[])request.getAttribute("user");  
    12.   
    13.        for(int i=0; i str1.length; i++){  
    14.   
    15.               request.setAttribute("rt",i);  
    16.   
    17. %>  
    18.   
    19.         rt:
      {user[rt] }<br>  
    20.   
    21. <% }%>  

           2)、List集合元素的获取(只能使用[],不能用.)

          

    [html] view plain copy
     
     print?
    1. <%  
    2.   
    3.        List<Stringlist = newArrayList<String>();  
    4.   
    5.        list.add("一号");  
    6.   
    7.        list.add("二号");  
    8.   
    9.        list.add("三号");  
    10.   
    11.        session.setAttribute("user",list);  
    12.   
    13. %>  
    14.   
    15. <%  
    16.   
    17.        List<Stringlist1 =(List<String>)session.getAttribute("user");  
    18.   
    19.        for(int i = 0 ; i list1.size() ;i++){  
    20.   
    21.               request.setAttribute("rt",i);  
    22.   
    23. %>  
    24.   
    25.         rt:
      {user[rt] }<br>  
    26.   
    27. <%  }%>  

    2、在EL中进行算术运算

    运算符

    功能

    示例

    结果

    +

    ${1+1}

    2

    -

    ${1-1}

    0

    *

    ${2*2}

    4

    /或div

    或 2/1或
    {2 div 1}

    2

    或 2/0或
    {2 div 0}

    Infinity

    %或 mod

    求余

    {3%2}或{3%2}或
    {3mod2}

    1

    {3%0}或{3%0}或
    {3 mod0}

    异常:java.lang.ArithmeticException:/by zero

    3、在EL中判断对象是否为空

           通过empty运算符实现,用来确定一个对象或比那辆是否为null或空,格式如下:

                  ${empty expression}

    例如:

    [html] view plain copy
     
     print?
    1. <%request.setAttribute("user" , "");%>  
    2.   
    3.          <%request.setAttribute("user1"  , null);%>  
    4.   
    5.          <%request.setAttribute("user2"  , 2);%>  
    6.   
    7.          ${emptyuser}       //返回值为true  
    8.   
    9.          ${emptyuser1}     //返回值为true  
    10.   
    11.          ${emptyuser2}    //返回值为false  

    4、在EL中进行逻辑关系运算

           在EL中,通过逻辑运算符和关系运算符可以实现逻辑关系运算。其使用方法都差不多,下面给出一个例子:

    [html] view plain copy
     
     print?
    1. <%  
    2.   
    3.        request.setAttribute("userName","小武");  
    4.   
    5.        request.setAttribute("pwd","123456");  
    6.   
    7. %>  
    8.   
    9. userName= ${userName }<br>  
    10.   
    11. pwd= ${pwd }<br>  
    12.   
    13. ${userName!= "" and (pwd == "asd" )}  
    14.   
    15. ${userName!= "" and (pwd == "asd" )}<br>  
    16.   
    17. ${userName== "小武" and pwd == "123456" }  
    18.   
    19. ${userName== "小武" and pwd == "123456" }<br>  

    5、在EL中进行条件运算

           在EL中进行条件运算,唯一的优点在于其非常简单方便,和Java语言中的用法完全一致,其语法格式如下:

           ${条件表达式? 表达式1 : 表达式2}

           例如:${1==1 ? “对”: “错“}

    三、EL的隐含对象

           为了能够获得Web应用程序中的相关数据,EL提供了11个隐含对象,这些对象类似于JSP的内置对象,也是直接通过对象名进行操作。

    1、页面上下文对象

           pageContext用于访问JSP内置对象和servletContext。在获取到这些内置对象后,就可以获取器属性值。这些属性与对象的gexxx()方法相对象,在使用时,去掉方法名中的get,并将首字母改为小写即可。下面介绍如何应用页面上下文对象访问你JSP的内置对象和servletContext对象。

           1)、访问request对象——${pageContext.request}

           获取到request对象后,就可以通过该对象获取与客户端相关的信息。例如要访问getServerPort()方法,可以使用下面的代码:

           ${pageContext.request.serverPort}

           注意不可以通过pageContext对象获取保存到request范围内的变量。

           2)、访问response对象——${pageContext.response}

           3)、访问out对象——${pageContext.out}

           4)、访问session对象——${pageContext.session}

           5)、访问exception对象——${pageContext.exception}

           6)、访问page对象——${pageContext.page}

           7)、访问servletContext对象——${pageContext.servletContext}

    2、访问作用域范围的隐含对象

           在EL中提供了4个用于访问作用域范围的隐含对象,即pageScope、requestScope、sessionScope和applicationScope。应用这4个隐含对喜爱那个指定要查找的标识符的作用域后,系统将不再按照默认的顺序(page、request、session及application)来查找相应的标识符。他们与JSP中的page、request、session及application内置对象类似。只不过这4个隐含对象只能用来取得指定范围内的属性值,而不能取得其他相关信息。

           1)、pageScope隐含对象

           pageScope对象用于返回包含page(页面)范围内的属性的集合,返回值为java.util.Map对象。下面是一个具体例子,通过pageScope对象读取page范围内的JavaBean属性值。

    新建JavaBean为UserInfo:

    [java] view plain copy
     
     print?
    1. package com;  
    2.   
    3. public class UserInfo {  
    4.   
    5.        private String name ="";  
    6.   
    7.        public void setName(Stringname) {  
    8.   
    9.               this.name = name;  
    10.   
    11.        }  
    12.   
    13.        public String getName() {  
    14.   
    15.               return name;  
    16.   
    17.        }  
    18.   
    19. }  

    Index.jsp添加:

    [html] view plain copy
     
     print?
    1. <body>  
    2.   
    3. <jsp:useBeanidjsp:useBeanid="user" scope="page" class="com.UserInfo"type="com.UserInfo"></jsp:useBean>  
    4.   
    5. <jsp:setPropertypropertyjsp:setPropertyproperty="name" name="user" value="小武灵灵" />  
    6.   
    7. ${pageScope.user.name}  
    8.   
    9. </body>  

           2)、requestScope隐含对象

           用于返回包含request范围内的属性值的集合,返回值为java.util.Map对象。例如:

    [html] view plain copy
     
     print?
    1. <%  
    2.   
    3. request.setAttribute("userName","小武灵灵");  
    4.   
    5. %>  
    6.   
    7. ${requestScope.userName }  

           3)、sessionScope隐含对象

           用于返回包含session范围内的属性值的集合。例如:

    [html] view plain copy
     
     print?
    1. <%  
    2.   
    3. session.setAttribute("userName","小武灵灵");  
    4.   
    5. %>applicationapplication  
    6.   
    7. ${sessionScope.userName }  

           4)、applicationScope隐含对象

           用于返回包含application范围内的属性值的集合。例如:、

    [html] view plain copy
     
     print?
    1. <%  
    2.   
    3. application.setAttribute("userName","小武灵灵");  
    4.   
    5. >  
    6.   
    7. {applicationScope.userName }  

    3、访问环境信息的隐含对象

           EL中提供了6个访问环境信息的隐含对象,分别为:

           1)、param对象

           用于获取请求参数的值,应用在参数值只有一个的情况,返回结果为字符串。例如:

    [html] view plain copy
     
     print?
    1. <formactionformaction="" method="get" name="form1"  >  
    2.   
    3.        <input name="user" type="text"value="小武灵灵">  
    4.   
    5.        <input type="submit">  
    6.   
    7. </form>  
    8.   
    9. ${param.user}  

           2)、paramValues对象

           如果一个请求参数名对应多个值,则需要使用paramValues对象获取请求参数的值,该对象返回的结果为数组。例如:

    [html] view plain copy
     
     print?
    1. <formactionformaction="" method="get" name="form1"  >  
    2.   
    3.        <input type="checkbox"name="affect" id="affect" value="1">  
    4.   
    5.        <input type="checkbox"name="affect" id="affect" value="2">  
    6.   
    7.        <input type="checkbox"name="affect" id="affect" value="3">  
    8.   
    9.        <input type="checkbox"name="affect" id="affect" value="4">  
    10.   
    11.        <input type="submit">  
    12.   
    13. </form>  
    14.   
    15. <%request.setCharacterEncoding("GB18030"); %>  
    16.   
    17. 选择的是: paramValues.affect[0]
      {paramValues.affect[1]} paramValues.affect[2]
      {paramValues.affect[3]}  

           3)、header和headerValues对象

           用于获取HTTP请求的一个具体的header值,当同一个header存在多个值时需使用headerValues对象。例如:

           ${header[“connection”]}获取HTTP请求的header的是否需要持久连接这一属性

           4)、initParam对象

           用于获取Web应用初始化参数的值。例如:

           在web.xml文件中设置一个初始化参数user:

                  <context-param>

                       <param-name>user</param-name>

                       <param-value>小武</param-value>

                </context-param>

           使用EL获取该参数:

                  ${initParam.user}

           5)、cookie对象

           用于访问由请求设置的cookie。例如:

    [html] view plain copy
     
     print?
    1. <%  
    2.   
    3. Cookie cookie = new Cookie("user", "xiaowu");  
    4.   
    5. response.addCookie(cookie);  
    6.   
    7. %>  
    8.   
    9. ${cookie.user.value }  

    四、定义和使用EL函数

           EL允许定义和使用函数,但是eclipse好像不能自动生成tld文件,我嫌麻烦,而且EL函数不常用,所以这里不介绍了。

  • 相关阅读:
    微信小程序支付
    python中 try、except、finally执行顺序
    磁盘设备在 Linux 下的表示方法
    sanic中间件和监听器
    sed命令详解
    awk命令详解
    gd库
    php中计算二维数组中某一元素之和
    Linux SVN 命令详解
    PHP array 操作函数
  • 原文地址:https://www.cnblogs.com/firstdream/p/7403759.html
Copyright © 2020-2023  润新知