JSP学习---EL表达式

本篇博客知识点~
1.EL表达式简介
2.EL表达式实例代码演示

EL表达式简介

  • EL 全名为Expression Language。EL主要作用:
  • 获取数据
  • 执行运算
  • 获取web开发常用对象
  • 调用Java方法

EL表达式的本质是JAVA代码~

获取数据(1)

EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的java对象中获取数据。
EL表达式也可以很轻松获取JavaBean的属性,或获取数组、Collection、Map类型集合的数据,

使用EL表达式获取数据语法:“${标识符}”
示例代码:

<%@ page language="java" import="java.util.*, cn.hncu.domain.User" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>EL表达式</title>
  </head>

  <body>
    <h2>EL表达式作用1: 获取数据</h2>

    <h3>EL读取容器中的属性值,注意:只有放在容器的数据才能读取出来,且标识符是属性名(并非对象名)</h3>
    <%
       pageContext.setAttribute("name", "pageJack");
       //pageContext.setAttribute("name", "requestJack", PageContext.REQUEST_SCOPE);
       //session.setAttribute("name", "sessionJack");
       //application.setAttribute("name", "appJack");
    %>
    ${name}<!-- 此处 name 是属性名 -->
    <!-- EL表达式内部调用  pageContext.findAttribute("name")
                     输出时等价于:  pageContext.findAttribute("name")?null:"",pageContext.findAttribute("name") -->
    <br/>

    ${aaa} <!-- 由于4个容器中都不存在该aaa属性,因此输出空串 -->
    <br/>

    <%
        User user = new User();
        user.setName("Tom");
        user.setAge(22);
        user.setPwd("1234");
        pageContext.setAttribute("u", user); //只有放在容器中,才能用EL表达式读取出来。
    %>
    ${u} <br/>  <!-- 如果该属性的值是一个对象,则自动会调用toString() -->

    ${u.name},${u.age},${u.pwd} <br/> <!--内部是根据属性名推出对应getter方法进行调用 -->

    <%
       Map<String,Object> map = new HashMap<String,Object>();
       map.put("nm", "城院");
       map.put("1","15");
       map.put("user",user);
       request.setAttribute("m", map);
    %>
    ${m}<br/> <!-- 输出整个map中的内容:{age=15, user=User [name=Tom, age=22, pwd=1234], nm=城院}  -->

    <!-- 读取map中属性的两种方式,注意方式2中的引号不能省  -->
    ${m.nm}, ${m['nm']}  <br/> 
    ${m.user.name}, ${m['user'].name}, ${m.user['name']}
    <br/>

    <%
       List<Object> list = new ArrayList<Object>();
       list.add("aaa");
       list.add("张三");
       list.add("城院");
       list.add(user);
       session.setAttribute("list", list);
    %>
    ${list} <br/>  <!-- 输出整个list中的内容: [aaa, 张三, 城院, User [name=Tom, age=22, pwd=1234]]  -->

    <%-- 读取list中属性的方式: ${标识名[序号]}  --%>
    ${list[1]}<br/>


    <%
       map.put("mlist", list);
       request.setAttribute("m", map);
    %>
    ${m.mlist[3].name} <br/>



  </body>
</html>

执行运算

<%@ page language="java" import="java.util.*, cn.hncu.domain.User" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>EL表达式</title>
    <%
        User user = new User();
        user.setName("Tom");
        user.setAge(22);
        user.setPwd("1234");
        pageContext.setAttribute("user", user); 
    %>

  </head>

  <body>
    <h2>EL表达式作用2: 执行运算</h2>
    1.可以使用算术运算符: + - * / % 等 <br/>
    ${user.age+10+234%10} <br/> <br/>

    2.可以使用比较运算符: ==  !=  <  >  <= >=  <br/>
    ${10>34},  ${user.name=='Tom'}   <br/>

    3.逻辑运算符: &&   ||  !   <br/>
    ${user.age>20 && user.name=='Tom' }  <br/>

    4.条件运行符即?号表达式 <br/>
    ${user.age>30 ? "old" : "young" }  <br/>

    5.empty运算符(如果某个属性不存在或返回值为null,该运算符都是返回true。否则返回false)    <br/>
    <%
      request.setAttribute("u", null);
    %>
    ${empty user}, ${empty abc }, ${empty u}  <br/>
    ${!empty user}   <br/>


  </body>
</html>

获得web开发常用对象

<%@ page language="java" import="java.util.*, cn.hncu.domain.User" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>EL表达式</title>
    <%
        User user = new User();
        user.setName("Tom");
        user.setAge(22);
        user.setPwd("1234");
        //pageContext.setAttribute("user", user); 
        //request.setAttribute("user", user); 
        session.setAttribute("user", user); 
        //application.setAttribute("user", user); 
    %>

  </head>

  <body>
    <h2>EL表达式作用3: 获得web开发常用对象(9个隐含对象)</h2>
   1) 4个容器隐含对象: pageScope,requestScope,sessionScope,applicationScope <br/>
             通过指定的容器去获取,效率更高!<br/>
     1:${pageScope.user},
     2:${requestScope.user},
     3:${sessionScope.user},
     4:${applicationScope.user} <br/>

   2) 1个pageContext隐含对象<br/>
     <a href="<%=request.getContextPath()%>/index.jsp">访问主页1</a>    <br/>
     <a href="${pageContext.request.contextPath}/index.jsp">访问主页2</a>  <br/>

   3) 5个http请求头相关数据的隐含对象:header,cookie<br/>
   ${header}  <!-- 把请求头中的所有信息封装成map,整体显示出来 --><br/>
   ${header.host} <!-- 只输出请求头中host-key的value --> <br/>
   ${header.cookie} <!-- 只输出请求头中cookie-key的value --> <br/>


   <%-- ${header.cookie.JSESSIONID} --%> 
    <!-- 如果想输出JSESSIONID,不能用header.cookie.JSESSIONID,
             因为后者整个字符串中的一部分,并不是属性(有对应getter方法)。
         应该用一个独立的cookie隐含对象     -->
    <br/>
    ${cookie.JSESSIONID.value } <br/>

    <!-- 通过param隐含对象获取 页面提交过来的参数, 演示如下面的超链接 -->
    <a href="http://localhost:8080/elWeb/jsps/demo3.jsp?name=Jack&age=21&addr=abc"> 演示提交参数</a><br/>
    ${param} <!-- 获取页面提交的参数 --> <br/>
    ${param.age} <!-- 获取页面提交的某一个参数 --> <br/>


    <h3>paramValues和headerValues一般只在某参数有多个值时才使用。如果仅仅是单个值,用前面的隐含对象header或param更简单</h3>
    <!-- 通过paramValues隐含对象获取页面提交过来的所有参数值,每个值以String[]的方式输出,因为有的参数有多个值如hobby -->
    ${paramValues} <!-- 输出所有参数值 --> <br/>
    ${paramValues.addr[0] } <!-- 输出其中某一个参数如addr的第一个值 --> <br/>

    <!-- 通过headerValues隐含对象获取请求头中的所有参数值,每个值以String[]的方式输出,因为有的参数有多个值 -->
    ${headerValues.accept[0] } <!-- 输出其中某一个参数如accept的第一个值 --> <br/>

    4) 1个initParam <!-- 读取web.xml中的初始化参数 --> <br/> 


  </body>
</html>

使用EL调用Java方法

<%@ page language="java" import="java.util.*, cn.hncu.domain.User" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>EL表达式作用4: 使用EL调用Java方法(JSTL中的函数)</title>
  </head>

  <body>
    <h2>EL表达式作用4: 使用EL调用Java方法(JSTL中的函数)</h2>
    <%
        request.setAttribute("name", "ncu6666");
    %>

    ${fn:contains(name,"hncu") }<br/>

    ${fn:substring("hello World!",2,7) } <br/>

    <c:if test="${ fn:contains(name,'hncu') }">
        啦啦啦....
    </c:if>


    <pre>
           有关EL表达式调用JSTL函数的例子见上面几个就行。至于有哪些函数以及每个函数如果调用,请看底层:
       用小茶杯打开: Tomcat目录/项目名/WEB-INF/lib/jstl-impl.jar
       所有函数的定义都在里面!!!  还可以从该jar包的META-INF中的fn.tld文件(XML格式的文档)中查看说明--我们可以把它当作类似JavaAPI的文档来用
    </pre>

  </body>
</html>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值