JSP之神奇的EL表达式

  EL表达式

–       JSP表达式语言(ExpressionLanguage),简称EL,最初定义在JSTL1.0规范中,直到JSP2.0之后,EL表达式才正式成为JSP规范中的一部分。EL为存取变量、表达式运算和读取内置对象等内容提供了新的操作方式。

–       EL表达式的目的是为了使JSP页面编写起来更简单

EL主要作用

 

•        获取数据:

–       EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域中检索java对象、获取数据。(某个web域中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)

•        执行运算:

–       利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。${user==null}

•        获取web开发常用对象

–       EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。

•        与作用范围有关的EL隐含对象包含有:pageScoperequestScopesessionScopeapplicationScope

–       它们可以读取使用JSP内置对象pageContextrequestsession以及applicationsetAttribute()方法所设定的对象的数值-----getAttribute(String name),却不能取得其他相关信息。

–       例如,要取得session中储存的一个username属性的值,可以利用下面的方法:session.getAttribute("username")

–       在EL中则使用下面的方法:${sessionScope.username}

 

与输入有关的隐式对象

•        与输入有关的隐含对象有两个,即paramparamValues,它们是EL中比较特别的隐含对象。例如,要取得用户的请求参数时,可以利用下列方法:

–       request.getParameter(String name)

–       request.getParameterValues(String name)

•        在EL中则可以使用paramparamValues两者来取得数据:

–       ${param.name}

–       ${paramValues.name}

 

  这时可同时使用[]运算符号来读取哪个元素,例如${paramValues.week[0]}

其他隐式对象

•        initParam

–       initParam用来读取设置在web.xml中的参数值。例如${initParam.repeat},等价于:(String)application.getInitParameter(“repeat”); 
servletContext.getInitParameter(“repeat”);

•        pageContext

–       pageContext用于取得其他有关用户要求或页面的详细信息

 

 

 ${pageContext.request.queryString}取得请求的参数字符串

${pageContext.request.requestURL} 取得请求的URL,不包括参数字符串

${pageContext.request.contextPath}        服务的webapplication 的名称

${pageContext.request.method}          取得HTTP 的方法(GETPOST)

${pageContext.request.protocol}        取得使用的协议(HTTP/1.1HTTP/1.0)

${pageContext.request.remoteUser}        取得用户名称

${pageContext.request.remoteAddr}         取得用户的IP 地址

${pageContext.session.new}            判断session 是否为新的

${pageContext.session.id}              取得session ID

${pageContext.servletContext.serverInfo}   取得主机端的服务信息

 

•        EL表达式也可以很轻松获取JavaBean的属性,或获取数组、CollectionMap类型集合的数据,例如:

–       ${user.address.city}

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

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

•        结合JSTLforeach标签,使用EL表达式也可以很轻松迭代各种类型的数组或集合,示例:

–       迭代数组

–       迭代collection类型集合

–       迭代map类型集合

 

 

 

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

<%@ page import="com.hbsi.el.*" %>

 

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN">

<html>

  <head>

   

   

    <title>My JSP'a7.jsp' starting page</title>

   

      

  </head>

 

  <body>

    <%

     String data="abcd";

    request.setAttribute("data1",data);

     %>

     ${data1 }

     <br/>

    

    <%

    User user = new User();

    user.setName("zhangsan");

     request.setAttribute("user1",user);

     

      %>

     ${user1.name }

    

    

     <br/>

    

      <%

     User user2 = new User();

     Address add = newAddress();

     add.setCity("北京");

    user2.setAddress(add);

    

    request.setAttribute("user2",user2);

    

      %>

     ${user2.address.city}

    

     <br/>

    

     <%

     List list = newArrayList();

     list.add(newUserBean("aaaa"));

     list.add(newUserBean("bbbb"));

     list.add(newUserBean("cccc"));

 

   

   request.setAttribute("list",list);

    

      %>

      ${list[1].name }

     ${list[2].name }

 

     ${list[3].name }

 

     

      <br/>

      <%

      Map map = newHashMap();

     map.put("aa",new User("aaaa"));

     map.put("bb",new User("bbbb"));

     map.put("cc",new User("cccc"));

     map.put("123",new User("dddd"));

     request.setAttribute("map1",map);

       %>

      ${map1.aa.name }

${map1.bb.name }

  ${map1.cc.name}

    ${map1["123"].name }

  </body>

</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值