EL表达式

EL表达式:Expression Language。

          主要作用:1.获取数据,替换jsp中的java代码脚本,从各类型的web域中检索java对象获取数据。

                              2.执行计算,利用el表达式可以再jsp中执行一些基本的关系运算、逻辑运算和算术运算。

                              3.获取web开发常用对象,el表达式定义了一些隐式对象,利用这些隐式对象可以获得web常用对象。

                              4.调用java方法,el表达式允许用户开发自定义el函数,以在jsp页面中调用el表达式的方式来调用java方法。

                              注:el表达式不支持字符串操作。

             例子:获取数据

                         .运算符:调用对象的getter方法
  []运算符:作用与.运算符一样。能做.不能做的事。

    <!-- 获取对象的某些属性,调用getter方法 -->
    <%
    Student s1 = new Student();
    s1.setName("s1");
    pageContext.setAttribute("s", s1);
    %>
    ${s.name}${s.birthday}${s.class }<br/>
    <%
    Student s2 = new Student();
    s2.setName("s2");
    request.setAttribute("s", s2);
    %>
    ${s.name}<br/>
    <%
    Student s3 = new Student();
    s3.setName("小三");
    s3.getHomeAddress().setProvince("你家");
    pageContext.setAttribute("s3", s3);
    %>
    ${s3.homeAddress.province}<br/>
    ${s3['homeAddress']["province"]}
    <hr/>
              
   <!-- 获取List集合中的元素 --> 
   <%
   List<String> list = new ArrayList<String>();
   list.add("aaa");
   list.add("bbb");
   list.add("ccc");
   pageContext.setAttribute("list", list);
   %>
   ${list[1]}<br/>
     
 <!-- 获取Map中的元素 -->
   <%
   Map<String,Student> map = new HashMap<String,Student>();
   map.put("a", new Student("aname"));
   map.put("b", new Student("bname"));
   map.put("c", new Student("cname"));
   pageContext.setAttribute("map", map);
   %>
   >
   ${map.b.name}


执行运算:

 关系运算符:  == 或 eq,!= 或 en,< 或 lt ,> 或 gt, <= 或 le,>= 或 ge

 逻辑运算符:&& 或 and,|| 或 or,! 或 not

  empty:检查对象是否为null 或 空

   三元表达式:${user en null?user.name : ""}

 <%
    String s1 = null;
    pageContext.setAttribute("s1", s1);
    %>
    ${empty s1}<br/>
    <%
    String s2 = "";
    pageContext.setAttribute("s2", s2);
    %>
    ${empty s2}<br/>
     <%
    String s3 = "   ";
    pageContext.setAttribute("s3", s3);
    %>
    ${empty s3}<br/>
     <%
    List l1 = new ArrayList();
    pageContext.setAttribute("l1", l1);
    %>
    ${empty l1}<br/>
    <%
    List l2 = new ArrayList();
    l2.add("aaa");
    pageContext.setAttribute("l2", l2);
    %>
    ${empty l2}<br/>
    <hr/>
    ${1>2?"大于":"小于" }<hr/>
    <!-- 以下就是具体的真实应用 -->
    <%
    session.setAttribute("user", new Student("小温静"));
    %>
    <!-- EL表达式不支持字符串连接操作 -->
    ${empty user?"木有登录":"欢迎您"}${user.name}<hr/>
    <%
    List cart = new ArrayList();
    cart.add("p");
    session.setAttribute("cart", cart);
    %>
    ${empty cart?"您还没有购物":"你购买了以下内容:" }<hr/>
    
    <%
    pageContext.setAttribute("gender", "0");
    
    %>
    <input type="radio" name="gender" value="1" ${gender=="1"?'checked="checked"':'' }/>男
    <input type="radio" name="gender" value="0" ${gender=="0"?'checked="checked"':'' }/>女<hr/>
    <%
    pageContext.setAttribute("city", "JN");
    %>
    <select>
    	<option value="BJ" ${city=="BJ"?'selected="selected"':'' }>北京</option>
    	<option value="JN" ${city=="JN"?'selected="selected"':'' }>济南</option>
    	<option value="JZ" ${city=="JZ"?'selected="selected"':'' }>荆州</option>
    </select>

el表达式中的内置对象:

                pageContext   javax.servlet.jsp.PageContext                      与JSP内置对象一样

                pageScope   java.util.Map                      对应PageContext中的那个Map

                requestScope   java.util.Map              对应ServletRequest中的那个Map
sessionScope   java.util.Map               对应HttpSession中的那个Map
applicationScope          java.util.Map              对应ServletContext中的那个Map

                param   java.util.Map              对应请求参数。key是参数名  value是参数值String

                paramValues           java.util.Map              对应请求参数。key是参数名  value是参数值String[]

                header  java.util.Map                             对应请求消息头。key是头名 value是头值String

                cookie java.util.Map                             对应cookie。key是cookie的name value是Cookie对象

                initParam java.util.Map                     获取web.xml中配置的context-param key是参数名 value参数值String



  ${pageContext.request.contextPath}=<%=request.getContextPath() %><hr/>
    <%
    pageContext.setAttribute("p", "pp");
    request.setAttribute("p", "rp");
    %>
    ${p}<br/>
    <%--pageContext.findAttribute("p") --%>
    ${pageScope.p} <br/>
    <%--pageContext.getAttribute("p") --%>
    ${requestScope.p }<br/>
    <hr/>
    
    <%
    request.setAttribute("user", "hehe");
    //session.setAttribute("user", "user");//这个才是登录标记
    %>
    ${empty sessionScope.user?"木有登录":"欢迎您" }<br/>
    <%
    List list = new ArrayList();
    list.add("");
    request.setAttribute("cart", list);
    session.setAttribute("cart", list);
    %>
    ${empty sessionScope.cart?"木有购买东西":"买了东西" }
    <hr/>
    <!-- http://localhost:8080/day07_02_el/03.jsp?username=abc&username=def -->
    ${param.username}<!-- request.getParameter("username") -->
    ${paramValues.username[0]}<!-- request.getParameterValues("username") -->
    ${paramValues.username[1]}<br/>
    ${header['Accept-Encoding']}<!-- request.getHeader("Accept-Encoding") -->
    ${headerValues['Accept-Encoding'][0]}<!-- request.getHeaders("Accept-Encoding") -->
    <br/>
    ${cookie.JSESSIONID.value }
    ${cookie.JSESSIONID.name }<br/>
    ${initParam.encoding }



自定义EL函数:

a.编写一个普通类,添加要实现功能的静态方法

                       public class MyFunctions {
				public static String toUpperCase(String s){
					return s.toUpperCase();
				}
			}
b.在WEB-INF目录下,建立一个扩展名为tld(Tag Libary Definition)的xml文件,增加以下内容

<?xml version="1.0" encoding="UTF-8"?>
<taglib>
	<tlib-version>1.0</tlib-version>
	<jsp-version>2.0</jsp-version>
	<short-name>myfunctions</short-name>
	<uri>http://www.ivan.com/jsp/functions</uri>
	<function>
		<description>to uppercase</description>
		<name>toUpperCase</name>
		<function-class>com.i.funcitons.MyFunctions.java</function-class>
		<function-signature>java.lang.String toUpperCase( java.lang.String )</function-signature>
	</function>
</taglib>
c.(Servlet2.5是可选的,前提是把tld文件放在了WEB-INF的根目录下),修改web.xml

 

  <jsp-config>
				<taglib>
					<taglib-uri>http://www.itheima.com/jsp/functions</taglib-uri>
					<taglib-location>/WEB-INF/myfn.tld</taglib-location>
				</taglib>
			  </jsp-config>

d.在jsp中使用

<%@ taglib prefix="myfun" uri="http://www.ivan.com/jsp/functions"%>

 <%
            session.setAttribute("s", "ss");
        %>
        ${s}
        ${myfun:toUpperCase(s)}



JSTL简介:

导入jar包:standard.jar  jstl.jar


标签的作用:替换JSP中的<%%>
JSTL:Java Standard Tag Libary(JSP内部标准。由apache提供的)

由5部分组成:
Core 核心  c
Fmt  国际化 fmt
Functions EL函数 fn

SQL 数据库 sql
XML 操作XML xml

 ${fn:contains("Tomcat","Tom") }<br/>
    ${fn:containsIgnoreCase("Tomcat","CAT") }<br/>
    ${fn:substring("Tomcat",3,6000)}<br/>
    ${fn:split("2013-12-27","-")[0] }<br/>
    ${fn:split("2013-12/27","-/")[0] }<br/>
    ${fn:split("2013-12/27","-/")[1] }<br/>
    ${fn:split("2013-12/27","-/")[2] }<br/>
    <%
    String s[] = {"I love","U"};
    pageContext.setAttribute("s", s);
    %>
    ${fn:join(s,"!") }<br/>
    <%
    pageContext.setAttribute("h", "<hr/>");
    %>
    ${fn:escapeXml(h)}


c标签

 <!-- c:if判断,属性test的值,如果为true,标签的主题内容会显示 -->
    <c:if test="true">
    	哈哈
    </c:if>
    <c:if test="false">
    	shit
    </c:if>
    <hr/>
    <%
    List cart = new ArrayList();
    cart.add("");
    session.setAttribute("cart", cart);
    %>
    <c:if test="${empty sessionScope.cart}">
    	没有买东西
    </c:if>
    <c:if test="${!empty sessionScope.cart}">
    	买了
    </c:if><br/>
    <!-- var指定的是一个字符串,记住test的运算结果,并以var指定的字符串为key,存到域范围中 -->
    <c:if test="${12>10}" var="result" scope="page">
    <!-- pageContext.setAttribute('result',true) -->
    	大于
    </c:if>
    ${pageScope.result}

<!-- c:forEach遍历.重复执行主题内容 -->
   <%
   String s[] = {"a","b","c"};
   pageContext.setAttribute("s", s);
   %>
   <c:forEach items="${s}" var="v">
   		${v}<br/>
   </c:forEach>
   <!-- 遍历List -->
   <hr/>
   <%
   List list = new ArrayList();
   list.add("aa");
   list.add("bb");
   list.add("cc");
   list.add("dd");
   list.add("ee");
   list.add("ff");
   list.add("gg");
   list.add("hh");
   pageContext.setAttribute("list", list);
   %>
   <c:forEach items="${list}" var="v">
   	${v }<br/>
   </c:forEach>
    <!-- 遍历Set -->
   <hr/>
   <%
   Set set = new HashSet();
   set.add("aaa");
   set.add("bbb");
   set.add("ccc");
   pageContext.setAttribute("set", set);
   %>
   <c:forEach items="${set}" var="v">
   	${v }<br/>
   </c:forEach>
    <!-- 遍历Map -->
   <hr/>
   <%
   Map map = new HashMap();
   map.put("a", "aaaa");
   map.put("b", "bbbb");
   map.put("c", "cccc");
   pageContext.setAttribute("map", map);
   %>
   <!-- pageContext.setAttribute("v",Map.Entry) -->
   <c:forEach items="${map}" var="v">
   	${v.key}=${v.value}<br/>
   </c:forEach>
   
   <hr/>
   <c:forEach begin="1" end="100" var="v">
   	${v}
   </c:forEach>
   <hr/>
   <!-- 索引从0开始。0索引是第1个元素 。含头含尾-->
   <c:forEach items="${list}" var="v" begin="2" end="5">
   	${v }<br/>
   </c:forEach>
   <hr/>
   <c:forEach items="${list}" var="v" begin="2" end="500">
   	${v }<br/>
   </c:forEach>
    <hr/>
   <c:forEach items="${list}" var="v" begin="2" end="500" step="2">
   	${v }<br/>
   </c:forEach>
   <hr/>
   <!-- 真实的开发 -->
   <%
   //一般由Servlet来做
   List ps = new ArrayList();
   ps.add(new Person("温静",0,"南阳"));
   ps.add(new Person("王学进",1,"泰州"));
   ps.add(new Person("刘梅双",0,"泰安"));
   ps.add(new Person("丁魏",1,"信阳"));
   ps.add(new Person("胡王飞",1,"九江"));
   pageContext.setAttribute("ps", ps);
   %>
   <!-- 先弄模板:html -->
   <table border="1" width="438">
   		<tr>
   			<th>序号</th>
   			<th>姓名</th>
   			<th>性别</th>
   			<th>城市</th>
   		</tr>
   		<!-- 
   		varStatus:指定一个变量,该变量引用一个对象(放到page范围中)。该对象记录着当前遍历的元素的信息
   				int getIndex():从0开始,索引号
   				int getCount():从1开始,计数
   				boolean isFirst():是否是第一个
   				boolean isLast():是否是最后一个
   		 -->
   		<c:forEach items="${ps}" var="p" varStatus="vs">
   			<tr class="${vs.count%2==0?'even':'odd' }">
   				<td>${vs.count}</td>
	   			<td>${p.name}</td>
	   			<td>${p.gender==0?'女':'男'}</td>
	   			<td>${p.city}</td>
	   		</tr>
   		</c:forEach>
   </table>




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值