In diesem Artikel werden hauptsächlich das Konzept, die Rolle und die Verwendung von EL-Ausdrücken in der JSP-Seitentechnologie in Java vorgestellt.
Konzepte
Expression Language, oder EL-Ausdruck, kurz EL, ist eine spezielle Allzweck-Programmiersprache in Java, die von JavaScript und XPath entlehnt ist. Seine Hauptfunktion besteht darin, Java-Webanwendungen in Webseiten (z. B. JSP) einzubetten, um auf den Kontext der Seite und der Objekte in verschiedenen Bereichen zuzugreifen, die Werte von Objektattributen abzurufen oder einfache Berechnungen oder Beurteilungsvorgänge durchzuführen. Wenn EL bestimmte Daten erhält, wird der Datentyp automatisch konvertiert.
Hauptfunktionen:
1) Daten abrufen
EL-Ausdruck wird hauptsächlich zum Ersetzen von Skriptausdrücken in JSP-Seitenformeln verwendet <%= %> zum Abrufen von Java-Objekten und zum Abrufen von Daten von verschiedenen Arten von Webdomänen. (Objekte in einer bestimmten Webdomäne, Zugriff auf Javabean-Attribute, Zugriff auf Listensammlungen, Zugriff auf Kartensammlungen, Zugriff auf Arrays)
2) Operationen ausführen
EL-Ausdrucksformeln können verwendet werden Führen Sie einige grundlegende relationale Operationen, logische Operationen und arithmetische Operationen auf JSP-Seiten aus, um einige einfache logische Operationen auf JSP-Seiten abzuschließen. ${user==null}
3) Erhalten Sie allgemeine Objekte in der Webentwicklung EL
Der Ausdruck definiert einige implizite Objekte, die Webentwicklung Menschen können Erhalten Sie problemlos Verweise auf gängige Objekte im Web und erhalten Sie die Daten in diesen Objekten.
4) Aufrufen von Java-Methoden
Mit dem EL-Ausdruck können Benutzer benutzerdefinierte EL-Funktionen entwickeln, um Methoden von Java-Klassen über EL-Ausdrücke in JSP-Seiten aufzurufen.
Hinweis: <%@ pageisELIgnored=”true” %>
gibt an, ob die EL-Sprache deaktiviert werden soll. TRUE bedeutet, dass die EL-Sprache in JSP2.0 standardmäßig nicht aktiviert ist 🎜> 2. Syntax
beginnt mit „${“ und endet mit „}“:
${EL表达式}
Beispiel:
3. Fetch-Operatoren
${ str } //输出字符串变量str的值 ${ 1 + 2 } //输出1+2的结果 ${ user.name} //输出user对象的name属性 访问对象user的getName()方法以得到name成员的值。 ${user[“name”] } //同上 ${ sessionScope[“user”].name } //同上 ${list[0]} //访问list对象的第一项。 ${map[“key”]} //访问map指定键的值。
EL bietet zwei Operatoren: . und [ ], um auf Daten zuzugreifen:
Ein Zuordnungseintrag wie: ${user.name}[ ] kann auf die Elemente einer Sammlung oder eines Arrays zugreifen und kann auch auf die Eigenschaften einer Bean zugreifen. Zum Beispiel: ${ arr[0].name}Ähnlichkeiten und Unterschiede:
Gleiches: kann verwendet werden, um auf die Eigenschaften des Objekts zuzugreifen
Unterschied: Wenn der Attributname, auf den zugegriffen wird, Sonderzeichen wie ? oder - und andere Nicht-Buchstaben- oder Zahlensymbole enthält, müssen Sie [] verwenden, z > 4. Operatoren:● Es gibt fünf arithmetische Operatoren: +, -, *,/oder p, % oder mod user.my-name应{user[“my-name”]}
● Es gibt drei weitere Operatoren: Leerer Operator, bedingter Operator, ()-Operator
5 JSP EL unterstützt die in der folgenden Tabelle aufgeführten impliziten Objekte: Sie können diese Objekte in Ausdrücken wie Variablen verwenden.Gruppieren Sie nach Funktion wie folgt:
1) Zugriffsparameterwert:
param: Der entsprechende einzelne Anforderungsparametername Wert erhalten werden kann. Beispiel: $(param.name) entspricht request.getParameter (name).
paramValues: Das entsprechende String-Array kann entsprechend dem Parameternamen abgerufen werden. Beispiel: ${paramvalues.name) entspricht request.getParamterValues(name). Hinweis: Das param-Objekt gibt eine einzelne Zeichenfolge zurück, während das paramValues-Objekt ein Array von Zeichenfolgen zurückgibt.
2) Zugriff auf Header-Informationen
Header: Sie können den entsprechenden Einzelstring-Header-Wert in den Anforderungs-Header-Informationen abrufen. Der Ausdruck header.name entspricht request.getHeader(name). Zum Beispiel {header[„user-agent“]}. Der User-Agent-Header kann ausgedruckt werden.
headerValues: Der Name des Anforderungsheaders kann einem numerischen Array zugeordnet werden. Beispielsweise entspricht ${headerValues.name} request.getHeaderValues(name).
Hinweis: Das Header-Objekt gibt einen einzelnen Wert zurück, während headerValues ein String-Array zurückgibt.
3) Greifen Sie auf weitere Details zur Benutzeranfrage oder Seite zu pageContext:pageContext.request | {pageContext.session} |Sitzungsobjekt abrufen
pageContext.request.queryString|Parameterzeichenfolge der Anfrage abrufen {pageContext.request.requestURL} |URL der Anfrage abrufen, jedoch ohne Parameter Zeichenfolge der AnfragepageContext.request.contextPath|Der Name der bereitgestellten Webanwendung {pageContext.request.method}|Holen Sie sich die HTTP-Methode (GET, POST)
pageContext.request.protocol |Das verwendete Protokoll abrufen ( HTTP/1.1, HTTP/1.0){pageContext.request.remoteUser} |Benutzernamen abrufen pageContext.request.remoteAddr|取得用户的IP地址{pageContext.session.new} |判断session是否为新的,所谓新的session,表示刚由 server产生而client尚未使用 的 pageContext.session.id|取得session的ID{pageContext.servletContext.serverInfo}|取得主机端的服务信息 4)访问不同作用域的变量,如 Web 上下文、会话、请求、页面: pageScope :取得页面范围的值 如用 pageScope.objectName访问一个JSP中页面范围的对象,还可以使用{pageScope.objectName.attributeName} 访问对象的属性。 requestScope:取得请求范围的变量值 该对象允许访问请求对象的属性。如用 requestScope.objectName访问一个JSP请求范围的对象,还可以使用{requestScope.objectName.attributeName} 访问对象的属性。 sessionScope:取得会话范围的变量值 该对象允许访问会话对象的属性。如:$sessionScope.name} applicationScope:取得应用程序范围的变量值 该隐式对象允许访问应用程序范围的对象 5) 访问Cookie中的值 如要取得cookie中有一个设定名称为username的值,可以使用${cookie.username} 来取得它。 六、使用sun提供的标准 EL函数库 由于在JSP页面中显示数据时,经常需要对显示的字符串进行处理,SUN公司针对于一些常见处理定义了一套EL函数库供开发者使用。 这些EL函数在JSTL开发包中进行描述,因此在JSP页面中使用SUN公司的EL函数库,需要导入JSTL开发包,并在页面中导入EL函数库。 使用EL函数库 1) 导入 jstl jar包 2) 在相应的jsp页面添加引用 函数库详细介绍 String toUpperCase(String input):把字符串参数转换成大写,并返回 String toLowerCase(String input):把字符串参数转换成小写,并返回 int indexOf(String input, String substring):返回input中substring出现的索引位置 boolean contains(String input, String substring):查看input中是否包含substring,包含返回true,否则返回false; boolean containsIgnoreCase(String input, String substring):在忽略大小写的情况下,查看input中是否包含substring,包含返回true,否则返回false boolean startsWith(String input, String substring):判断input是否是以substring为前缀,如果是就返回true,否则就返回false boolean endsWith(String input, String substring):判断input是否是以substring为后缀,如果是就返回true,否则就返回false String substring(String input, int beginIndex, int endIndex):以beginIndex为开始值,endIndex为结束值,在input上截取子串 String substringAfter(String input, String substring):获取input中,substring所在位置后面的字符串 substringBefore(String input, String substring):获取input中,substring所在位置前面的字符串 String escapeXml(String input):把input中“<”、“>“、”&“、”'“、“””进行转义; String trim(String input):去除input中的前后空格; String replace(String input, String substringBefore, String substringAfter):将input中的substringBefore替换成substringAfter; String[] split(String input, String delimiters):以delimiters为标识分割input,返回一个字符串数组; int length(Object obj):可以获取字符串、数组、各种集合的长度; String join(String array[], String separator):将array数组中的元素以separator连接起来,返回一个字符串 七、EL调用自定义函数 (调用普通类的静态方法) EL很强大,除了使用SUN提供的标准EL函数库外,还可以调用自定义函数: ● EL表达式语法允许开发人员开发自定义函数,以调用Java类的方法。语法:${prefix:method(params)} ● 在EL表达式中调用的只能是Java类的静态方法,这个Java类的静态方法需要在TLD文件中描述,才可以被EL表达式调用。 ● EL自定义函数用于扩展EL表达式的功能,可以让EL表达式完成普通Java程序代码所能完成的功能。 EL Function开发步骤 只要实现以下三个步骤就可以在静态页面中用${prefix:method(params)} 调用自定义function了 编写一个Java类的静态方法 编写标签库描述符(tld)文件,在tld文件中描述自定义函数。 在JSP页面中导入和使用自定义函数 下面来个案例: 1)编写一个Java类的静态方法 2)编写标签库描述符(tld) 3)在web.xml中指定tld文件的位置(这步可以省略,因为应用会自动找到 /WEB-INF/下的tld文件) 4)在JSP页面中导入和使用自定义函数 运行截图 Das obige ist der detaillierte Inhalt vonTeilen Sie eine Zusammenfassung der EL-Ausdrücke in der JSP-Seitentechnologie. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*" %>
<!--导入需要使用taglib指令 -->
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>el function demo</title>
</head>
<body>
<%
String[] strs = {"a","b","c"};//定义一个字符数组
List list = new ArrayList();//定义一个list集合
list.add("a");//向集合中添加一个字符
pageContext.setAttribute("arr", strs);//将字符数据以arr的名字保存在page域中
pageContext.setAttribute("list", list);//将list集合以list的名字保存在page域中
%>
${fn:length(arr) }<br/><!--3-->
${fn:length(list) }<br/><!--1-->
${fn:toLowerCase("Hello") }<br/> <!-- hello -->
${fn:toUpperCase("Hello") }<br/> <!-- HELLO -->
${fn:contains("abc", "a")}<br/><!-- true -->
${fn:containsIgnoreCase("abc", "Ab")}<br/><!-- true -->
${fn:contains(arr, "a")}<br/><!-- true -->
${fn:containsIgnoreCase(list, "A")}<br/><!-- true -->
${fn:endsWith("Hello.java", ".java")}<br/><!-- true -->
${fn:startsWith("Hello.java", "Hell")}<br/><!-- true -->
${fn:indexOf("Hello-World", "-")}<br/><!-- 5 -->
${fn:join(arr, ";")}<br/><!-- a;b;c -->
${fn:replace("Hello-World", "-", "+")}<br/><!-- Hello+World -->
${fn:join(fn:split("a;b;c;", ";"), "-")}<br/><!-- a-b-c -->
${fn:substring("0123456789", 6, 9)}<br/><!-- 678 -->
${fn:substring("0123456789", 5, -1)}<br/><!-- 56789 -->
${fn:substringAfter("Hello-World", "-")}<br/><!-- World -->
${fn:substringBefore("Hello-World", "-")}<br/><!-- Hello -->
${fn:trim(" a b c ")}<br/><!-- a b c -->
${fn:escapeXml("<html></html>")}<br/> <!-- <html></html> -->
</body>
</html>
public class GetMax {
public static int togetMax(int a, int b){
return a>b?a:b;
}
}
<?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>mytaglib</short-name><!--这个名字可以随便取,尽量与文件名相同,这样我们知道文件在哪儿 并与prefix对应-->
<uri>http://localhost:8080/springmvc-1</uri><!-- 这个地址是随便取得。到时候jsp页面引入这个地址 -->
<function><!-- 定义函数 -->
<name>toGetMax</name>
<function-class>elfunction.GetMax</function-class><!-- 定义函数的类全名称 -->
<function-signature>int toGetMax(int,int)</function-signature>
<!--说明 返回值类型 函数名 以及 参数类型 -->
</function>
</taglib>
<jsp-config>
<taglib>
<!-- 此处uri可以自己随便定义,但后面用时一定与这里一样 -->
<taglib-uri>
http://localhost:8080/springmvc-1
</taglib-uri>
<!-- tld文件的路径 -->
<taglib-location>
/WEB-INF/tags/mytaglib.tld
</taglib-location>
</taglib>
</jsp-config>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://localhost:8080/springmvc-1" prefix="mytaglib"%>
<!-- prefix 是前缀的意思,应与mytaglib.tld中的<short-name>对应 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>custom EL function test</title>
</head>
<body>
1和2求最大值 = ${mytaglib:toGetMax(1,2)}
</body>
</html>