jsp的el表达式

其实工作那么久,一直都是写的Freemarker模板页面,直到最近才开始写JSP页面,所以这里完整学一下JSP原生支持的EL表达式(web.xml的3.0版本默认支持,后面说)。

EL的全名是Expression Language,它原本是JSTL 1.0为了方便存储数据所自定义的语言,发展到现在已经是一项成熟、标准的技术。

使用EL表达式获取数据

EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的WEB域中检索Java对象并获取数据,比如某个WEB域中的Java Bean、List集合、Map集合或数组等对象。

使用EL表达式获取数据的通常语法是:${标识符}。EL表达式在执行的时候,会调用pageContext.findAttribute方法,用标识符作为关键字,分别从page、request、session、application四个域中查找并返回匹配的对象,找不到则返回空字符串。

使用EL表达式执行运算

语法和获取数据的语法一样:${运算表达式}。EL表达式支持以下运算符:

关系运算符:

逻辑运算符:

empty运算符:检查对象是否为空(null),比如 ${empty user} 。

三目运算符:${user != null ? user.name : "游客"} 。

下标/属性运算符和属性运算符:${users[0]} 或 ${users[name]} 和 ${user.name} 。

使用EL表达式获得WEB开发常用对象

EL表达式语言中定义了11个隐含对象,使用这些隐含对象可以很方便地获取WEB开发中的一些常见对象,并读取这些对象的数据。语法也是一样样的:${隐含对象名称}。

隐含对象名称 描述
pageContext 对应于JSP页面中的pageContext对象(注意:取的是pageContext对象。)
pageScope 代表page域中用于保存属性的Map对象
requestScope 代表request域中用于保存属性的Map对象
sessionScope 代表session域中用于保存属性的Map对象
applicationScope 代表application域中用于保存属性的Map对象
param 表示一个保存了所有请求参数的Map对象
paramValues 表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个string[]
header 表示一个保存了所有http请求头字段的Map对象,注意:如果头里面有“-” ,例Accept-Encoding,则要header[“Accept-Encoding”]
headerValues 表示一个保存了所有http请求头字段的Map对象,它对于某个请求参数,返回的是一个string[]数组。注意:如果头里面有“-” ,例Accept-Encoding,则要headerValues[“Accept-Encoding”]
cookie 表示一个保存了所有cookie的Map对象
initParam 表示一个保存了所有web应用初始化参数的map对象

使用EL表达式调用Java方法(EL自定义函数)

EL表达式允许开发人员开发自定义函数,以调用Java类的方法,用于扩展EL表达式的功能,让EL表达式完成普通Java程序代码所能完成的功能。

在EL表达式中调用的只能是Java类的静态方法,这个Java类的静态方法需要在TLD文件中描述,才可以被EL表达式调用。

使用上还是熟悉的语法:${prefix: methiod(params)}。

一般来说,EL自定义函数的开发与应用包含以下三个步骤:

1.编写一个Java类的静态方法。

public class SayHello {
    public static String sayHello(String name) {
        return "你好," + name;
    }
}

2.在WEB-INF目录下编写TLD(标签库描述符)文件,在TLD文件中描述自定义函数。

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" 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 web-jsptaglibrary_2_0.xsd">
    <tlib-version>1.0</tlib-version>
    <short-name>EL Function</short-name>

    <!-- 自定义EL函数库的引用URI,
        在JSP页面中可以这样引用:<%@taglib uri="/sayHelloFunction" prefix="fn" %> -->
    <uri>/sayHelloFunction</uri>

    <!-- <function>元素用于描述一个EL自定义函数 -->
    <function>
        <description>html标签转义处理方法</description>

        <!-- <name>子元素用于指定EL自定义函数的名称 -->
        <name>sayHello</name>

        <!-- <function-class>子元素用于指定完整的Java类名 -->
        <function-class>me.gacl.util.SayHello</function-class>

        <!-- <function-signature>子元素用于指定Java类中的静态方法的签名,
            方法签名必须指明方法的返回值类型及各个参数的类型,各个参数之间用逗号分隔。-->
        <function-signature>java.lang.String sayHello(java.lang.String)</function-signature>
    </function>
</taglib>

3.在JSP页面中导入和使用自定义函数。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%-- 引入EL自定义函数库 --%>
<%@taglib uri="/sayHelloFunction" prefix="fn" %>
<!DOCTYPE HTML>
<html>
<head>
    <title>使用EL调用Java方法</title>
</head>

<body>
    <%-- 使用EL调用filter方法 --%>
    ${fn:sayHello("静静")}
</body>
</html>

注意,编写完TLD(标签库描述符)文件后,需要将它放置到<web应用>\WEB-INF\目录下的除了classes和lib目录之外的任意子目录中。TLD文件中的<uri>标签用于指定该TLD文件的URI,在JSP文件中可以通过这个URI来引入该标签库描述文件。

EL表达式保留关键字

EL表达式无效的原因及解决办法

EL表达式是JSP 2.0规范中的一项技术。因此,若想正确解析EL表达式,需要使用支持Servlet2.4/JSP2.0技术的WEB服务器。同时也要注意Tomcat 6以下是不能支持EL表达式的。

在3.0版本的web.xml环境下,JSP是默认支持EL表达式的。但是3.0之前的版本则是需要通过JSP页面上的一个标签中的一个属性去控制是否能使用EL表达式的:

<%@ page isELIgnored="false"%>

这个属性值默认是true,即默认是关闭EL表达式的,我们可以在JSP页面上加上这段代码使JSP页面开启EL表达式的使用支持。但是这样的话,每个JSP页面都要把这段代码写一遍,比较麻烦,最好是直接升级web.xml的版本到3.0,一劳永逸。

"我想哭,你可不可以暂时别要睡。"

原文地址:https://www.cnblogs.com/yanggb/p/10788733.html

时间: 2024-11-13 09:29:22

jsp的el表达式的相关文章

jsp中el表达式遇见的问题

概述: 之前在jsp页面展示中就遇见过几次这样的问题,今天来说一下我遇到的 org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/jsp/list.jsp at line 58 异常: 首先这个错误出现在访问controller层的list.action方法: 在输入http://localhost:8080/Smil/list.action 后就出现了如下的错误: 错误原因是:

JSP的EL表达式语言

以下内容引用自http://wiki.jikexueyuan.com/project/jsp/expression-language.html: JSP表达式语言(EL)可以方便地访问存储在JavaBean组件中的应用程序的数据.JSP EL允许创建表达式(a)算术和(b)逻辑.在一个JSP EL表达式中,可以使用整数.浮点型数字.字符串.内置的布尔常量值为true和false和null. 一.简单的语法 通常,当给JSP标签指定一个属性值时,只需使用一个字符串.例如: <jsp:setProp

JSP:使用EL表达式调用java函数

JSP:使用EL表达式调用java函数 使用一个例子 编写一个使用JSP表达式语言的JSP程序,输入一个数字,提交后输出该数字的九九乘法表. java代码实现打印9*9乘法表 Solution.java package method; public class Solution { public static String Mul99(int n){ String result=""; for(int i=1;i<=9;i++){ int temp=i*n; result=res

JSP、EL表达式的入门(要用)

2018-08-12   22:55:23 * JSP.EL表达式的入门(要用)    * Servlet/JSP  是两种动态的WEB资源的两种技术.   * 使用Servlet 生成HTML的页面    response.getWriter("<form action='' method='post'>");    response.getWriter("<input type='text' name='username'>");  *

JSP 中EL表达式用法

JSP 中EL表达式用法详解 EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${为起始.以}为结尾的.上述EL范例的意思是:从Session的范围中,取得 用户的性别.假若依照之前JSP Scriptlet的写法如下: User user =(User)session.getAttribute("user"); String sex =u

JSP页面EL表达式不解析

问题是这样:在搭建springMVC环境的时候,笔者写了一个简单的Controller如下: @Controller public class HelloController { @RequestMapping(value = "/hello.do", method = RequestMethod.GET) public String hello(Model model) { model.addAttribute("hello", "hello_Sprin

Jsp中EL表达式的使用

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka   1.什么是EL EL是JSP表达式语言,全称是ExpressionLanguage,使用EL的目的是简化在JSP中访问变量的方式,简单静态HTML与Java代码的耦合.下面来看看一个例子: <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding=

jsp之EL表达式

EL表达式 1. 什么是EL表达式 jsp中的EL(express language)表达式技术:它仅仅是表达式. EL表达式的功能: 获取4个内置对象(域)中的数据,或自定义对象中的数据,或数组.集合容器中的数据.可以完成非常简单的运行,但它不能完成循环.复杂的判断等功能. EL表达式的书写格式:${ 表达式 } EL表达式的底层是我们前面学的jsp中的各种对象与方法的操作,只是做了一些优化:有一个很大的优化就是如果找不到数据的话不会返回null或者报异常,而是什么都不显示: 2. EL表达式

JSP中EL表达式的应用以及常用的方法

EL表达式      1.EL简介 1)语法结构        ${expression} 2)[]与.运算符      EL 提供.和[]两种运算符来存取数据.      当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 []. 例如:          ${user.My-Name}应当改为${user["My-Name"] }      如果要动态取值时,就可以用[]来做,而.无法做到动态取值.例如:          ${sessionScop

【JSP】EL表达式语言

EL简介 EL语言原本是JSTL1.0中的技术(所以EL和JSTL配合如此亲密和默契也就是自然的了),但是从JSP2.0开始(JSTL1.1)就分离出来纳入了JSP的标准了.因此EL不需要任何jar包,他是集成到JSP技术本身中的了. 由于EL定位是 表达式语言,因此EL只能用于做简单的运算和取值,它是JSP无脚本化的一个利器,非常易学. EL的特点 1.所有的EL表达式的格式 ${   expression   },例如取的一个对象user的age属性 ${ user.name } 2.可以使