精华内容
参与话题
问答
  • EL&JSTL

    千次阅读 2017-11-16 21:59:49
    1.1、EL EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL出现的目的是要替代jsp页面中脚本的编写。1.2、EL从域中取出数据jsp脚本:(name)%> EL表达式替代上面的脚本:${requestScope....

    1.1、EL

    EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL出现的目的是要替代jsp页面中脚本的编写。

    1.2、EL从域中取出数据

    jsp脚本:<%=request.getAttribute(name)%>
    EL表达式替代上面的脚本:${requestScope.name}

    EL最主要的作用是获得四大域中的数据,格式:${EL表达式}
    EL获得pageContext域中的值:${pageScope.key};
    EL获得request域中的值:${requestScope.key};
    EL获得session域中的值:${sessionScope.key};
    EL获得application域中的值:${applicationScope.key};
    EL从四个域中获得某个值:${key};
    —同样是依次从pageContext域,request域,session域,application域中获取属性,在某个域中获取后将不在向后寻找

    <%
        pageContext.setAttribute("company", "company");
        //存储字符串
        request.setAttribute("company", "company");
        //存储一个对象
        User user = new User();
        user.setId(1);
        user.setName("zhangsan");
        user.setPassword("123");
        session.setAttribute("user", user);
        //存储一个集合
        List<User> list = new ArrayList<User>();
        User user1 = new User();
        user1.setId(2);
        user1.setName("lisi");
        user1.setPassword("123");
        list.add(user1);
        User user2 = new User();
        user2.setId(3);
        user2.setName("wangwu");
        user2.setPassword("123");
        list.add(user2);
        application.setAttribute("list", list);
    %>
    <!-- 脚本法是取出域中的值 -->
    <%=request.getAttribute("company") %>
    <%
        User sessionUser = (User)session.getAttribute("user");
        out.write(sessionUser.getName());
    %>
    <hr/>
    <!-- 使用EL表达式获得域中的值 -->
    ${requestScope.company }
    ${sessionScope.user.name }
    ${applicationScope.list[1].name}
    
    <!-- 使用el表达式 全域查找 -->
    ${company }
    ${user.name }
    ${list[1].name}
    
    <!-- el可以执行表达式运算 -->
    ${1+1 }
    ${1==1?true:false }
    <!-- empty 判定某个对象是否是null  是null返回true -->
    ${empty list}

    1.3、EL的内置对象11个

    获取JSP中域中的数据:pageScope,requestScope,sessionScope,applicationScope

    param,paramValues - 接收参数,相当于request.getParameter() rrquest.getParameterValues()
    header,headerValues - 获取请求头信息,相当于request.getHeader(name)
    initParam - 获取全局初始化参数,相当于this.getServletContext().getInitParameter(name)
    cookie - WEB开发中cookie,相当于request.getCookies()—cookie.getName()—cookie.getValue()
    pageContext - WEB开发中的pageContext,pageContext获得其他八大对象

    ${pageContext.request.contextPath}获得WEB应用的名称相当于<%=pageContext.getRequest().getContextPath%>这句代码不能实现。

    <!-- 使用el获得参数 -->
    ${param.username }
    ${header["User-Agent"] }
    ${initParam.aaa }
    ${cookie.name.value }
    <!-- 通过el表达式获得request对象 -->
    ${pageContext.request }    

    1.4、EL执行表达式
    例如:

    ${1+1}
    ${empty user}
    ${user==null?true:false}

    2.1、JSTL技术

    JSTL(JSP Standard Tag Library),JSP标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能。jstl出现的目的同el一样也是要代替jsp页面中的脚本代码。JSTL标准标准标签库有5个子库,但随着发展,目前常使用的是他的核心库。

    标签库 标签库的URI 前缀
    Core    http://java.sun.com/jsp/jstl/core   c
    I18N    http://java.sun.com/jsp/jstl/fmt    fmt
    SQL http://java.sun.com/jsp/jstl/sql    sql
    XML http://java.sun.com/jsp/jstl/xml    x
    Functions   http://java.sun.com/jsp/jstl/functions  fn

    2.2、JSTL下载与导入

    JSTL下载
    从Apache的网站下载JSTL的JAR包。

    http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/

    jakarta-taglibs-standard-1.1.2.zip,然后将下载好的JSTL安装包进行解压,此时,在lib目录下可以看到两个JAR文件,分别为jstl.jar和standard.jar。 其中,jstl.jar文件包含JSTL规范中定义的接口和相关类,standard.jar文件包含用于 实现JSTL的.class文件以及JSTL中5个标签库描述符文件(TLD)。
    将两个jar包导入我们工程的lib中,使用jsp的taglib指令导入核心标签库:

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

    2.3、STL核心库的常用标签

    <c:if test=””>标签:
    其中test是返回boolean的条件

    <!-- test代表的返回boolean的表达式 -->
    <c:if test="${count==9 }">
        xxxx
    </c:if>

    <c:forEach>标签
    使用方式有两种组合形式:
    形式一:

    <!-- forEach模拟
        for(int i=0;i<=5;i++){
            syso(i)
        }
     -->
     <c:forEach begin="0" end="5" var="i">
        ${i }<br/>
     </c:forEach>

    形式二:

    <!-- 模拟增强for    productList---List<Product>
        for(Product product : productList){
            syso(product.getPname());
        }
     -->
     <!-- items:一个集合或数组   var:代表集合中的某一个元素-->
     <c:forEach items="${productList }" var="pro">
        ${pro.pname }
     </c:forEach>

    示例:
    遍历List<String>的值
    遍历List<User>的值
    遍历Map<String,String>的值
    遍历Map<String,User>的值
    遍历Map<User,Map<String,User>>的值

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <%
        //模拟List<String> strList
        List<String> strList = new ArrayList<String>();
        strList.add("dfd");
        strList.add("ret");
        strList.add("yty");
        strList.add("hk");
        request.setAttribute("strList", strList);
    
        //遍历List<User>的值
        List<User> userList = new ArrayList<User>();
        User user1 = new User();
        user1.setId(2);
        user1.setName("lisi");
        user1.setPassword("123");
        userList.add(user1);
        User user2 = new User();
        user2.setId(3);
        user2.setName("wangwu");
        user2.setPassword("123");
        userList.add(user2);
        application.setAttribute("userList", userList);
    
        //遍历Map<String,String>的值
        Map<String,String> strMap = new HashMap<String,String>();
        strMap.put("name", "lucy");
        strMap.put("age", "18");
        strMap.put("addr", "西三旗");
        strMap.put("email", "licy@itcast.cn");
        session.setAttribute("strMap", strMap);
    
        //遍历Map<String,User>的值
        Map<String,User> userMap = new HashMap<String,User>();
        userMap.put("user1", user1);
        userMap.put("user2", user2);
        request.setAttribute("userMap", userMap);   
    %>
    
    <h1>取出strList的数据</h1>
    <c:forEach items="${strList }" var="str">
        ${str }<br/>
    </c:forEach>
    
    <h1>取出userList的数据</h1>
    <c:forEach items="${userList}" var="user">
        user的name:${user.name }------user的password:${user.password }<br/>
    </c:forEach>
    
    <h1>取出strMap的数据</h1>
    <c:forEach items="${strMap }" var="entry">
        ${entry.key }====${entry.value }<br/>
    </c:forEach>
    
    <h1>取出userMap的数据</h1>
    <c:forEach items="${userMap }" var="entry">
        ${entry.key }:${entry.value.name }--${entry.value.password }<br/>
    </c:forEach>

    3、javaEE的开发模式
    model1模式:

    技术组成:jsp+javaBean
    model1的弊端:随着业务复杂性 导致jsp页面比较混乱

    model2模式

    技术组成:jsp+servlet+javaBean
    model2的优点:开发中 使用各个技术擅长的方面
    servlet:擅长处理java业务代码
    jsp:擅长页面的现实

    MVC:—- web开发的设计模式

    M:Model---模型 javaBean:封装数据
    V:View-----视图 jsp:单纯进行页面的显示
    C:Controller----控制器 Servelt:获取数据--对数据进行封装--传递数据--   指派显示的jsp页面

    javaEE的三层架构

    服务器开发时 分为三层
    web层:与客户端交互
    service层:复杂业务处理
    dao层:与数据库进行交互
    开发实践时,三层架构通过包结构体现
    展开全文
  • el表达式总结

    2011-11-07 20:59:48
    EL表达式用于获取数据,在JSP页面中可使用${标识符}的形式,通知JSP引擎调用pageContext.findAttribute()方法,以标识符为关键字从各个域对象中获取对象。如果域对象中不存在标识符所对应的对象,则返回结果为”...
     
    

    l     EL表达式用于获取数据,在JSP页面中可使用${标识符}的形式,通知JSP引擎调用pageContext.findAttribute()方法,以标识符为关键字从各个域对象中获取对象。如果域对象中不存在标识符所对应的对象,则返回结果为””(注意,不是null)。

    •       示例:使用EL表达式获取request、session、applection域中的数据。

    l     EL表达式中也可以使用${customerBean.address}的形式来访问JavaBean对象的属性。

    •       示例:使用EL表达式获取Bean属性。A

    l     结合JSTL标签,EL表达式也可轻松获取各种集合中的元素。

    •       示例:使用EL表达式获取List、Map集合中的元素。

    l     EL表达式也可使用类如${1==1}的形式进行简单的逻辑判断。

    l       JSTL标签库

    •         JSTL是sun公司开发的一套标签库,使用JSTL可以在页面中实现一些简单的逻辑,从而替换页面中的脚本代码。

    •         在页面中使用JSTL标签需完成以下2个步骤:

    1、导入jstl.jar和standerd.jar这两个JSTL的jar文件。

    2、在JSP页面中使用<%@ tablib url=“”  prifix=“” %>元素导入标签库。

    •         JSTL标签库中常用标签:

    <c:foreach var=“” items=“”>

    <c:if test=“”>

     

    展开全文
  • EL表达式详解

    万次阅读 多人点赞 2018-04-08 12:27:28
    该篇博客主要关于EL表达式,废话不多说=-=进入正题 博客目录 1、EL表达式介绍 2、EL获取数据 3、EL中的内置对象 4、EL访问Bean的属性 5、EL访问数组中的数据 6、EL获取list中数据 7、EL访问...

    该篇博客主要关于EL表达式,废话不多说=-=进入正题

    博客目录

    1、EL表达式介绍
    2、EL获取数据
    3、EL中的内置对象
    4、EL访问Bean的属性
    5、EL访问数组中的数据
    6、EL获取list中数据
    7、EL访问Map
    8、EL中的运算符(empty)
    9、自定义EL函数
    10、总结

    一、EL表达式介绍

    • Expression Language表达式语言
    • 是一种在JSP页面获取数据的简单方式(只能获取数据,不能设置数据)
    • 在JSP2.0开始引入概念

    语法格式

    在JSP页面的任何静态部分均可通过:${expression}来获取到指定表达式的值


    二、EL获取数据(从四大域中获取属性)

    • EL只能从四大域中获取属性

    1、如果没有使用EL的内置对象,则查找数据顺序是依次按照由小到大范围从四大域中查找指定名称的属性值

    - pageContext<request<session<application
    
            <%@ page language="java" contentType="text/html; charset=UTF-8"
                pageEncoding="UTF-8"%>
            <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
            <html>
            <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Insert title here</title>
            </head>
            <body>
                <%
                    pageContext.setAttribute("name", "linjie");
                    request.setAttribute("name", "lucy");
                    session.setAttribute("name", "king");
                    application.setAttribute("name", "bilibili");
                %>
                name=${name }
            </body>
            </html>
    

    这里写图片描述

    可以看出没有使用EL内置对象时查找顺序是由小到大,所以最先显示的是pageContext域中的

    2、使用EL内置对象,从指定域中获取数据,提高了查找效率

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <%
            pageContext.setAttribute("name", "linjie");
            request.setAttribute("name", "lucy");
            session.setAttribute("name", "king");
            application.setAttribute("name", "bilibili");
        %>
        name=${applicationScope.name }
    </body>
    </html>
    

    这里写图片描述

    可以看出,使用applicationScope即可指定application域中的name输出,当然其他域也是类似,下文会说这四大域属性相关的内置对象


    三、EL中的内置对象

    EL有11个内置对象,这里主要讲域属性相关的4个和其他4个
    EL的11个内置对象,除了pageContext以外,其他10个内置对象的类型都是java.util.Map类型

    1、域属性相关(4个)

    1. pageScope:从page范围域属性空间中查找指定的key
    2. requestScope:从request范围域属性空间中查找指定的key
    3. sessionScope:从session范围域属性空间中查找指定的key
    4. applicationScope:从application范围域属性空间中查找指定的key

      <%@ page language="java" contentType="text/html; charset=UTF-8"
          pageEncoding="UTF-8"%>
      <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
      <html>
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>Insert title here</title>
      </head>
      <body>
          <%
              pageContext.setAttribute("name", "linjie");
              request.setAttribute("name", "lucy");
              session.setAttribute("name", "king");
              application.setAttribute("name", "bilibili");
          %>
      
          name=${applicationScope.name }<br>
          name=${pageScope.name }<br>
          name=${sessionScope.name }<br>
          name=${requestScope.name }<br>
      </body>
      </html>
      

    这里写图片描述


    2、其他重要内置对象(4个)

    1、pageContext

    该pageContext与JSP内置对象pageContext是同一个对象。通过该对象,可以获取到request、response、session、servletContext、servletConfig等对象注意:这些对象在EL里不是内置对象,这些对象只能通过pageContext获取

    • 在EL中直接${pageContext.request}即可获取request对象,其底层调用的是pageContext.getRequest()方法。同理,也可以通过类似方法获取其他对象

    重点:其中最常用的:${pageContext.request.contextPath },代表web应用下的根,可以看出下面action中的路径可读性更强了

    Regster.java

    package linjie.com;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class Regster extends HttpServlet {
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.getWriter().append("Served at: ").append(request.getContextPath());
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
    }
    

    index.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <%-- ${pageContext.request.contextPath }代表web应用的根 --%>
        <form action="${pageContext.request.contextPath }/regster" method="POST">
            xxx<input type="text" name="name"/><br>
            yyy<input type="text" name="age"/><br>
            <input type="submit" value="点击">
        </form>
    </body>
    </html>
    

    这里写图片描述

    2、param(获取请求中的指定参数)
    • 其底层实际调用request.getParameter()

    index.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <%-- ${pageContext.request.contextPath }代表web应用的根 --%>
        <form action="${pageContext.request.contextPath }/show.jsp" method="POST">
            xxx<input type="text" name="name"/><br>
            yyy<input type="text" name="age"/><br>
            <input type="submit" value="点击">
        </form>
    </body>
    </html>
    

    show.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        name=${param.name }<br>
        age=${param.age }<br>
    </body>
    </html>
    

    客户浏览器访问结果

    这里写图片描述

    这里写图片描述

    3、paramValues

    获取请求中的指定参数的所以值,其底层实际调用request.getParameterValues()


    index.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    <%-- ${pageContext.request.contextPath }代表web应用的根 --%>
        <form action="${pageContext.request.contextPath }/show.jsp" method="POST">
            xxx<input type="text" name="name"/><br>
            yyy<input type="text" name="age"/><br>
    
            爱好:
            <input type="checkbox" name="hobby" value="sleep">睡觉
            <input type="checkbox" name="hobby" value="play">玩
            <input type="checkbox" name="hobby" value="eat">吃
            <input type="submit" value="点击">
        </form>
    </body>
    </html>
    

    show.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        name=${param.name }<br>
        age=${param.age }<br>
    
    
        hobby[0]=${paramValues.hobby[0] }<br>
        hobby[1]=${paramValues.hobby[1] }<br>
    </body>
    </html>
    

    客户浏览器显示结果

    这里写图片描述

    这里写图片描述

    4、initParam

    获取初始化参数,其底层调用的是ServletContext.getInitParameter()


    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>07eltttt</display-name>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    
    <!--初始化参数 -->
      <context-param>
        <param-name>name</param-name>
        <param-value>林杰</param-value>
      </context-param>
    
    
      <servlet>
        <display-name>Regster</display-name>
        <servlet-name>Regster</servlet-name>
        <servlet-class>linjie.com.Regster</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>Regster</servlet-name>
        <url-pattern>/regster</url-pattern>
      </servlet-mapping>
    </web-app>
    

    index.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        name=${initParam.name }
    </body>
    </html>
    

    客户浏览器显示结果

    这里写图片描述


    四、EL访问Bean的属性

    1、什么是java Bean

    JavaBean是公共Java类,但是为了编辑工具识别

    需要满足至少三个条件

    • 有一个public默认构造器(例如无参构造器)
    • 属性使用public 的get,set方法访问,也就是说设置成private同时get,set方法与属性名的大小也需要对应。例如属性name,get方法就要写成,public String getName(){},N大写。
    • 需要序列化。这个是框架,工具跨平台反映状态必须的

    2、EL访问Bean属性

    EL可以通过${key.属性}的方式获取到指定值,其底层实际调用的是该对象的相应属性的get方法


    Demo.java

    package linjie.com;
    /*
     *Bean 
     */
    public class Demo {
        private String name;
        private int age;
        public Demo(String name,int age){
            this.name=name;
            this.age=age;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        @Override
        public String toString() {
            return super.toString();
        }
    
    }
    

    index.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        import="linjie.com.Demo"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <%
            Demo test=new Demo("linjie",12);
            request.setAttribute("ELttt", test);
        %>
        name=${requestScope.ELttt.name }<br>
        age=${requestScope.ELttt.age }<br>
    
        <!-- 若访问为null的对象的属性,EL是不会抛出空指针异常的,只是不显示而已 -->
        names=${requestScope.ELtttxx.name }<br>
    
    </body>
    </html>
    

    客户浏览器显示结果

    这里写图片描述


    五、EL访问数组中的数据

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>     
    <body>
        <%
            String[] names={"xlj","lucy","king"};
            pageContext.setAttribute("names", names);
        %>
        name[1]=${names[1] }<br>
    
        <!-- 若访问的数组元素下标超出了数组下标上限,EL不会抛出越界异常,只是不显示 -->
        names[5]=${names[5] }<br>
    </body>
    </html>
    

    下面是访问类的数组

    Stu.java

    package linjie.com;
    /*
     *Bean 
     */
    public class Stu {
        private String sname;
        private String address;
        public Stu() {
            super();
        }
    
        public Stu(String sname, String address) {
            super();
            this.sname = sname;
            this.address = address;
        }
    
        public String getSname() {
            return sname;
        }
    
        public void setSname(String sname) {
            this.sname = sname;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        @Override
        public String toString() {
            return super.toString();
        }
    
    
    }
    

    index.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        import="linjie.com.*"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
        <%
            Stu[] stus=new Stu[3];
            stus[0]=new Stu("xlj","A");
            stus[1]=new Stu("lucy","B");
            stus[2]=new Stu("kingA","C");
            pageContext.setAttribute("stus",stus);
        %>
        stus[1].Sname=${stus[1].sname }
    </body>
    </html>
    

    客户浏览器显示结果

    这里写图片描述


    六、EL获取list中数据

    <%@page import="java.util.*"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <%
            List<String> names=new ArrayList<String>();
            names.add("xlj");
            names.add("lucy");
            pageContext.setAttribute("names", names);
        %>
    
        <!-- 因为List底层是数组,所以可以这样写 -->
        names[1]=${names[1] }<br>
    </body>
    </html>
    

    客户浏览器显示结果

    这里写图片描述

    注意:

    EL可以通过索引访问List,但无法访问Set。因为Set中没有索引概念


    七、EL访问Map

    <%@page import="java.util.*"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <%
            Map<String,Object> map=new HashMap<String,Object>();
            map.put("age", 20);
            map.put("name", "xlj");
            pageContext.setAttribute("map", map);
        %>
        name=${map.name }<br>
        age=${map.age }<br>
    </body>
    </html>
    

    客户浏览器显示结果

    这里写图片描述


    八、EL中的运算符(empty)

    1、先说说几个常用运算符

    • 算术运算符:+、-、*、/、%(不支持++、–)
    • 关系运算符:==、!=、>、>=、<、<=
    • 逻辑运算符:!、&&、||、not、and、or
    • 条件运算符:?:
    • 取值运算符:[]、点号

    2、empty运算符

    用法为${empty 变量},结果为布尔值

    <%@page import="java.util.*"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <%
            String name1=null;
            String name2="";
            List<String> name3=new ArrayList<String>();
    
            pageContext.setAttribute("name1", name1);
            pageContext.setAttribute("name2", name2);
            pageContext.setAttribute("name3", name3);
        %>
        empty对于没有定义的变量,运算结果为true:
        empty namex=${empty namex }<br>
    
        empty对于null的引用,运算结果为true:
        empty name1=${empty name1 }<br>
    
        empty对于为空串的String引用,运算结果为true:
        empty name2=${empty name2 }<br>
    
        empty对于没有元素的数组或集合,运算结果为true:
        empty name3=${empty name3 }<br>
    </body>
    </html>
    

    客户浏览器显示结果

    这里写图片描述


    九、自定义EL函数

    因为EL本身不具有处理字符串能力,所以可以自定义EL函数
    - 定义函数(新建MyEL.java类)
    - 注册:先找到jsp2-example-taglib.tld,将头部以及注册函数复制到自己创建的.tld文件中(.tld放在WEB-INF下)
    - 在index.jsp中使用,使用时需要<%@ taglib uri=”http://tomcat.apache.org/jsp2-example-taglib” prefix=”MyEL” %>

    1、定义函数MyEL.java

    package linjie.com;
    
    
    //自定义函数
    //该类及其函数,需要在扩展名为.tld的xml文件中注册
    //tld:tag library definition(标签库定义)
    //xml文件是需要约束的,即需要配置文件头部。这个头部约束可以从一下文件中进行复制
    //在Tomcat安装目录下:webapps\examples\WEB-INF\jsp2
    //文件为:jsp2-example-taglib.tld
    
    //这个.tld的xml文件,需要定义在当前web项目的WEB-INF目录下,在此目录下创建以.tld结尾的xml文件
    //将jsp2-example-taglib.tld中头部复制到创建的xml文件中
    
    //再将函数注册,还是在jsp2-example-taglib.tld底部中复制
    public class MyEL {
        private static MyEL instance;
        public static MyEL getInstance() {
            if(instance==null)
            {
                instance=new MyEL();
            }
            return instance;
        }
    
        //字符串小写变大写
        public static String LowerToUpper(String str) {
            return str.toUpperCase();
        }
    }
    

    2、将jsp2-example-taglib.tld中头部部分以及底部的注册函数部分复制到自己创建的tld(在WEB-INF下)文件中

    这里写图片描述

    这里写图片描述

    这里写图片描述

    这里写图片描述

    MyEL.tld

    <?xml version="1.0" encoding="UTF-8"?>
    <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
        version="2.0">
    
        <!-- 定义标签库信息 -->
        <description>A tag library exercising SimpleTag handlers.</description>
        <tlib-version>1.0</tlib-version>
        <short-name>MyEL</short-name><!-- 标签库名称,一般定义成和文件名一样 -->
        <uri>http://tomcat.apache.org/jsp2-example-taglib</uri>
    
       <!--  注册函数 -->
         <function>
            <name>MyLowerToUpper</name>
            <function-class>linjie.com.MyEL</function-class><!-- 方法得类 -->
            <function-signature>java.lang.String LowerToUpper( java.lang.String )</function-signature><!-- 方法签名 :需要返回值以及方法名、参数-->
        </function>
    </taglib>
    

    3、在index.jsp中使用,使用时需要<%@ taglib uri=”http://tomcat.apache.org/jsp2-example-taglib” prefix=”MyEL” %>

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib uri="http://tomcat.apache.org/jsp2-example-taglib" prefix="MyEL" %><!-- tld中的uri和short-name -->
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <!-- 这个方法名是在tld注册时的name -->
        ${MyEL:MyLowerToUpper("sasas") }<br>
    
    
        <!-- EL函数只能处理四大域中的属性值及String常量 -->
        <%
            String name="xlj";
            pageContext.setAttribute("name", name);
        %>
        ${MyEL:MyLowerToUpper(name) }<br>
    
    </body>
    </html>
    

    客户浏览器显示结果

    这里写图片描述


    十、EL总结

    • EL表达式不能出现在Java代码块、表达式块等JSP动态代码部分
    • EL只能从四大域属性空间中获取数据(pageContext、request、session、application)
    • EL不会抛出空指针异常,只会不显示
    • EL不会抛出数组越界异常,只会不显示
    • EL不具有对字符串进行处理的能力(可以使用JSTL的EL或者自定义EL函数)
    展开全文
  • EL表达式语言_小白教程

    千次阅读 2018-05-06 15:03:41
    EL(Expression Language) 一、EL操作符 语法:${EL表达式} “.”操作符 用来访问对象的某个属性,如${user.name}。 “[ ]”操作符 也可用来访问对象的某个属性,如${user[‘name’]}。 “[ ]”操作符...

    EL(Expression Language)


    一、EL操作符

    语法:${EL表达式}
    
    1. .”操作符
      用来访问对象的某个属性,如${user.name}。

    2. “[ ]”操作符
      也可用来访问对象的某个属性,如${user[‘name’]}。

      “[ ]”操作符其他功能:

      (1)当属性名中包含特殊字符如“.”或“-”等的情况下,就不能使用“.”操作符来访问,这时只能使用“[ ]”操作符。

      (2)根据索引值访问数组中的元素使用“[ ]”操作符,如${arr[1]}。

      (3)使用变量实现动态访问,如${user[x]},x是一个变量,改变x即可。


    1.1、算术操作符

    这里只测试了“+”操作符,“-”、“*”、“/”或div、“%”或mod请自行测试。

    <!-- “+”操作符 -->
    ${a1+a2+a3 }<br><!-- 输出:60 -->
    ${1+1 }<br><!-- 输出:2 -->
    ${'1'+1.1 }<br><!-- 输出:2.1 -->
    ${"1"+1 }<br><!-- 输出:2 -->
    ${bbbbbsdcksnvjnds+1 }<br><!-- 输出:1 -->
    \${"bbbbbsdcksnvjnds"+1 }<!-- 报异常 -->
    

    1.2、关系操作符

    这里写图片描述

    1.3、逻辑操作符

    这里写图片描述

    1.4、empty操作符

    <!-- empty操作符 -->
    ${empty s }<br><!-- 输出:true -->
    ${!empty s }<br><!-- 输出:false -->
    ${not empty s }<br><!-- 输出:false -->
    ${!not empty s }<br><!-- 输出:true -->

    总结:若变量 s为null,或长度为零的String,或size为零的集合,则
    ${ empty s }返回的结果为true,
    ${ not empty s }或${ ! empty s }返回的结果为false。


    二、EL内置隐式对象


    2.1、EL内置对象之域对象

    <%
        pageContext.setAttribute("a", "1");
        request.setAttribute("a", "2");
        session.setAttribute("a", "3");
        application.setAttribute("a", "4");
    %>
    
    ${pageScope.a }<!-- 输出:1 -->
    ${requestScope.a }<!-- 输出:2 -->
    ${sessionScope.a }<!-- 输出:3 -->
    ${applicationScope.a }<br><!-- 输出:4 -->
    
    
    ${a }<!-- 输出:1 -->

    【总结】:${a }底层使用pageContext.findAttribute(“a”),依次从page、request、session、application的域范围中寻找”a”属性,如果都没有则返回null 。


    2.2、EL内置对象之param、paramValues(请求参数对象)

    <!-- 这里使用get的提交方式测试,直接在URL中拼接参数。
        (请求路径:http://localhost:8080/web上下文路径/index.jsp?name=zhang&hobby=篮球&hobby=足球)
     -->
    
    ${param.name }<br><!-- 输出:zhang -->
    ${param.hobby }<br><!-- 输出:篮球 -->
    ${paramValues.name }<br><!-- 输出:[Ljava.lang.String;@7c244cff -->
    ${paramValues.name[0] }<br><!-- 输出:zhang -->
    ${paramValues.hobby }<br><!-- 输出:[Ljava.lang.String;@5ae7ad90 -->
    ${paramValues.hobby[1] }<br><!-- 输出:足球 -->

    【总结】:
    ${param.xxx } 相当于reuqest.getParameter(“xxx”);
    ${paramValues.xxx } 相当于reuqest.getParameterValues(“xxx”);
    如果是数组可以使用下标。


    2.3、EL内置对象之header、headerValues(请求头对象)

    ${header.accept }<br>
    <!-- 输出:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,
    image/apng,*/*;q=0.8 -->
    
    \${header.accept-Encoding }<br>
    <!-- 输出:\${header.accept-Encoding },需要注意(输出中不会输出"\",因为我不这样写,会直接报
    异常),"-"被解析成减号,导致抛出异常,在语句最前面写上"\",转义$符号,就可以将语句原样输出 -->
    
    ${header['accept-Encoding'] }<br><!-- 输出:gzip, deflate, br -->
    ${headerValues['accept-Encoding'] }<br><!-- 输出:[Ljava.lang.String;@2f08b521 -->
    ${headerValues['accept-Encoding'][0] }<br><!-- 输出:gzip, deflate, br -->

    2.4、EL内置对象之pageContext对象

    ${pageContext.request.contextPath }<br><!-- 输出:/el (这是我的web上下文路径)-->

    【总结】:pageContext对象:封装了其他8个JSP内置对象,可以任意获取使用。


    2.5、EL内置对象之cookie对象

    <!--===================================-->
    ${cookie }
    <!-- 输出:{JSESSIONID=javax.servlet.http.Cookie@5197416d,
     Webstorm-77d15532=javax.servlet.http.Cookie@3f5b951a, 
     Webstorm-6c1ac651=javax.servlet.http.Cookie@536cda57} -->

    2.6、EL内置对象之initParam(全局初始化参数对象)

    <!-- 在web.xml中配置 :
      <context-param>
        <param-name>Encoding</param-name>
        <param-value>UTF-8</param-value>
      </context-param>
      <context-param>
        <param-name>pageSize</param-name>
        <param-value>10</param-value>
      </context-param>
    -->
    ${initParam.Encoding }<br><!-- 输出:UTF-8 -->
    ${initParam }<br><!-- 输出:{pageSize=10, Encoding=UTF-8} -->

    三、EL获取数据实例

    3.1、EL获取域中属性

    <%
        String str = "hello";
        pageContext.setAttribute("str", str); 
    %>
    ${pageScope.str }<br><!-- 输出:hello -->
    ${str }<br><!-- 输出:hello -->

    3.2、EL获取数组元素

    <%
    String[] s = {"zhang","xiao","hu"}; 
    pageContext.setAttribute("s", s); 
    %>
    ${pageScope.s }<br><!-- 输出:[Ljava.lang.String;@1d78464e -->
    ${pageScope.s[2] }<br><!-- 输出:hu -->

    3.3、EL获取 List<String> 中的数据

    <%
    List<String> list = new ArrayList<String>();
    list.add("zhang");
    list.add("xiao");
    list.add("hu");
    pageContext.setAttribute("list", list); 
    %>
    ${list }<br><!-- 输出:[zhang, xiao, hu] -->
    ${list[1] }<br><!-- 输出:xiao -->

    3.4、EL获取 Map<String, Integer> 中的数据

    <%
    Map<String, Integer> map = new HashMap<String, Integer>();
    map.put("zhang",1);
    map.put("xiao",2);
    map.put("hu",3);
    pageContext.setAttribute("map", map); 
    %>
    ${map }<br><!-- 输出:{xiao=2, zhang=1, hu=3} -->
    ${map.zhang }<br><!-- 输出:1 -->

    3.5、EL获取 Map<String, JavaBean> 中的数据

    <%
    Map<String, User> umap = new HashMap<String, User>();
    umap.put("user1", new User("zhang",18));
    umap.put("user2", new User("xiao",36));
    pageContext.setAttribute("umap", umap); 
    %>
    ${umap }<br><!-- 输出:{user1=User [name=zhang, age=18], user2=User [name=xiao, age=36]} -->
    ${umap.user2 }<br><!-- 输出: User [name=xiao, age=36] -->
    ${umap.user1.age }<br><!-- 输出:18 -->
    ${umap['user2'].name }<br><!-- 输出:xiao 需注意,这种方式要求map的key必须是String类型-->
    ${umap['user2']['name'] }<br><!-- 输出:xiao -->
    ${umap['user2']['age'] }<br><!-- 输出:36 -->
    ${umap['user2'][age] }<br><!-- 不会报错,但什么也获取不到 -->
    展开全文
  • EL表达式 (详解)

    万次阅读 多人点赞 2009-05-15 18:07:00
    EL表达式 1、EL简介1)语法结构 ${expression}2)[]与.运算符 EL 提供.和[]两种运算符来存取数据。 当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 []。例如: ${user.My-...
  • EL表达式&JSTL标签库

    2020-03-31 12:35:23
    EL表达式 EL表达式全程Expression Laguage,是表达式语言。 什么是EL表达式 EL表达式主要是代替jsp页面中的表达式脚本在jsp页面中进行数据的输出 格式 ${ 表达式 } EL表达式在输出null的时候,输出的是空串,...
  • java学习之JSP&EL&JSTL

    2020-05-01 20:18:31
    JSP 指令 作用:用于配置JSP页面,导入资源文件 格式:<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 …><...charset=UTF-8" language="java" %>...contentType:相当于response.setConte...
  • WEB-JSP&EL&JSTL

    2019-07-13 19:41:13
    EL&JSTL 学习目标 -[ ] 了解JSP的作用 -[ ] jsp常用内置对象 -[ ] EL表达式学习 -[ ] JSTL标签库学习 第一章 JSP 1、概述 1.1 JSP引入 ​ 在前几天的登录案例中,登录失败后为了能够响应登录的错误信息。我们...
  • EL&JSTL表达式

    2020-05-06 15:50:44
    EL&JSTL表达式 EL表达式 是为了简化咱们的jsp代码,具体一点就是为了简化在jsp里面写的那些java代码。 语法结构 ${expression } 从指定的作用域取参数 ${requestScope.表达式} 如果从作用域中取值,会...
  • 逻辑: 1. 在list.jsp对应的form表单位置添加action的属性值 ${pageContext.request.contextPath}/findUserByPageServlet 2. UserService接口创建findUserByPage方法 3. 实现UserService方法findUserByPage ...
  • EL(表达式语言)

    千次阅读 2019-03-17 17:58:14
    EL(Expression Language,表达式语言)是JSP2.0中引入的一个新内容。通过EL可以简化在JSP开发中对对象的引用,从而规范页面代码,增加程序的可读性及维护性。EL为不熟悉Java语言页面开发的人员提供了一个开发Java ...
  • vue中el解析

    万次阅读 2018-10-09 10:01:58
    vue官方API文档中,对el有如下描述: https://cn.vuejs.org/v2/api/#el el 的作用大家都知道,用于指明 Vue 实例的挂载目标。我们重点关注上面两个红色叹号部分,总结一下就是:如果存在 render 函数或 ...
  • docker安装ElasticSearch:7.8.0集群

    万次阅读 2020-07-05 01:20:51
    ElasticSearch集群支持动态请求的方式搭建集群和静态配置文件搭建集群 关于集群的动态连接方式官方的文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-update-settings.html 前置...
  • 创建ES专栏很久了,但是写的文章非常的少,实在是项目比较忙,2018年最后一天了也该总结一下对es的封装的东西了,这篇博客我们通过java对es批量插入为主流程,来介绍一下java对接es 的全部过程; 需求处理流程: ...
  • 注意权限,不建议使用root,同es集群的启动用户相同即可 1. 下载 & 解压 # 下载 wget https://github.com/lmenezes/cerebro/releases/download/v0.8.3/cerebro-0.8.3.zip # 解压 unzip cerebro-0.8.3.zip # ...
  • Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可能是目前存在的,不论开源还是私有的,拥有最先进,高性能和全功能搜索引擎功能的库。但是 Lucene 仅仅只是一...
  • Elasticsearch学习,请先看这一篇!

    万次阅读 多人点赞 2019-02-21 17:28:43
    Elasticsearch研究有一段时间了,现特将Elasticsearch相关核心知识、原理从初学者认知、学习的角度,从以下9个方面进行详细梳理。欢迎讨论…… 0. 带着问题上路——ES是如何产生的? (1)思考:大规模数据如何...
  • ES(elasticsearch)搜索引擎安装和使用

    万次阅读 2018-07-17 18:00:25
    ElasticSearch安装 由于本人的操作系统是deepin的liunx系统, 所以本博主发一下Linux安装步骤。 1.简介 Elasticsearch简介* Elasticsearch是一个实时的分布式搜索和分析引擎。它可以帮助你用前所未有的速度去...
  • elasticsearch.yml 中加上: xpack.security.enabled: true 注::后空一个空格,如果是es集群请务必全部添加此配置 确保集群健康访问_xpack/license/start_trial?acknowledge=true 开启xpack功能,这时候集群会...
  • 最近公司项目用到Elasticsearch,自己摸索了好几天才把这个弄明白,和大家分享一下: 一、建立Elasticsearch连接 package com.wlsj.yshj.config; import org.apache.http.HttpHost; import org.apache....
  • ElasticSearch es 插件开发

    千次阅读 2018-09-16 14:30:28
    ElasticSearch es 插件开发 1. 插件分类 API Extension Plugins API扩展插件 通过添加新的API或功能向Elasticsearch添加新功能,通常与搜索或映射有关。 优秀插件代表: SQL language Plugin: 让 Elastic...
  • 1 Elasticsearch整合Hive 1.1 软件环境 Hadoop软件环境 Hive软件环境 ES软件环境 1.2 ES-Hadoop介绍 1.2.1 官网 https://www.elastic.co/cn/products/hadoop 1.2.2 对 Hadoop 数据进行交互分析 Hadoop 是出色的...
  • 简述ESElasticSearch入门简介)

    万次阅读 2018-08-03 11:22:08
    根据ES的官方文档,可以简单定义以下3点: 1 .一个分布式的实施文档存储,...Elasticsearch请求和HTTP请求类似,由以下几个相同的部件构成 curl -X&lt;VERB&gt;'&lt;PROTOCOL&gt;://&lt;HOST...
  • 目录:https://github.com/dolyw/Elasticsearch ...Github:[https://github.com/dolyw/Elasticsearch/tree/master/01-SpringBoot-ES-Local ](https://github.com/dolyw/Elasticsearch/tree/master/01-SpringBoot-E...
  • 然而对于我们自己的业务数据来说,肯定就没必要用这么复杂的技术了,如果我们想实现自己的搜索引擎,方便存储和检索,Elasticsearch 就是不二选择,它是一个全文搜索引擎,可以快速地储存、搜索和分析海量数据。...
  • 参考: ... ... es简介: ...es是一个高度可扩展的开源全文搜索和分析引擎,可以快速的、近实时地对大数据进行存储、搜索和分析,用来支撑复杂的数据搜索需求和企业级应用。简单来说,它是一个搜索引擎,...
  • Elasticsearch 是一个开源的搜索引擎,建立在全文搜索引擎库 Apache Lucene 基础之上用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的...
  • spark将数据写入ESElasticSearch)终极总结

    万次阅读 热门讨论 2019-01-09 13:11:47
    简介 spark接入ES可以使用多种方式,常见类型如下。...本文主要介绍将case class 类对象写入ElasticSearch:也就是获取数据然后使用case class封装数据,然后在case class中选取一个字段当做 id,...
  • hadoop集群安装ES(ElasticSearch 5.0.2)

    千次阅读 2017-01-05 14:54:47
    配置/etc/hosts,ntp服务,免密码登录,... 安装java环境 [root@manager ~]# mkdir /usr/java ...[root@manager ~]# cd /opt/ ...[root@manager hadoop]# tar xvf jdk-8u91-linux-x64.tar.gz -C /usr/java ...编辑"/etc/pro
  • Elasticsearch不只是全文检索引擎的领头羊,现在也是各个大厂标配的大数据平台之一,被广泛用于搜索加速,用户标签、画像系统、向量搜索等领域,它不是传统的关系型数据库,但这个信息爆炸,数据堆积的时代,我们...

空空如也

1 2 3 4 5 ... 20
收藏数 989,376
精华内容 395,750
关键字:

el