EL和JSTL表达式

  1. EL表达式的概述:

        在JSP开发中,为了获取Servlet域对象中存储的数据,经常需要书写很多Java代码,这样的做法 会使JSP页面混乱,难以维护,为此,在JSP2.0规范中提供了EL表达式。EL是Expression Language
    

    的缩写,它是一种简单的数据访问语言。本节将针对EL表达式进行详细的讲解。

        EL(Expression Language) 目的: 为了使JSP写起来更加简单。表达式语言的灵感来自于ECMAScript
                 由于EL可以简化JSP页面的书写,因此,在JSP的学习中,掌握EL是相当重要的。要使用EL表达式,
            首先要学习它的语法。EL表达式的语法非常简单,都是以"${" 符号开始, 以"}" 符号结束的,具体格        式如下:
    
        ${表达式}
    

EL的使用:内置对象
分类 内置对象 描述

    作用域           pageScope         page作用域
                     requestScope      request作用域
                     sessionScope      session作用域
                     applicationScope  application作用域

    请求参数         param             获得一个参数
                     paramValues       获得一组参数

    请求头           header            获得一个请求头
                     headerValues      获得一组请求头

    JSP上下文对象    pageContext

    全局初始化参数   initParam

    cookie           cookie
<%@page import="com.ElDemo.User"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>

<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
        <%
        //获得字符串
        String str="华信智原" ;
            pageContext.setAttribute("str", str);//将str存入到作用域中  下面就可以取到

        %>
        ${str }<br><%--不在域中  无法获得指定对象 --%>
        ${pageScope.str }<br><%--page的作用域 --%>
        <hr>
        <%
        //获得数组
            String[] arr={"A","B","C"};
            pageContext.setAttribute("arr", arr);//没有指定Scope的值  则默认作用域是在page范围
        %>
        ${arr }<br>
        ${arr[0] }<br>

        <hr>

        <%
        //获得集合(list)中的数据
        //创建模拟数据
        List<String> list=new ArrayList<String>();
        list.add("A");
        list.add("B");
        list.add("C");
        pageContext.setAttribute("list", list);
        %>

        ${list }<br>
        ${list[2] }<br>

        <hr>
        <%
        //获得Map<String,JavaBean>的数据
        Map<String, User> map2=new HashMap<String,User>();
         map2.put("u1",new User("u001","jack",18));
         map2.put("u2",new User("u002","rose",21));
         map2.put("3",new User("u003","tom",25));
         pageContext.setAttribute("map2",map2);
        %>
        map2:${map2 }<br>
        map2.u2:${map2.u2 }<br>
        u2.username:${map2.u2.username }<br>
        map2[3].username:${map2['3'].username }<br>//通过字符串'3'获得数据


body>
html>

实现结果:
华信智原
华信智原

[Ljava.lang.String;@137d2b6
A

[A, B, C]
C

map2:{3=com.ElDemo.User@bcbc15, u2=com.ElDemo.User@e027e7, u1=com.ElDemo.User@5bc2a1}
map2.u2:com.ElDemo.User@e027e7

u2.username:u002
map2[3].username:u003
//通过字符串’3’获得数据

——————————————————————————

JSTL表达式:
什么是JSTL

    JSTL(JavaServer Pages Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,

是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat 4.x。在

JSP 2.0中也是作为标准支持的。

    JSTL 1.0 发布于 2002 年 6 月,由四个定制标记库(core、format、xml 和 sql)和一对通用标记库验证器

(ScriptFreeTLV 和 PermittedTaglibsTLV)组成。core 标记库提供了定制操作,通过限制了作用域的变量管理

 数据,以及执行页面内容的迭代和条件操作。它还提供了用来生成和操作 URL 的标记。顾名思义,format 标记库

 定义了用来格式化数据(尤其是数字和日期)的操作。它还支持使用本地化资源束进行 JSP 页面的国际化。xml 库

 包含一些标记,这些标记用来操作通过 XML 表示的数据,而 sql 库定义了用来查询关系数据库的操作。

    如果要使用JSTL,则必须将jstl.jar和 standard.jar文件放到classpath中,如果你还需要使用XML processing

及Database access (SQL)标签,还要将相关JAR文件放到classpath中,这些JAR文件全部存在于下载回来的zip文件中。


     从JSP1.1 规范开始,JSP就支持使用自定义标签,使用自定义标签大大降低了JSP页面的复杂度,同时增强了代码的

重用性。为此,许多Web应用厂商都定制了自身应用的标签库,然而同一功能的标签由不同的Web应用厂商指定可能是不同的,

这就导致市面上出现了很多功能相同的标签,令网页制作者无从选择,为了解决这个问题,Sun公司制定了一套标准标签库

(JavaServer Pages Standard Tag Library),简称JSTL。

     JSTL 虽然被称为标准标签库,而实际上这个标签库是由5个不同功能的标签共同组成的。在JSTL1.1规范中,为这5个

标签库分别指定了不同的URL以及建议使用的前缀,如表1-7所示。

               表1-1   JSTL 包含的标签库

    标签库                 标签库的URL                 前缀

    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

Core标签库: if标签

    在程序开发中,经常需要使用if语句进行条件判断,如果要在JSP页面中进行条件判断,就需要使用Core标签库提供的

 标签,该标签专门用于完成JSP页面中的条件判断,它有两种语法格式 具体如下:

    语法1: 没有标签体的情况,将结果存放到指定的作用域(不常用)

    

    语法2: 有标签体的情况,在标签体中指定要输出的内容

    
          body content
         

    在上述语法格式中,可以看到 标签有三个属性,接下来将针对这三个属性进行讲解,具体如下:

    ● test 属性用于设置逻辑表达式;

    ● var 属性用于指定逻辑表达式中变量的名字;

    ● scope 属性用于指定var变量的作用范围,默认值为page。如果属性test的计算结果为true,

      那么标签体将被执行,否则标签体不会执行。

    通过前面的讲解,我们对 标签有了一个简单的认识,接下来通过一个具体的案例来演示如何在JSP页面中使用

标签。

    在WebContent 目录下创建一个名为c_if.jsp的文件, 代码如文件1-15所示。

             文件1-2   c_if.jsp

    <%@ page language="java" contentType="text/html;charset=utf-8" pageEncoding="utf-8" 
        import="java.util.*"%>
    <%@ taglib uri="http://java.sum.com/jsp/jstl/core" prefix="c"%>
    
    
    
    
        
        
           This is you first visit. Welcome to the site!
        
    
         

     启动Tomcat服务器,在浏览器地址栏中输入地址"http://localhost:8080/chapter07/c_if.jsp"访问c_if.jsp页面,

此时,浏览器窗口中显示的结果 如下所示。

    This is you first visit. Welcome to the site!

Core标签库:forEach标签

   在JSP页面中,经常需要对集合对象进行循环迭代操作,为此,Core标签库提供了一个标签,该标签专

门用于迭代集合对象中的元素,如Set、List、Map、数组等,并且能重复执行标签体中的内容,它有两种语法格式,具

体格式如下:

   语法1: 迭代包含多个对象的集合

   
      body content
         

    语法2: 迭代指定范围内的集合

    
        body content
    

    在上述语法格式中,可以看到 标签有多个属性。接下来针对这些属性进行讲解,具体如下:

    ● var属性 用于指将当前迭代到的元素保存到page域中的名称;
    ● items 属性用于指定将要迭代的集合对象;
    ● varStatus用于指定当前迭代状态信息的对象保存到page域中的名称;
    ● begin 属性用于指定从集合中第几个元素开始 进行迭代,begin的索引值从0开始,如果没有指定items属性,
      就从begin指定的值开始迭代,直到迭代结束为止;
    ● step 属性用于指定迭代的步长,即迭代因子的增量。

     标签在程序开发中经常会被用到,因此熟练掌握 标签是很有必要的,接下来,通过

几个具体的案例来学习标签的使用。

    分别使用标签迭代数组和Map集合,首先需要在数组和Map集合中添加几个元素,然后将数组赋值给

标签的items属性,而Map集合对象同样赋值给标签的items属性,之后使用getKey()和getValue()

方法就可以获取到Map集合中的键和值,如文件1-3 所示

         文件 1-3 c_foreach1.jsp

    <%@ page language="java" contentType="text/html;charset=utf-8" pageEncoding="utf-8" 
        import="java.util.*"%>
    <%@ taglib uri="http://java.sum.com/jsp/jstl/core" prefix="c"%>
    
    
    
    
        <%
           String[] fruits={"apple","orange","grape","banana"};
        %>
        String 数组中的元素:
        
${name}
<% Map userMap=new HashMap(); userMap.put("Tom","123"); userMap.put("Make","123"); userMap.put("Lina","123"); %>
HashMap集合中的元素:
${entry.key} ${entry.value}
启动Tomcat服务器,在浏览器在地址栏中输入地址"http://localhost:8080/chapter07/c_foreach1.jsp" 访问c_foreach1.jsp页面,此时, 浏览器窗口中的显示结果如下所示 String 数组中的元素: apple orangle grape banana ____________________________________ HashMap集合中的元素: Tom 123 Lina 123 Make 123

如上可以看出,在String数组中存入的元素apple、orange、grape和 banana全部被打印出来了,因此可以说明使用

标签可以迭代数组中的元素。Map集合中存入的用户名和密码全部被打印出来了。*在使用标签时,
只需要将userMap集合对象复制给items属性,之后通过entry变量就可以获取到集合中的键和值。*

     标签的begin、end和 step属性分别用于指定循环的起始索引、结束索引和步长。使用这些属性可以

迭代集合对象中某一范围内的元素。
<%@page import="java.util.*"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>

     <%
            List list=new ArrayList();
            list.add("tom");
            list.add("make");
            list.add("Lina");
     %>

     <table border="1">
        <tr>
            <td>序号td>
            <td>索引td>
            <td>是否是第一个元素td>
            <td>是否是最后一个元素td>
            <td>元素的值td>
        tr>
        <%--varStatus用于指定当前迭代状态信息的对象保存到page域中的名称; --%>
        <c:forEach var="name" items="<%=list %>" varStatus="status">
        <tr>
            <td>${status.count }td>
            <td>${status.index }td>
            <td>${status.first }td>
            <td>${status.last }td>
            <td>${name }td>
        tr>

     c:forEach>

     table>   
body>
html>

代码实现
EL和JSTL表达式_第1张图片

你可能感兴趣的:(EL和JSTL表达式)