00 05JSP学习之EL表达式

1 EL入门

1、EL是JSP内置的表达式语言。
(1)JSP 2.0开始,不让再使用java脚本,而是使用EL表达式和动态标签来替代Java脚本。
(2)EL代替的是<%= ... %>,也就是说EL只能做输出。

2、EL表达式来读取四大域
(1)${xxx}:全域查找名为xxx的属性,如果不存在,则输出空字符串,而不是null。
(2)${pageScope.xxx}${requestScope.xxx}${sessionScope.xxx}${applicationScope.xxx},指定域获取属性。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
pageContext.setAttribute("page", "pageContext");
request.setAttribute("page", "request");
session.setAttribute("page", "session");
application.setAttribute("page", "application");
%>
${page }<br/> <!-- pageContext -->
${pageScope.page }<br/> <!-- pageContext -->
${requestScope.page }<br/> <!-- request -->
${sessionScope.page }<br/> <!-- session -->
${applicationScope.page }<br/> <!-- application -->
</body>
</html>

3、JavaBean导航

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="org.lks.domain.Person,org.lks.domain.Address" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Person per = new Person("lks", 23, new Address("xinyang","luoshan"));
session.setAttribute("personA", per);
%>
${sessionScope.personA.address.city } <!-- xinyang -->
</body>
</html>

2 EL的11个内置对象

EL可以输出的东西都在11个内置对象中,其中10个是Map。pageContext不是Map,它就是一个PageContext类型。
(1)param:Map<String,String>类型,对应参数,其中key是参数名,value是参数值,适用於单值的参数。
(2)paramValues:Map<String,String[]>类型,对应参数,其中key是参数名,value是多个参数值,适用于多值的参数。
(3)header:对应请求头,它是一个Map,其中Key表示头名称,value是单个头值,适用於单值请求头。
(4)headerValues:对应请求头,它是一个Map,其中Key表示头名称,value是多个头值,适用于多值请求头。
(5)initParam:获取<context-param>内的参数。

<context-param>
  	<param-name>info</param-name>
  	<param-value>hello</param-value>
  </context-param>

(6)cookie:Map<String,Cookie>类型,其中key是Cookie的name,value是Cookie对象。
(7)pageContext:它是PageContext类型。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- http://localhost:8080/jsplearn/jsp03/a.jsp?info=hello -->
${param.info }<br/> <!-- hello -->
<!-- http://localhost:8080/jsplearn/jsp03/a.jsp?hobby=swimming&hobby=play computer game -->
${paramValues.hobby[0] } <br/> <!-- swimming -->
${paramValues.hobby[1] } <br/> <!-- play computer game -->

${header['User-Agent'] } <br/> <!--  Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0  -->

${initParam.info }<br/> <!-- hello -->

${cookie.JSESSIONID.value }<br/> <!-- 8EE8FA6AC2A02B1879AB13349A3BB63B  -->
</body>
</html>

EL操作Map有两种语法:
(1)map.key
(2)map[‘key’]

3 EL函数库

EL函数库是由JSTL提供的,但是JSTL并不能直接使用,使用JSTL需要先导入标签库。导入标签库的语法如下:

<%@ taglib prefix="fn" uri="http:java.sun.com/jsp/jstl/functions" %>

fn:contains():测试输入的字符串是否包含指定的子串
fn:containsIgnoreCase():测试输入的字符串是否包含指定的子串,大小写不敏感
fn:endsWith():测试输入的字符串是否以指定的后缀结尾
fn:escapeXml():跳过可以作为XML标记的字符
fn:indexOf():返回指定字符串在输入字符串中出现的位置
fn:join():将数组中的元素合成一个字符串然后输出
fn:length():返回字符串长度
fn:replace():将输入字符串中指定的位置替换为指定的字符串然后返回
fn:split():将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回
fn:startsWith():测试输入字符串是否以指定的前缀开始
fn:substring():返回字符串的子集
fn:substringAfter():返回字符串在指定子串之后的子集
fn:substringBefore():返回字符串在指定子串之前的子集
fn:toLowerCase():将字符串中的字符转为小写
fn:toUpperCase():将字符串中的字符转为大写
fn:trim():移除首尾的空白符

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
${fn.toUpperCase("love") }<br/> <!-- LOVE -->
${fn.toLowerCase("LOVE") }<br/> <!-- love -->
${fn.contains("hello", "lo") }<br/> <!-- true -->
${fn.containsIgnoreCase("HELLO", "lo") }<br/> <!-- true -->
${fn.endsWith("Hello", "lo") }<br/> <!-- true -->
${fn.startsWith("HEllo", "HE") }<br/> <!-- true -->
</body>
</html>

4 EL自定义函数库

使用自定义函数库的步骤:
(1)写一个Java类,类中可以定义0-N个方法,但必须是static的,而且必须有返回值。

public static String fun() {
		return "hello";
}

(2)在WEB-INF目录下创建一个tld文件

<?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">
    
  <description>lks</description>
  <display-name>lks</display-name>
  <tlib-version>1.0</tlib-version>
  <short-name>hy</short-name>
  <uri>http://lks.org/hello/kls</uri>
  
  <function>
    <name>fun</name>
    <function-class>org.lks.test.Test</function-class>
    <function-signature>java.lang.String fun()</function-signature>
  </function>
  
</taglib>

(3)在JSP页面导入标签库
(4)在JSP页面中使用自定义的函数

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="hy" uri="/WEB-INF/tlds/myfun.tld" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
${hy.fun()}
</body>
</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章