zoukankan      html  css  js  c++  java
  • 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}

  • 相关阅读:
    根据IP地址查找MAC地址
    MongoDB导入导出以及数据库备份
    本地mongodb数据库导出到远程数据库中
    datatable自动增加序号
    IDEA出现无法加载主类
    远程连接本地mongodb 数据库
    js将后台传入得时间格式化
    Java蓝桥杯--基础练习 (6)回文数
    Java蓝桥杯--基础练习(5)杨辉三角形
    Java蓝桥杯--基础练习(4)查找整数
  • 原文地址:https://www.cnblogs.com/xuwangqi/p/11370189.html
Copyright © 2011-2022 走看看