13.1 jsp标签技术 el表达式

Posted xuwangqi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了13.1 jsp标签技术 el表达式相关的知识,希望对你有一定的参考价值。

一。标签技术

       1. 标签技术概述

              在jsp页面中有html语句和java语句相互嵌套,如果java的逻辑代码和页面的HTML组成代码都十分复杂,两者有掺杂在一起,页面的可读性和可维护性都将降低。为了解决这个问题,产生了标签技术。用它来替换页面中的java语句,这样页面中只会出现HTML代码,整体的可读性和可维护性都会提升。

       2. 常用的JSP标签技术

              jsp标签

                     sun公司提供的标签技术 - 目前用的比较少

              el表达式

                     便捷易用 - 使用非常广泛 - 但只是表达式无法实现复杂功能

              jstl标签库

                     提供了大量强大的标签支持,是目前应用最广泛的标签库

              自定义标签

                     sun提供的标签库开发接口,允许开发人员自己来开发特定功能的标签 - 通常用在框架级别的开发中,普通开发人员很少使用

              其他第三方标签

二。EL表达式

       1. EL表达式概述

              EL Expression Language  表达式语言

              在jsp页面内的<%= JSP脚本表达式%>   都可以使用EL表达式来替换

                EL具有获取数据、执行运算、获取常用开发对象、调用java方法这四方面的功能

              在javaee5及其以上版本中,都已经默认包含了el表达式的相关开发包,无需手动导入。

       2. 使用方式

              语法:$  el表达式 

              可以获取常量、变量、数组、列表、映射、javabean等中的数据

       3. EL特点:

              EL表达式不能设置值,只能获取值

              EL表达式只能获取域中的属性

              EL表达式不能遍历

在jsp脚本表达式中使用p.getXxx()方法获取的数据,在el表达式中都可以使用$p.xxx的方式来获取。详情往下面看

获取常量

<hr><h1>EL获取常量</h1>
<%= 123 %>
$123 
<%= 123.321 %>
$123.321 
<%= "abc" %>
$"abc" 
<%= true %>
$true 
<%= false %>
$false 

获取变量

a.获取指定域中的属性

<h3>el表达式获取域中的变量</h3>
      <%
          pageContext.setAttribute("name", "朴大胖", PageContext.APPLICATION_SCOPE); //设置Application域的变量
          pageContext.setAttribute("name", "曹二胖", PageContext.SESSION_SCOPE);
          pageContext.setAttribute("name", "李三瘦", PageContext.REQUEST_SCOPE);
          pageContext.setAttribute("name", "丽丽", PageContext.PAGE_SCOPE);
      
       %>
      <%=pageContext.getAttribute("name") %>  //获取pageContext域中的属性
      <%=request.getAttribute("name") %>
      <%=session.getAttribute("name") %>
      <%=application.getAttribute("name") %>
      $pageScope.name
      $requestScope.name
      $sessionScope.name 
      $applicationScope.name 

     el表达式中的四大作用域-----分别对应jsp表达式中scope对域的区分

el表达式

jsp脚本表达式(pageContext设置域属性的时候用到)

pageScope

PAGE_SCOPE

requestScope

REQUEST_SCOPE

sessionScope

SESSION_SCOPE

applicationScope

APPLICATION_SCOPE

 

      c. 获取变量 - 自动搜寻域

当通过el获取变量时,el会自动在四大作用域中按照由小到大的顺序搜寻指定名称的域属性,一旦获取直接返回,如果四大作用域中都没有找到,则返回一个空字符串

<h3>自动搜寻域</h3>
      <%=pageContext.findAttribute("name") %>
      $name

d.获取数组中的数据

<h3>获取数组中数据</h3>
      <%
          String[] names ="殷天正","谢逊","韦一笑","黛绮丝";
          pageContext.setAttribute("names", names);  //el只能读取域中的元素
       %>
       $names[0] //殷天正
       $names[1]  //谢逊
       $names   //数组地址值

e.获取链表中的数据

            <h3>获取链表中的数据</h3>
                   <%
                       List<String> list = new LinkedList<String>();
                       list.add("aaa");
                       list.add("bbb");
                       list.add("ccc");
                       pageContext.setAttribute("l", list);
                    %>
                    $l[0] //aaa
                    $l //["aaa","bbb","ccc"]

f.获取映射中的数据

<h3>获取映射中的数据</h3>
        <%
            Map<String,String> map = new HashMap<String,String>();
            map.put("name", "曹洋");
            map.put("age", "18");
            map.put("wife","丽丽");
            map.put("addr", "安徽");
            request.setAttribute("map", map);
            request.setAttribute("w", "wife");
         %>
         $map   //wife=丽丽, age=18, name=曹洋, addr=安徽 
         $map.name //曹洋
         $map["wife"]   //丽丽
        [wife]: $map[w] // [wife]: 丽丽

     g. 获取javabean中的数据

           在一个类中,如果存在私有化属性,这些属性包含get或set任意一个方法,则这些私有化的属性就可以称之为javabean属性,类中存在这些属性,这个类就是javabean的类。 javabean会自动实现序列化接口 Serializable ,实现序列化接口就可以向磁盘上写入东西了

  

                   <h3>获取javabean中的数据</h3>

                          <%
                                 Person p = new Person("曹洋",18,"");

                                 pageContext.setAttribute("p",p);
                           %>

                           <%=p.getName() %>
                           $p.name //此处的name式getName() 去掉get N小写 去掉方法括号

 

                     i. 在jsp脚本表达式中使用p.getXxx()方法获取的数据,在el表达式中都可以使用$p.xxx的方式来获取。

                     ii. 如果javabean中的getXxx()方法发生了修改,则el表达式也要随之修改。

                     例如:

                            getName()    $p.name

                            getNamex()   $p.namex

 

       6. 获取执行运算的结果

 

              a. 算术运算

 

                     <h4>算术运算</h4>

 

                  

                  $3+2  <!-- 5 -->
                                      $3-2  <!-- 1 -->
                                      $3/2  <!-- 1.5 -->
                                      $3*2  <!-- 6 -->
                                      $3%2  <!--1 -->
                                      $3+"2" <!-- 5 -->
                                      $3-"2"  <!-- 1 -->
                             <!--  $3+"a"  运算报错 -->

 

              能运算就运算,数值型不能和字母型的加减乘除

 

              b. 关系运算

 

                     <h4>关系运算</h4>

 

                          $3>2

 

                          $3<2

 

                          $3==2

 

                          $3!=2

 

                          $3>=2

 

                          $3<=2

 

              c. 逻辑运算

 

                     <h4>逻辑关系</h4>

 

                          $true && false

 

                          $true and false      

 

                          $true || false

 

                          $true or false

 

                          $!true

 

                          $not true

 

              d. empty运算

 

                     empty运算用于判断当前域中属性是否为空。

 

                     Empty运算规则:如果对象为null 字符串为空 集合、数组、映射没有任何元素 empty操作都会返回true,否则false

 

                           

 <h4>empty运算</h4>

                                 <%
                                        String str = null;
                                        pageContext.setAttribute("str", str);                       
                                        String s ="";
                                        pageContext.setAttribute("s", s);                                
                                        String[] names = ;
                                        pageContext.setAttribute("names", names);                                    
                                       List list = new LinkedList();
                                        pageContext.setAttribute("list", list);                                      
                                        Map<String,String> map = new HashMap();
                                        pageContext.setAttribute("mapx", map);
                                        List listx = new LinkedList();
                                        listx.add("abc");
                                        pageContext.setAttribute("listx", listx);
                                  %>
 
                                  $empty str  true
                                  $empty s    true
                                  $empty names true
                                  $empty list  true
                                  $empty mapx  true
                                  $empty listx  false

 

              e. 三元表达式运算

            <h4>三元表达式</h4>
                         <%
                                 Map<String,String> mapx = new HashMap();
                                 mapx.put("name", "");
                                 pageContext.setAttribute("mapx", mapx);
                           %>
                           $empty mapx.name?"曹洋":mapx.name  //曹洋

       5. EL获取常用开发对象 - 11个内置对象

              EL内置了11个内置对象,不需要提前存入域就可以直接在EL中使用。注意这和jsp的9打隐式对象没有任何关系。

              a. 代表作用域的EL内置对象

           

pageScope

代表PageContext域

requestScope

代表Request域

sessionScope

代表Session域

ApplicationScope

代表ServletContext域

 

              b. 代表请求参数的内置对象

                     

param

代表当前请求中全体请求参数组成的Map<String,String>

paramValues

代表当前请求中全体请求参数组成的Map<String,String[]>

 

request.getParameter("username")

$param.username

              c. 代表web应用的初始化参数的EL内置对象

          

initParam

代表当前web应用初始化参数的内置对象

 就是ServletContext对象的getInitParameter(String attr),在jsp中就是application.getInitParameter(String attr),如果用el表达式就是$initParam.attr 获取的是全局配置信息

initParam.url

              d. 代表请求头的EL内置对象

             

header

代表请求中所有请求头组成的Map<String,String>的内置对象

headerValues

代表请求中所有请求头组成的Map<String,String[]>的内置对象

 

request.getHeader("host")

$header.host

              e. 代表请求中所有cookie组成的Map的内置对象

cookie

代表请求中所有cookie组成的Map<String,Cookie>

 

cookie.JSESSIONID.name

cookie.JSESSIONID.value

              f. 代表当前页面的PageContext对象  

         

pageContext

代表当前页面的PageContext对象,通过它可以获取所有jsp9大隐式对象

 

<%=request.getContextPath()%> 这里获取到的request不是request域对象,requestScope才是,这里的只是request对象

$pageContext.request.contextPath

 

技术图片

 

以上是关于13.1 jsp标签技术 el表达式的主要内容,如果未能解决你的问题,请参考以下文章

JavaEE实战——jsp入门El表达式JSTL标签库

jsp-EL表达式

JSP系列:JSP进阶-EL表达式和JSP标签

EL表达式jsp标签JSTL标签

笔记 - EL表达式 和 JSP标签

EL表达式 JSTL的标签库 EL的函数 自定义EL函数 自定义标签 JSP的开发模式 注册登陆案例