JSP之神奇的EL表达式

来源:互联网 发布:淘宝页面背景图片素材 编辑:程序博客网 时间:2024/05/17 01:00

 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}              取得sessionID

${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>

原创粉丝点击