一、EL表达式
1、EL简介
不是一种语言,只是一个表达式而已,是JSP中专门用于显示数据用的,从JSP2.0主要作用:获取数据并显示到页面上。
简单易用:
<%
List<Book> cart = (List<Book>)request.getSession.getAttribute(“cart”);
out.write(cart.get(0).getName());
%>
等价于
EL表达式:${cart[0].name} 简单,写起来方便。
实际开发:不要在JSP中使用Java表达式,而要使用EL表达式。
2、EL表达式的基本语法
${EL表达式}
EL表达式,是从四大域对象中取数据的。
EL表达式中没有空指针异常,也没有数组越界,没有字符串连接。
EL表达式获取数据模型层的对应的GET方法。
比如后台request.setAttribute(“a”,a);
JSP页面${a.name}//这里的name对应的实体类getName()的
3、EL获取数据
3.1获取对象的属性
3.2 EL表达式运算符
3.2.1 算数、逻辑、关系
3.2.2 判断empty运算符:
判断一个字符串是否为””或其他对象是否为null,同时还能判断集合中是否有元素。
${empty num} <!-- 返回布尔值结果 -->
3.2.3三元运算符:'布尔'?'true时执行' : 'false时执行'
<input type="radio" name="gender" value="male" ${gender=='male'?'checked="checked"':''} />男
3.3、EL中的隐含对象(不要和JSP的隐含对象混淆)
3.3.1对于JSP和EL隐含对象格式是不同的。JSP的是<%JSP隐含对象%>;而EL的是${EL隐含对象}。
3.3.2 EL表达式隐含对象一共有11个
<!-- JSESSIONID的值 -->
${cookie.JSESSIONID.value}
3.4定义和使用EL函数
3.4.1、EL不支持字符串操作;自定义的EL函数一般很少自定义,但也有公司自己封装好定义好的。
3.4.2、定义EL函数的开发步骤
⑴定义一个普通类,提供实现功能的静态方法(EL函数只能调用静态方法)
public class MyFunction {
//EL函数字符串转大写静态方法
public static String toUppercase(String s){
return s.toUpperCase();
}
}
⑵EL函数进行配置:在WEB-INF目录下建立一个扩展名为tld(Tag Libary Definition)的xml文件。
<?xml version="1.0" encoding="GBK" ?>
<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">
<description>JSTL 1.0 functions library</description>
<display-name>JSTL functions</display-name>
<tlib-version>1.0</tlib-version>
<short-name>el</short-name>
<uri>http://www.abcd.com/el</uri>
<function>
<name>toUppercase</name>
<function-class>d11.elTag.MyFunction</function-class>
<function-signature>java.lang.String toUppercase(java.lang.String)</function-signature>
</function>
</taglib>
⑶在JSP中使用自定义的EL函数
首先:通过taglib指令引入外部的函数库
<%@ taglib uri="http://www.abcd.com/el" prefix="el"%>
然后:调用相关方法
<%pageContext.setAttribute("s","abcdefg");%>
${el:toUppercase(s)}
二、自定义标签:简单标签
1、标签的作用
控制JSP中的逻辑处理。替换掉JSP中的Java脚本。
2、标签的编写步骤
javax.servlet.jsp.tagext.SimpleTag中的方法:
void doTag():遇到自定义标签时由服务器调用执行。
JspTag getParent():得到父标签的引用。
void setJspBody(JspFragment jsp):由服务器调用,传出JSP的片段
void setJspContext(JspContext jc):由服务器调用,传入当前页面的PageContext
void setParent(JspTag parent):由服务器调用,传入他的父标签
a、编写一个类,实现javax.servlet.jsp.tagext.SimpleTag,或者继承javax.servlet.jsp.tagext.SimpleTagSupport
b、对标签处理类进行配置
在WEB-INF目录下建立一个扩展名为tld的xml文件。
c、在JSP中使用
<%@ taglib uri="http://www.abcd.com/learnTag" prefix="learnTag"%>
< learnTag:ShowIp / >
注意:每次访问带有自定义标签的页面,自定义标签对应的处理类都会重新实例一次。
3、标签具体的作用:4个方面
⑴、控制主体内容是否显示。
4、标签的详细配置
<body-content>取值:body-content就是自定义标签<自定义标签>body-content</自定义标签>
JSP:jsp中能出现啥,标签主体内容就能出现啥。给传统标签用的。简单标签一用就报错。
empty:没有主体内容。简单和传统标签都能用。
scriptless:给简单标签用的,说明主体内容是非脚本。
tagdependent:把主体内容的EL表达式当做普通字符串对待。
三、JSTL标签库
1、JSTL简介
JSP Standard Tag Libary:JSP中标准的标签库。Apache实现的。
导入jar包:JavaEE的jar包中包含。
2、JSTL的组成
Core:核心标签库。通用逻辑处理
Fmt:国际化有关。
Functions:EL函数
SQL:操作数据库。不常用
XML:操作XML。不常用
3、JSTL中的Functions
taglib指令导入:<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
● fn:contains函数:用于判断在源字符串中是否包含目标字符串。
● fn:containsIgnoreCase函数:用于判断在源字符串中是否包含目标字符串,并且在判断时忽略大小写。
● fn:startsWith函数:用于判断源字符串是否以指定的目标字符串开头。
● fn: endsWith函数:用于判断源字符串是否以指定的目标字符串结尾。
● fn:indexOf函数:用于在源字符串中查找目标字符串,并返回源字符串中最先与目标字符串匹配的第一个字符的索引。
● fn:replace函数:用于把源字符串中的一部分替换为另外的字符串,并返回替换后的字符串。
● fn:substring函数:用于获取源字符串中的特定子字符串。
● fn:substringBefore函数:用于获取源字符串中指定子字符串之前的子字符串。
● fn: substringAfter函数:用于获取源字符串中指定子字符串之后的子字符串
● fn:split函数:用于将源字符串拆分为一个字符串数组。
● fn:join函数:用于将源字符串数组中的所有字符串连接为一个字符串。
● fn:toLowerCase函数:用于将源字符串中的所有字符改为小写。
● fn: toUpperCase函数:用于将源字符串中的所有字符改为大写。
● fn:trim函数:用于将源字符串中的开头和末尾的空格删除。
● fn:escapeXml函数:用于将源字符串中的字符“<”、“>”、“””和“&”等转换为转义字符。
● fn:length函数:用于返回字符串中的字符的个数,或者集合和数组的元素的个数
4、JSTL中Core
也就是我们常说的C标签,加粗表示常用重要
taglib指令导入:<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
c:remove 用于删除各种Web域中的属性,用于删除指定范围,如果没有指定,四个范围全删除
<c:remove var=’varName’ [Scope=”{page|request|session|application}”]>
c:out 表示输出
①有个默认值default=”value”如果输出没有值,就可以用默认值来显示
②有个属性为escapeXml默认为true,表示完全默认输出<、>、&等特殊字符,比如<h1>11</h1>输出为<h1>11</h1>
c:set 用于把某一对象存在指定的域范围内