分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

jsp的el表达式

发布时间:2023-11-01 15:52责任编辑:林大明关键词:jsjsp

其实工作那么久,一直都是写的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,一劳永逸。

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

jsp的el表达式

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

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved