EL表达式详解及应用实例
1. EL是JSP内置的表达式语言!
    * jsp2.0开始,不让再使用java脚本,而是使用el表达式和动态标签来替代java脚本!
    * EL替代的是<%= ... %>,也就是说,EL只能做输出!
2. EL表达式来读取四大域
    * ${xxx},全域查找名为xxx的属性,如果不存在,输出空字符串,而不是null。
    * ${pageScope.xxx}、${requestScope.xxx}、${sessionScope.xxx}、${applicationScope.xxx},指定域获取属性!
3. javaBean导航
    <%
	    Address address = new Address();
	    address.setCity("北京");
	    address.setStreet("西三旗");
	    Employee emp = new Employee();
	    emp.setName("李小四");
	    emp.setSalary(123456);
	    emp.setAddress(address);
	    request.setAttribute("emp", emp);
    %>
  <h3>使用el获取request域的emp</h3>
  ${requestScope.emp.address.street }<!--相当于 request.getAttribute("emp").getAddress().getStreet() --><br/>
4. EL可以输出的东西都在11个内置对象中!11个内置对象,其中10个是Map!pageContext不是map,它就是PageContext类型,1个顶9个。
    * param:对应参数,它是一个Map,其中key参数名,value是参数值,适用于单值的参数。
    * paramValues:对应参数,它是一个Map,其中key参数名,value是多个参数值,适用于多值的参数。
    * header:对应请求头,它是一个Map,其中key表示头名称,value是单个头值,适用于单值请求头
    * headerValues:对应请求头,它是一个Map,其中key表示头名称,value是多个头值,适用于多值请求头
    * initParam:获取<context-param>内的参数!
          <context-param>
  	        <param-name>xxx</param-name>
  	        <param-value>XXX</param-value>
        </context-param>
        <context-param>
  	        <param-name>yyy</param-name>
  	        <param-value>YYY</param-value>
        </context-param>
${initParam.xxx}
    * cookie:Map<String,Cookie>类型,其中key是cookie的name,value是cookie对象。 ${cookie.username.value}
    * pageContext:它是PageContext类型!${pageContext.request.contextPath}
EL函数库(由JSTL提供的)
    * 导入标签库:<%@ tablib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
	    String toUpperCase(String input):把参数转换成大写
	    String toLowerCase(String input):把参数转换成小写
	    int indexOf(String input, String substring):从大串,输出小串的位置!
	    boolean contains(String input, String substring):查看大串中是否包含小串
	    boolean containsIgnoreCase(String input, String substring):忽略大小写的,是否包含
	    boolean startsWith(String input, String substring):是否以小串为前缀
	    boolean endsWith(String input, String substring):是否以小串为后缀
	    String substring(String input, int beginIndex, int endIndex):截取子串
	    String substringAfter(String input, String substring):获取大串中,小串所在位置后面的字符串
	    substringBefore(String input, String substring):获取大串中,小串所在位置前面的字符串
	    String escapeXml(String input):把input中“<”、">"、"&"、"'"、""",进行转义
	    String trim(String input):去除前后空格
	    String replace(String input, String substringBefore, String substringAfter):替换
	    String[] split(String input, String delimiters):分割字符串,得到字符串数组
	    int length(Object obj):可以获取字符串、数组、各种集合的长度!
	    String join(String array[], String separator):联合字符串数组!
自定义函数库
   * 写一个java类,类中可以定义0~N个方法,但必须是static,而且有返回值的!
   * 在WEB-INF目录下创建一个tld文件
       <function>
          <name>fun</name>
          <function-class>cn.yzu.fn.MyFunction</function-class>
          <function-signature>java.lang.String fun()</function-signature>
      </function>
   * 在jsp页面中导入标签库
       <%@ taglib prefix="it" uri="/WEB-INF/tlds/it.tld" %>
   * 在jsp页面中使用自定义的函数:${it:fun() }
应用实例:
<%@ page language="java" import="java.util.*,cn.yzu.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<%
Address address=new Address();
address.setName("江苏");
User user=new User();
user.setName("张三");
user.setAddress(address);
request.setAttribute("user", user); String s="abcdefg";
request.setAttribute("s", s);
%>
<body>
${user.name}  <!-- 全域查找,范围由小到大, -->
${requestScope.user.name}  <!-- 指定域查找 -->
${user.address.name}  <!-- javaBean导航 -->
${user.haha}<hr> <!-- 只有方法,没有属性也可输出 -->
${param.username}  <!-- 输出单值参数-->
${paramValues.hobby[0]}  <!-- 输出多值参数的第一个-->
${paramValues.hobby[1]}<hr> <!-- 输出多值参数的第二个 -->
${header['User-Agent']}<hr> <!-- 输出单值头信息,还有headerValues,用法同paramValues -->
${cookie.JSESSIONID.value}  <!-- 输出某个cookie的值 -->
${cookie.JSESSIONID.name}  <!-- 输出某个cookie的名字 -->
${cookie.JSESSIONID}<hr> <!-- 输出某个cookie对象 -->
${pageContext.request.contextPath}  <!-- 输出项目名,pageContext一个顶九个 -->
${pageContext.session.id}<hr> <!-- 输出sessionID --> <!-- EL函数,需要导入JSTL -->
${fn:length(s)} ${fn:toUpperCase(s)}<hr>
</body>
</html>
index.jsp
 package cn.yzu;
 public class User {
     String name;
     Address address;
     public String getName() {
         return name;
     }
     public void setName(String name) {
         this.name = name;
     }
     public Address getAddress() {
         return address;
     }
     public void setAddress(Address address) {
         this.address = address;
     }
     public String getHaha() {
         return "哈哈";
     }
 }
User
 package cn.yzu;
 public class Address {
     String name;
     public String getName() {
         return name;
     }
     public void setName(String name) {
         this.name = name;
     }
 }
Address
运行截图:

EL表达式详解及应用实例的更多相关文章
- Java8 Lambda表达式详解手册及实例
		先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号"程序新视界",好好系列的学习一下 ... 
- JavaWeb学习篇之----EL表达式详解
		我们之前的几篇文章中都提到了一个EL表达式,那么这个EL表达式到底是什么东东呢?为什么用处那么大,下面我们就来看看EL表达式的相关内容 EL表达式简介: EL 全名为Expression Langua ... 
- EL表达式详解(常用表达式以及取值)
		EL表达式 学习总结 一. El表达式概念 二. El中的表达式 1. 算术表达式 2. 比较表达式 3. 逻辑表达式 4. 三元表达式 5. 判空表达式 三.EL 从四个作用域中取值 1. 概念 2 ... 
- EL表达式详解
		转载自: http://blog.csdn.net/qwerasdf123/article/details/4189889 写在最前面: 如果想使用el表达式,首先必须将jstl.jar,standa ... 
- java Web EL表达式详解
		1.EL表达式的简介 EL表达式是一种JSP技术,能够代替JSP中原本要用Java语言进行显示的语句,使得代码更容易编写与维护.最基本的语法是${express}. 2.获取并显示数据 从四个域中通过 ... 
- zabbix3.4.7触发器表达式详解
		zabbix触发器表达式详解 概述:触发器中的表达式使用很灵活,我们可以创建一个复杂的逻辑测试监控,触发器表达式形式如下: {<server>:<key>.<functi ... 
- Java 8 Lambda 表达式详解
		一.Java 8 Lambda 表达式了解 参考:Java 8 Lambda 表达式 | 菜鸟教程 1.1 介绍: Lambda 表达式,也可称为闭包,是推动 Java 8 发布的最重要新特性. La ... 
- JAVA8之lambda表达式详解
		原文:http://blog.csdn.net/jinzhencs/article/details/50748202 lambda表达式详解 一.问题 1.什么是lambda表达式? 2.lambda ... 
- cron表达式详解
		@Scheduled(cron = "* * * * * *") cron表达式详解 1.cron表达式格式: {秒数} {分钟} {小时} {日期} {月份} {星期} {年份( ... 
随机推荐
- Delphi XE5 android 获取网络状态
			unit Androidapi.JNI.Network; interface function IsConnected: Boolean; function IsWiFiConnected: Bool ... 
- MySQL中无GROUP BY直接HAVING的问题【转】
			本文来自网址: http://www.penglixun.com/tech/database/having_without_groupby_in_mysql.html 今天有同学给我反应,有一张表,i ... 
- ffmpeg-20160701-git-bin.7z
			ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 S 下一帧 [ -2秒 ] +2秒 ; -1秒 ' +1秒 下一个帧 -> -5秒 f ... 
- WebRequest 获取网页乱码
			问题:在用WebRequest获取网页源码时得到的源码是乱码. 原因:1,编码不对 解决办法:设置对应编码 WebRequest request = WebRequest.Create(Url);We ... 
- Ubuntu 14.04 下搭建SVN服务器 svn://
			Ubuntu 14.04 下搭建SVN服务器 svn:// 安装软件包: sudo apt-get install subversion 之后选择SVN服务文件及配置文件的放置位置.我放在了/srv下 ... 
- 【python】lxml中多个xml采用相同节点时出现的问题
			今天突然发现了一个lxml的坑. 假设我们有一个节点 <id>123</id> 有两个父节点都要用上述节点,则必须把上面的节点写两遍!用同一个会出错! 出错例子: #!/usr ... 
- Linux面试题汇总答案
			转自:小女生的Linux技术~~~Linux面试题汇总答案~~ 一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的 ... 
- curl命令 抓取网络数据相应头
			curl --verbose --data "Password=123&Username=158101068&url=http://m.vancl.com/" & ... 
- storyboard pushViewController 的时候,新的界面黑屏
			storyboard 创建的一级界面需要通过代码跳转到另一 storyboard 创建的界面的时候,通常我们会这样 其实 alloc init 相当于重新创建一个界面,所以我们 push 进入之后会发 ... 
- August 24th 2016 Week 35th Wednesday
			Storms make trees take deeper roots. 暴风雨能使大树的根扎得更深. If the trees already have deep roots, then the s ... 
