什么是EL表达式?EL表达式的作用?
* EL表达式的全称是:Expression Language。是表达式语言
* 作用?EL表达式主要是代替Jsp页面中的表达式脚本在jsp页面中进行数据的输出
* 输出语句比jsp简洁
* 格式:${} 输出null值的时候是空串
* 主要在jsp中输出数据
* 主要是输出域对象中的数据
* 当四个域中都有相同的key的数据的时候,EL表达式会按照4个域的从小到大的顺序去进行搜索,找到
* 就输出。
* EL特点:
* El在找属性的时候不是直接找你的javaBean中有没有这个变量,
* 而是找你的javaBean中有没有这个变量的get方法
* 如果有,就算没有定义过变量也可以输出,如果没有
* 就算你定义了变量,输出的时候依然报错
* EL中关系运算:
* ${== 或 eq} * ${< 或 lt} * ${> 或 gt} * ${>= 或 ge} * ${<= 或 le} * EL中逻辑运算符 (与mysql相似) * ${12==12 && 12>12} 或者 ${12==12 and 12>12} * ${12==12 || 12>11} 或者 ${12==12 or 12>11} * ${! ture} 或者 {not ture} * EL中运算符 * ${12+12} * ${12-12} * ${18/12} or ${18 div 12} * ${18%12} or ${18 mod 12}
* EL中的empty运算
* 可以判断一个数据是否为空,如果为空输出true,不为空输出false
* 以下几种情况为空:
* 1.只为null值的时候为空
* 2.值为空串的时候,为空
* 3.值是Object类型数组,长度为0的时候
* 4.list,map集合元素个数为0的时候为空
* 格式: ${empty emptyNull }
* EL中的三元表达式
* 格式 ${12!=12?值1:值2}
* EL中.运算和[]运算
* .运算可以输出Bean对象中某个属性的值 * []括号运算可以输出有序集合中某个元素的值 * 并且[]中括号运算,还可以输出map集合中key里含有特殊字符(包含上面运算符)的key的值 ${headerValues["User-Agent"][0]}<br> * map.put("a.a.a","b"); * map.put("a+a+a","b"); * map.put("a>a>a","b"); * map.put("a||a||a","b"); * ${map['a.a.a']} 单双引号都可以 *
* EL表达式中的11个隐含对象
* 是EL表达式中自己定义的,可以直接使用 * * 变量 类型 作用 * pageContext PageContextlmpl 可以获得jsp中的九大内置对象 * pageScope Map<String,Object> 可以获取pageContext域中的数据 * requestScope Map<String,Object> 可以获取request域中的数据 * sessionScope Map<String,Object> 可以获取sessiong域中的数据 * applicationScope Map<String,Object> 可以获取servletContext域中的数据 * param Map<String,String> 可以获取请求参数的值 * pramValues Map<String,String[]>可以获取请求参数的值,获取多个值的时候使用 * header Map<String,String> 可以获得请求头的信息 * headerValuers Map<String,String> 可以获得请求头的信息,获取多个值的时候使用 * cookie Map<String,cookie> 获取当前请求的cookie信息 * initParam Map<String,String> 可以获取在web.xml中配置的<context-param>上下文参数 * * EL获取四个特定域中的属性 * pageScope ======== pageContext域 * requestScope ======== request域 * sessionScope ======== sessiong域 * applicationScope ======== servletContext域 * <% pageContext.setAttribute("key1","pageContext"); request.setAttribute("key1","request"); session.setAttribute("key1","session"); application.setAttribute("key1","application"); %> ${key1} 如果你这样只能一直得到最小的 <br> 但是如果我们想要获得指定的 你就可以使用相应域的scope对象 ${requestScope.key1} <br> 其他域也是一样 <br>
* pageContext对象的使用<br>
* 1.协议: request.getScheme() 它可以获取请求的协议<br> * 2.服务器ip:request.getServerName()获取火球的服务器ip或域名<br> * 3.服务器端口:request.getServerPort()获取请求的服务器端口号<br> * 4.获取工程路径:request.getContextPath()获取当前工程路径<br> * 5.获取请求方法:request.getMethod()获取请求的方式<br> * 6.获取客户端ip地址:request.getRemoteHost()获取客户端的ip地址<br> * 7.获取会话的id编号:session.getId()获取会话的唯一标识<br> 1.<br> jsp表达式脚本格式:<%=request.getScheme()%><br> EL中:${pageContext.request.scheme}<br> 2.<br> jsp表达式脚本格式:<%=request.getServerName()%><br> EL中:${pageContext.request.serverName}<br> 3.<br> jsp表达式脚本格式:<%=request.getServerPort()%><br> EL中:${pageContext.request.serverPort}<br> 4.<br> jsp表达式脚本格式:<%=request.getContextPath()%><br> EL中:${pageContext.request.contextPath}<br> 5.<br> jsp表达式脚本格式:<%=request.getMethod()%><br> EL中:${pageContext.request.method}<br> 6.<br> jsp表达式脚本格式:<%=request.getRemoteHost()%><br> EL中:${pageContext.request.remoteHost}<br> 7.<br> jsp表达式脚本格式:<%=session.getId()%><br> EL中:${pageContext.session.id}<br>
<% Person person = new Person(); person.setName("华哥好帅!"); person.setPhones(new String[]{"1866666","12333333","1366666"}); List<String> cities = new ArrayList<String>(); cities.add("北京"); cities.add("上海"); cities.add("深圳"); cities.add("东莞"); person.setCities(cities); Map<String, Object> map = new HashMap<>(); map.put("key1","value1"); map.put("key2","value21"); map.put("key3","value3"); person.setMap(map); pageContext.setAttribute("person",person); %> 输出Person Bean: ${person} <br> 输出Person name: ${person.name}<br> 输出Person Phones中的元素: ${person.phones[0]}<br> 输出Person Phones中的元素: ${person.phones[1]}<br> 输出Person Phones中的元素: ${person.phones[2]}<br> 输出Citys集合中的元素值:${person.cities}<br> 输出Citys集合中的元素值的某一个: ${person.cities[0]}<br> 输出Map 集合中的元素值:${person.map}<br> 输出Map 集合中的元素值的某一个:${person.map.key1}<br> 输出Map 集合中的元素值的某一个:${person.map.key2}<br> 输出Map 集合中的元素值的某一个:${person.map.key3}<br> ${person.age}<br>
<%--* 1.param Map<String,String> 可以获取请求参数的值--%> <%--* 2.pramValues Map<String,String[]>可以获取请求参数的值,获取多个值的时候使用--%> <%--* 3.header Map<String,String> 可以获得请求头的信息--%> <%--* 4.headerValuers Map<String,String> 可以获得请求头的信息,获取多个值的时候使用--%> <%--* 5.cookie Map<String,cookie> 获取当前请求的cookie信息--%> <%--* 6.initParam Map<String,String> 可以获取在web.xml中配置的<context-param>上下文参数--%> <%-- 若你要特定的属性值 param.参数名 比如要username就可以param.username --%> 输出请求参数username的值:${param.username}<br> 输出请求参数password的值:${param.password}<br> 当你有多个值 比如selected下拉框 多选框时可以用下面这个 输出请求参数username数组中的值:${paramValues.username[0]}<br> ${paramValues.password[0]}<br> <%--* header Map<String,String> 可以获得请求头的信息<br>--%> <%--* headerValuers Map<String,String> 可以获得请求头的信息,获取多个值的时候使用<br>--%> 输出请求头【User-Agent】的值:${header["User-Agent"]}<br> ${header.connection}<br> 此时得到这个值的地址${headerValues["User-Agent"]}<br> ${headerValues["User-Agent"][0]}<br> 获取Cookie的名称Cookie:${cookie.JSESSIONID.name}<br> 获取Cookie的值: cookie:${cookie.JSESSIONID.value}<br> ${initParam}<br> ${initParam.user1}<br> ${initParam.user2}<br>