(JSP)EL表达式

EL表达式是一种在jsp页面静态部分获取数据的简单方式
动态部分为(jsp中的java代码块,jsp动作)
静态部分为(jsp中的html部分)

注意:
EL获取的数据,只能从四大域里面获取数据获取,放进域里的代码才能够获取
示例代码如下:

<%
	String username = "wenhao";
	pageContext.setAttribute("user", username);
%>
	user = ${user} 

EL只能从四大域中获取数据,其获取数据的顺序,是按照由小到大
四大域有小到大

pageContext--->request--->session--->application

同时EL指定了四大域的内置对象,通过它可以来指定访问指定域里面的内容
pageScope,sessionScope,requestScope,applicationScope

用法:${pageScope.username}

EL访问Bean属性

EL可以通过$[key.属性]的方式获取到指定对象的指定属性值。其底层实际调用的是该对象的相应的get方法(调用get方法才能访问的属性,一一定是被封装起来的)

<% 	//student的三个属性name,age,id,要想能够被存在域属性里被访问,都需要用封装起来,然后提供get访问方法,才能够成功访问
	Student s1 =new Student("wenhao",23,12);
	pageContext.setAttribute("student", s1);
%>
	name = ${pageScope.student.age }
	${pageScope.student5.age}//当访问一个不存在的对象时,el访问不会报错,只是输出无数据

属性的定义:set get方法才是一种属性

EL访问数组

访问数组时不会报越界异常

<% 
String[] str  = new String[3];
str[0] = "sd";
str[1] = "sdsds";
str[2] = "sdasdasdas";
pageContext.setAttribute("usr", str);
%>
str= ${pageScope.str[0]}

EL访问List

可以通过索引访问List,但是不能访问set,因为set是无序的没有索引

EL访问Map

EL运算符

在这里插入图片描述
以上是一些常见的运算符,不常见的运算符empty
用法:
${empty 变量名} //作用是判断是否存在该变量,即使该变量为空也返回true

<%
	String name = null;
	request.setAttribute("name", name);
%>
	name = ${empty requestScope.name}

EL内置对象

类似于JSP的java代码块及表达式块中可以使用九个内置对象一样,EL表达式中,同样也存在内置对象,并且存在11个内置对象。常用内置对象,除了前面使用的四个域属性空间相关的内置对象以外(pageScope,sessionScope,requestScope,applicationScope),还有以下几个比较常用的。
(1).pageContext
EL里面的pageContext和java内置对象中的EL是一个东西,作用是通过它可以获取到,request,response,session,servletContext,servletConhfig等,这些对象不是内置对象,必须依靠pageContext来获取

${pageContext.request}即可获取到request对象,底层实际调用的是pageContext.getRequest();

pageContext在EL里面的用法示例

	<form action = "${pageContext.request.contextPath}/loginServlet"  method = "POST">
		姓名<input type = "text" name ="name"/><br>
		年龄<input type = "text" name = "name"/><br>
		<input type ="submit" value = "提交"/>
	</form>

(2)param
作用:获取请求中的指定参数值
底层实际调用的是request.getParameter()
用法:

name =${param.name } 
age = ${param.age }   //就可以获取到请求发送过来的name和age属性的值

(3)paramvalues
当提交过来的值是一个复选框的时候,需要用paramValues,是一个存放值得数组
当提交过来的是一个复选框数据时:

爱好<input type  = "checkbox" name = "hobby" value = "swimming"/>游泳	
<input type  = "checkbox" name = "hobby" value = "running"/>跑步
<input type  = "checkbox" name = "hobby" value = "gamming"/>游戏

接收方式:

爱好1 = ${paramValues.hobby[0]}<br>
		爱好2 = ${paramValues.hobby[2]}<br>
		爱好3 = ${paramValues.hobby[1]}<br>

(4).initparam
获取的是web.xml文件里定义的初始化数值的

自定义EL函数

问题的引入:在EL中是无法完成一些字符串的操作(如两个字符串的连接)的,所以可以定义专门的类来完成这样的工作,但是需要配置一系列的信息,把class文件配置到EL中去
在这里插入图片描述
tld文件,我放在该目录下的:E:\Aboutjava\apache-tomcat-9.0.31-windows-x64\tomcat-9\webapps\examples\WEB-INF\jsp2
头部文件放代码如下:

<taglib 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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
    </taglib>

1.创建后缀名为.tld的xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- 头部注释如下 -->
<taglib 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 
    http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
   <!-- 	定义标标签信息 -->
   <tlib-version>1.0</tlib-version>
   <short-name>myfunction</short-name>
   <uri>http://www.test.com</uri>
   <!--注册函数-->
   <function>
  		 <!-- 方法名(可自定义,一般与类里面方法名相同) -->
        <name>mytoUppper</name>  
        <!-- 来自哪一个类的名字 -->
        <function-class>com.swust.EL.Funciton</function-class>
        <!-- 方法签名三部分:返回值类型(包含包名)  方法名    (参数类型(包含包名))    -->
        <function-signature>java.lang.String toUppper( java.lang.String )</function-signature>
    </function>
   </taglib>

2.在想要使用对应信息的jsp文件中,加入以下代码

<%@ taglib uri ="http://www.test.com"  prefix ="myfunction" %>

总体使用代码

<%@ page pageEncoding="utf-8"%>
<%@ taglib uri ="http://www.test.com	"  prefix ="myfunction" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
	${ myfunction:mytoUppper("abc")}<br>
</body>
</html>

JSTL中的EL函数库

需要导入jstl.jar
和standard.jar 两个jar包
然后可以使用标准的EL函数库

在standard.jar下的META-INF文件下的fn.tld文件里,定义了 16个EL的函数,都是关于字符串的操作
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值