[Java] JSP笔记 - ELJSTL 常用标签

Posted 爱音乐的孩子是小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Java] JSP笔记 - ELJSTL 常用标签相关的知识,希望对你有一定的参考价值。

一、 什么是 EL 语言

表达式语言(EL)是 JSP 2.0 引入的一种计算和输出 Java 对象的简单语言。

二、EL 语言的作用

为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法。它是一种简单的语言,基于可用的命名空间(PageContext 属性)、嵌套属性和对集合、操作符(算术型、关系型和逻辑型)的访问符、映射到 Java 类中静态方法的可扩展函数以及一组隐式对象

三、使用 EL 语言前的配置

在Tomcat5.0.16和之后和版本中,默认是支持EL的,我们不需要作其它的任何配置。

四、如何使用 EL 表达式

1. EL的内置对象

首先我们要知道 EL 的内置对象有哪些----pageScope、requestScope、sessionScope、applicationScope如果未指定scope,默认从 pageScope 到 applicationScope一次扩大范围查找属性名,也可以使用 xxxScope.属性名 直接指定在某个 scope 查找,如:

${requestScope.tom}  

2. 语法结构

${expression}

3. [ ]与.运算符

EL 提供.和[]两种运算符来存取数据。如:

    ${student.name}  
    ${studentList[0].name}  

当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用“[ ]“。如:

    ${ student.My-Name}   <!-- ${ student.My-Name} 写法不正确,应该改为下面这种 -->  
    ${ student["My-Name"] }  

如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。如:

${ sessionScope.student[property] }    <!-- 其中 property 是一个变量,动态取对象的属性,如"id", "name"等等 -->  

4. 使用 EL 取出内置对象的数据

(1)、普通对象和对象属性

服务器端:

request.setAttribute("student", student);  

在浏览器上打印出服务器端绑定的数据:

    ${ student }  <!-- 相当于执行了 student.toString(); -->  
    ${ student.name }  <!-- 相当于执行了 student.getName(); -->  
    ${ student.teacher.name }  <!-- 相当于执行了 student.getTeacher().getName(); -->  
    ...  

(2)、数组中的数据

服务器端:

    String[] nameArray = new String[]{"Tom", "Lucy", "Lilei"};  
    request.setAttribute(“nameArray”,nameArray);  
      
    Student[] students = new Student[3];  
    students[0] = stu1;  
    students[1] = stu2;  
    students[2] = stu3;  
    request.setAttribute(“students”,students);  

在浏览器上打印出服务器端绑定的数组数据:

    ${ nameArray[0] }   <!-- Tom -->  
    ${ nameArray[1] }   <!-- Lucy -->  
    ${ nameArray[2] }   <!-- Lilei -->  
      
    ${ students[0].id }   <!-- 输出第一个学生的ID -->  
    ${ students[1].name }   <!-- 输出第二个学生的name -->  
    ${ students[2].teacher.name }   <!-- 输出第三个学生的老师的name -->  

(3)、List中的数据

服务器端:

    List<Student> studentList=new ArrayList<Student>();  
    studentList.add(stu1);  
    studentList.add(stu2);  
    studentList.add(stu3);  
    request.setAttribute(“studentList”,studentList);  

在浏览器上打印出服务器端绑定的List数据:

    ${ studentList[0].id }   <!-- 输出第一个学生的ID -->  
    ${ studentList[1].name }   <!-- 输出第二个学生的name -->  
    ${ studentList[2].teacher.name }   <!-- 输出第三个学生的老师的name -->  

(4)、Map中的数据

服务器端:

    Map<String, Student> studentMap = new HashMap<String, Student>();  
    studentMap.put("Tom", stu1);  
    studentMap.put("Lucy", stu2);  
    studentMap.put("Lilei", stu3);  
    request.setAttribute(“studentMap”,studentMap);  

在浏览器上打印出服务器端绑定的Map数据:

    ${ studentMap.Tom.id }   <!-- 输出第一个学生的ID -->  
    ${ studentMap.Lucy.name }   <!-- 输出第二个学生的name -->  
    ${ studentMap.Lilei.teacher.name }   <!-- 输出第三个学生的老师的name -->  

(5)、使用 EL 取出隐式对象中的数据

JSP 表达式语言定义了一组隐式对象,其中许多对象在 JSP scriplet 和表达式中可用。可使用的隐式对象如下:

pageContent JSP 页的上下文。它可以用于访问 JSP 隐式对象,如请求、响应、会话、输出、servletContext 等。例如,${pageContext.response} 为页面的响应对象赋值。

 

此外,还提供几个隐式对象,允许对以下对象进行简易访问:

param 将请求参数名称映射到单个字符串参数值(通过调用 ServletRequest.getParameter (String name) 获得)。getParameter (String) 方法返回带有特定名称的参数。表达式 $(param . name) 相当于 request.getParameter (name)。
paramValues 将请求参数名称映射到一个数值数组(通过调用 ServletRequest.getParameter (String name) 获得)。它与 param 隐式对象非常类似,但它检索一个字符串数组而不是单个值。表达式 ${paramvalues. name) 相当于 request.getParamterValues(name)。
header 将请求头名称映射到单个字符串头值(通过调用 ServletRequest.getHeader(String name) 获得)。表达式 ${header. name} 相当于 request.getHeader(name)。
headerValues 将请求头名称映射到一个数值数组(通过调用 ServletRequest.getHeaders(String) 获得)。它与头隐式对象非常类似。表达式 ${headerValues. name} 相当于 request.getHeaderValues(name)。
cookie 将 cookie 名称映射到单个 cookie 对象。向服务器发出的客户端请求可以获得一个或多个 cookie。表达式 ${cookie. name .value} 返回带有特定名称的第一个 cookie 值。如果请求包含多个同名的 cookie,则应该使用 ${headerValues. name} 表达式。
initParam 将上下文初始化参数名称映射到单个值(通过调用 ServletContext.getInitparameter(String name) 获得)。

除了上述两种类型的隐式对象之外,还有些对象允许访问多种范围的变量,如 Web 上下文、会话、请求、页面:

pageScope 将页面范围的变量名称映射到其值。例如,EL 表达式可以使用 ${pageScope.objectName} 访问一个 JSP 中页面范围的对象,还可以使用 ${pageScope .objectName. attributeName} 访问对象的属性。
requestScope 将 请求范围的变量名称映射到其值。该对象允许访问请求对象的属性。例如,EL 表达式可以使用 ${requestScope. objectName} 访问一个 JSP 请求范围的对象,还可以使用 ${requestScope. objectName. attributeName} 访问对象的属性。
sessionScope 将会话范围的变量名称映射到其值。该对象允许访问会话对象的属性。例如: 
${sessionScope. name}
applicationScope 将应用程序范围的变量名称映射到其值。该隐式对象允许访问应用程序范围的对象。

五、EL 操作符

算术型 +、-(二元)、*、/、div、%、mod、-(一元)
逻辑型 and、&&、or、||、!、not
关系型 ==、eq、!=、ne、、gt、<=、le、>=、ge。可以与其他值进行比较,或与布尔型、字符串型、整型或浮点型文字进行比较。
empty。空操作符是前缀操作,可用于确定值是否为空。
条件型 A ?B :C。根据 A 赋值的结果来赋值 B 或 C。

 

以上是关于[Java] JSP笔记 - ELJSTL 常用标签的主要内容,如果未能解决你的问题,请参考以下文章

笔记之_Java的jsp页面常用

[原创]java WEB学习笔记14:JSP的9 个隐含对象 及 JSP 的基本语法

[原创]java WEB学习笔记16:JSP指令(page,include),JSP标签(forwar,include,param)

[原创]java WEB学习笔记36:Java Bean 概述,及在JSP 中的使用,原理

eljstl快速入门

JavaWeb jsp 笔记总结