EL与JSTL学习

2 篇文章 0 订阅
2 篇文章 0 订阅

EL表达式

EL语法

  • 1、EL语法由 $ 开始,跟上花括号{},在花括号中填写表达式

  • 2、EL中使用 . 和 [] 运算符来存取数据

  • 3、如果域对象的属性名中有特殊字符(如 . 等),则使用 [] 运算符会很方便

  • 4、EL存取变量的方法很简单,例如${username},他的意思是出某一范围中名称为username的变量,因为我们并没有指定哪一个范围中的username,所以它的默认值会从page范围找,如果找不到,再依次到request、session、application中找,如果在中途找到username,就直接回传,不再继续找下去,但是如果全部范围内都为找到,那么就会回传null。

  • 5、自动搜索顺序:
    属性范围 | 在EL中的名称
    — | —
    Page | PageScope
    Request | RequestScope
    Session | SessionScope
    Application | ApplicationScope

  • 5、指定取出哪一个范围内的变量

范例说明
${PageScope.username}取出Page范围内的username变量
${RequestScope.username}取出Request范围内的username变量
${SessionScope.username}取出session范围内的username变量
${ApplicationScope.username}取出application范围内的username变量
  • 6、与范围有关的隐含变量
    其中pageScope、requestScope、sessionScope、applicationScope 都是EL的隐含对象,可以很容易猜出他们的意思
  • 7、与输入有关的隐含变量
    • param:用于获取某一个请求参数
    • paramValue:用于获取多个请求参数
  • 8、其它隐含对象
    • cookie
    • header和headerValues:获取请求头
    • initParam:可以获取当前web应用的初始化参数
    • pageContext:pageContext即为PageContext对象,只要是只读取属性,就能一直读下去
      • 获取contextPath
      ${pageContext.request.contextPath} 或
      ${pageContext.session.id} 或
      
      
  • 9、EL的关系运算符:关系运算符只能放在EL表达式中,如:
//这样写是错误的
${param.password} == ${param.password1}

//正确写法
${${param.password} == ${param.password1}}
  • 10、empty 运算符:empty可以作用于一个运算符,若该集合不存在或该集合为空,其结果都返回true

简单标签(自定义标签)

  • 自定义标签可以降低jsp开发的复杂度和维护量,利用自定义标签可以软件开发人员和页面设计人员合理分工 ,将具有共用特性的tag库用于不同的项目,体现了软件复用的思想
  • 什么是自定义标签?

使用户自定义的一种jsp标记,当一个含有自定义标签的jsp页面被jsp引擎编译为servlet时,tag标签转化成了对一个称为标签处理类的对象的操作。于是当jsp页面被jsp引擎转化为servlet后,实际上tag标签被转化成了对tag类的处理的操作。

  • 自定义标签定义:请参考idea项目JavaWeb_day01中的tag
  • 通常情况下开发简单标签,只需要继承SimpleTagSupport类就行了
  • 若标签存在标签体jsp引擎将把标签体封装成一个JspFragment对象,调用setJspBody()方法将JspFragment对象传递给标签处理器对象,若标签体为空,JSP引擎将不会调用setJspBody()。调用getJspBody()方法得到jsp页面的标签体对象jspFragment,调用jspFragment的invoke(Writer)方法,Writer为标签体内容的字符输出流,指定标签体的输出位置,如果invoke参数为null,将会将标签体的内容输出到页面。
  • 来指定标签体的类型,可以有如下三种类型:
    • empty:表示没有标签体
    • scriptless:标签体可以包含 el表达式和jsp动作元素,但不能包含jsp脚本元素(如:<%=reques.getParamter(“name”)%>)
    • tagdependent:标签体将不会被解析,即直接将标签体中的代码原封不动的传给标签解析类。
  • 带有父标签的自定义标签:所有子标签相当于父标签的标签体

EL的自定义函数

  • 在EL表达式中调用某个Java类的静态方法,但是这个静态方法需要在web项目中配置才能被EL表达式使用。这个Java类必须被public修饰,而且要配置的方法必须是 public 修饰的 static 方法
  • EL自定义函数是为了简化jsp页面操作字符串。

JSTL:JSP标准标签库

  • 五大类:1、核心标签库,2、I18N格式标签库,3、SQL标签库,
    4、XML标签库,5、函数标签库
  • 核心标签库
    • 1、表达式操作

      • 1.1、<c:out> :主要用来显示数据的内容,如<%=request.getParamter(“name”)%>
      • <c:out> 的四个属性:

      属性名 | 属性值代表的意思 | 值类型
      —|---|—
      value | 表示要显示出来的值 |Object
      default | 如果value的值为空,则显示dafault的值|Object
      escapeXml | 是否转换特殊字符,如 < 转换为 &lt;|boolean

      • 1.2、<c:set> :主要用来将变量存储至JSP范围中或是JavaBean的属性中
    • 2、流程控制<c:if>、<c:choose>、<c:when>、<c:otherwise>
      *<c:if>:可以储存比较结果

    • 3、迭代操作

      • <c:forEach>
      • <c:forEach>的属性
      属性名属性值代表什么属性值是否可以是EL表达式属性值的类型属性的默认值
      var存放到指定的成员String
      items被迭代的集合对象集合或数组
      varStatus用来存放现在指到的相关成员的信息String
      begin开始的位置int0
      end结束的位置int最后一个成员
      step每次迭代的间隔数int1
      • varStatus:可以获取当前迭代元素的索引(index:集合从0开始),第几个(count:从1开始),是否是最后一个(last),是否是第一个(first)。
    • 迭代遍历list集合

    <%
        List<Customer>  list = new ArrayList<>();
        list.add(new Customer("1"));
        list.add(new Customer("2"));
        list.add(new Customer("3"));
        list.add(new Customer("4"));
        list.add(new Customer("5"));
        pageContext.setAttribute("list", list);
    %>
    <%--  ites表示要迭代的集合对象,var表示将每次遍历的对象,赋值给customer,后面就可以对其进行操作  --%>
    <c:forEach items="${pageScope.list}" var="customer">
        ${customer.id}
        <br>
    </c:forEach>
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值