ชื่อเต็มของ EL คือภาษานิพจน์ (ภาษานิพจน์) ซึ่งเป็นหนึ่งในคุณสมบัติที่สำคัญที่สุดของ JSP2.0 EL Expressions สามารถใช้ในการเข้าถึงข้อมูลในแอปพลิเคชันเพื่อกำจัดสคริปต์ Java ในหน้า JSP
ไวยากรณ์ของ EL Expression
ตัวอย่างเช่น x+y สามารถเขียนเป็น {x+y}
คำหลักใน EL
ต่อไปนี้เป็นคำหลักใน EL ซึ่งไม่สามารถใช้เป็นตัวระบุได้:
และ, eq, gt, true, instanceof, or, le, false, ว่างเปล่า, ไม่, lt, ge, null, div, mod
1. บทนำสู่ El Expressions
ชื่อเต็มของ El คือภาษานิพจน์ ฟังก์ชั่นหลักของ El:
1. รับข้อมูล
EL Expressions ส่วนใหญ่จะใช้เพื่อแทนที่การแสดงออกของสคริปต์ในหน้า JSP เพื่อดึงวัตถุ Java และรับข้อมูลจากโดเมนเว็บประเภทต่างๆ (วัตถุในโดเมนเว็บที่แน่นอนการเข้าถึงคุณสมบัติ Javabean, การรวบรวมรายการการเข้าถึง, การรวบรวมแผนที่การเข้าถึง, การเข้าถึงอาร์เรย์)
2. ดำเนินการ
การใช้ EL Expressions คุณสามารถดำเนินการเชิงสัมพันธ์ขั้นพื้นฐานการดำเนินการเชิงตรรกะและการดำเนินการทางคณิตศาสตร์ในหน้า JSP เพื่อดำเนินการเชิงตรรกะอย่างง่ายในหน้า JSP $ {user == null}
3. รับวัตถุทั่วไปสำหรับการพัฒนาเว็บ
EL Expressions กำหนดวัตถุโดยนัยบางอย่าง การใช้วัตถุโดยนัยเหล่านี้นักพัฒนาเว็บสามารถรับการอ้างอิงไปยังวัตถุเว็บที่ใช้กันทั่วไปได้อย่างง่ายดายซึ่งจะได้รับข้อมูลในวัตถุเหล่านี้
4. โทรหาวิธี Java
EL Expressions อนุญาตให้ผู้ใช้พัฒนาฟังก์ชั่น EL ที่กำหนดเองเพื่อเรียกใช้วิธีการของคลาส Java ผ่าน EL Expressions ในหน้า JSP
1.1. รับข้อมูล
ใช้นิพจน์ EL เพื่อรับไวยากรณ์ข้อมูล: "$ {identifier}"
เมื่อมีการดำเนินการคำสั่ง EL Expression วิธีการ pageContext.findattribute จะถูกเรียกใช้โดยใช้ตัวระบุเป็นคำหลักเพื่อค้นหาวัตถุที่เกี่ยวข้องจากสี่ฟิลด์ของหน้าการร้องขอเซสชันและแอปพลิเคชัน หากพบมันจะส่งคืนวัตถุที่เกี่ยวข้อง หากไม่พบมันจะกลับมา "" (โปรดทราบว่ามันไม่ได้เป็นโมฆะ แต่เป็นสตริงที่ว่างเปล่า)
EL Expressions สามารถรับคุณสมบัติ Javabean ได้อย่างง่ายดายหรือรับข้อมูลของอาร์เรย์คอลเลกชันและประเภทแผนที่
ตัวอย่างของการแสดงออก EL เพื่อรับข้อมูล:
<%@page language = "java" import = "java.util.*" pageencoding = "utf-"%> <%@taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c"%> นำเข้า = "me.gacl.domain.address"%> <! doctype html> <html> <head> <title> นิพจน์ EL ได้รับข้อมูล </title> </head> <body> <%request.setAttribute ("Name", "Lonely Wolf");%> <%-$} ข้อมูล: $ {ชื่อ} <hr> <!-ในหน้า jsp ใช้นิพจน์ El เพื่อรับคุณสมบัติของถั่ว-> <% บุคคล p = บุคคลใหม่ (); p.setage (); request.setAttribute ("บุคคล", p); - - - - - - - - คุณลักษณะของ-> <% บุคคล = บุคคลใหม่ (); ที่อยู่ = ที่อยู่ใหม่ (); person.setAddress (ที่อยู่); request.setAttribute ("บุคคล", บุคคล);%> $ {person.address.name} <hr> <! canglang "); บุคคล p = บุคคลใหม่ (); p.setName (" White Tiger God Emperor "); รายการ <person> list = arraylist ใหม่ <person> (); list.add (p); list.add (p); request.setAttribute (" รายการ ", รายการ); -> <c: foreach var = "person" items = "$ {list}"> $ {person.name} </c: foreach> <hr> <!-ในหน้า jsp ใช้นิพจน์ El เพื่อรับข้อมูลของคอลเลกชันแผนที่-> <% แผนที่ <สตริง linkedHashMap <string, string> (); map.put ("a", "aaaaxxx"); map.put ("b", "bbbb"); map.put ("c", "cccc"); map.put ("" aaaa "); -> $ {map.c} $ {map ["" "]} <hr> <!-คอลเลกชันแผนที่ซ้ำ-> <c: foreach var =" me "items =" $ {map} "> $ {me.key} = $ {me.value} <br/> เอฟเฟกต์การดำเนินการมีดังนี้:
1.2. ดำเนินการ
ไวยากรณ์: $ {Expression Operation}, EL Expression รองรับตัวดำเนินการต่อไปนี้:
1. ผู้ประกอบการเชิงสัมพันธ์
2. ตัวดำเนินการเชิงตรรกะ:
3. ตัวดำเนินการว่าง: ตรวจสอบว่าวัตถุนั้นเป็นโมฆะ (ว่าง)
4. นิพจน์ไบนารี: $ {user! = null? user.name: ""}
5. [] และ ผู้ประกอบการ
ตัวอย่างการดำเนินการโดยใช้ EL Expressions:
<%@page language = "java" import = "java.util.*" pageencoding = "utf-"%> <%@taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c"%> html> <html> <head> <title> ตัวดำเนินการ EL Expression </title> </head> <body> <h> EL Expression ดำเนินการสี่การดำเนินการ: </h> การดำเนินการเพิ่มเติม: $ {+} <br/> การลบการดำเนินการ: $ {-} <br/> การดำเนินการหลายครั้ง: $ {*} <bbr การดำเนินงาน: </h> <%-$ {user == null} และ $ {ผู้ใช้ eq null}; เทียบเท่า-%> $ {user == null} <br/> $ {ผู้ใช้ eq null} <br/> $ {ผู้ใช้ eq null} <br/> นิพจน์ EL ใช้ตัวดำเนินการว่างเพื่อตรวจสอบว่าวัตถุนั้นเป็นโมฆะ arrayList <String> (); list.add ("gacl"); list.add ("xdp"); request.setAttribute ("รายการ", รายการ);%> <%-ใช้ตัวดำเนินการว่างเพื่อตรวจสอบว่าวัตถุนั้นเป็นโมฆะ items = "$ {list}"> $ {str} <br/> </c: foreach> </c: ถ้า> <br/>%รายการ <String> emptylist = null;%> <%-ใช้ตัวดำเนินการว่างเพื่อตรวจสอบว่าวัตถุนั้นเป็นโมฆะหรือไม่ ดู </c: ถ้า> <br/> <h> นิพจน์ไบนารีถูกใช้ใน EL Expressions </h> <% session.setAttribute ("ผู้ใช้" ผู้ใช้ใหม่ ("Lonely Ganglang"));%> $ {user == null? "ขออภัยคุณไม่ได้ลงชื่อเข้าใช้": user.username} <br/> <h> ข้อมูลนิพจน์ EL ECHO </h> <% ผู้ใช้ผู้ใช้ = ผู้ใช้ใหม่ (); user.setGender ("ชาย"); // data echo request.setAttribute ("ผู้ใช้", ผู้ใช้); $ {user.gender == 'ชาย'? 'ตรวจสอบ': ''}> ชาย <อินพุตประเภท = "วิทยุ" ชื่อ = "เพศ" value = "หญิง" $ {user.gender == 'หญิง'?ผลการดำเนินการมีดังนี้:
1.3. รับวัตถุทั่วไปสำหรับการพัฒนาเว็บ
ภาษานิพจน์ EL กำหนด 11 วัตถุโดยนัย การใช้วัตถุโดยนัยเหล่านี้สามารถรับวัตถุทั่วไปบางอย่างในการพัฒนาเว็บและอ่านข้อมูลของวัตถุเหล่านี้ได้อย่างง่ายดาย
ไวยากรณ์: $ {ชื่อวัตถุโดยปริยาย}: รับการอ้างอิงไปยังวัตถุ
ทดสอบ 11 วัตถุโดยปริยายในนิพจน์ EL:
<%@ page language = "java" import = "java.util.*" pageencoding = "utf-"%> <! doctype html> <html> <head> <title> el โดยนัย วัตถุ </title> </head> <body> <br/> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - //map%>$ {pagescope.name} <br/> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - //map%>$ {sessionscope.user} <br/> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - นิพจน์นี้มักจะใช้กับ echoes data -> <form action = "$ {pageContext.request.contextpath}/servlet/registerServlet" method = "post"> <อินพุต type = "text" name = "username" value = "$ {param.username}"> <อินพุตประเภท = "ส่ง" value = "register"> </form> <br/> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - http: // localhost: /javaweb_el_study_/eldemo.jsp? เช่น = aaa & like = bb -> $ {paramvalues.like []} $ {paramvalues.like []}}} <br/> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ตัวอย่างการยอมรับการเข้ารหัส headervalues ["ยอมรับการเข้ารหัส"]-%> $ {ส่วนหัว ["ยอมรับการเข้ารหัส"]} <br/> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - วัตถุแผนที่ที่เก็บฟิลด์ส่วนหัวคำขอ HTTP ทั้งหมด สำหรับพารามิเตอร์คำขอจะส่งคืนสตริง [] อาร์เรย์ ตัวอย่างเช่น: headervalues.accept ส่งคืนสตริง [] อาร์เรย์ headervalues.accept [] นำค่าแรกออกมาในอาร์เรย์-%> $ {headervalues.accept []} <br/> <%-$ {headervalues.accept-encoding} เมื่อเขียนด้วยวิธีนี้จะมีการรายงานข้อผิดพลาดเมื่อทำการทดสอบ หากมี "-" ในส่วนหัวเช่นการเข้ารหัสการเข้ารหัส, headervalues ["ยอมรับการเข้ารหัส"] headervalues ["ยอมรับการเข้ารหัส"] [] ส่งคืนสตริง [] อาร์เรย์ headervalues ["ยอมรับการเข้ารหัส"] [] [] นำค่าแรกออกมาในไฟล์ Array-%> $ {headervalues ["Accept-encoding"] []} <br/> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - -> $ {cookie.jsessionid.value} // บันทึกแผนที่ทั้งหมด คุกกี้ <br/> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - กำหนดค่าพารามิเตอร์การเริ่มต้นในไฟล์ web.xml -> <บริบท-พารารัม> <param-name> xxx </param-name> <param-value> yyyy </param-value> </context-param> <dexting-param> <param-name> root </param-name> <param-value> พารามิเตอร์การเริ่มต้น -%> $ {initparam.xxx} <br/> $ {initparam.root} </body> </html> รหัสของ RegistERSERVLET มีดังนี้:
แพ็คเกจ me.gacl.web.controller; นำเข้า java.io.ioexception; นำเข้า Javax.servlet.servletexception; นำเข้า Javax.servlet.http.httpservlet; นำเข้า Javax.servlet.http.httpservletRequest; ขยาย httpservlet {/** วิธีการสำหรับการจัดการการลงทะเบียนผู้ใช้*/โมฆะสาธารณะ doget (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) โยน servletexception, ioexception {//, รับพารามิเตอร์สตริง request.setAttribute ("ชื่อผู้ใช้" ชื่อผู้ใช้) ในการจัดเก็บชื่อผู้ใช้ในวัตถุคำขอ* อย่างไรก็ตามในหน้า eldemo.jsp คุณสามารถใช้ $ {param.username} เพื่อรับค่าพารามิเตอร์ของผู้ใช้ในการร้องขอ คำขอ, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {doget (คำขอ, การตอบสนอง);}} ผลการทดสอบมีดังนี้:
สังเกต:
เมื่อทดสอบส่วนหัวและส่วนหัวหากมี "-" ในส่วนหัวเช่นการเข้ารหัสการเข้ารหัสส่วนหัว ["ยอมรับการเข้ารหัส"] และส่วนหัว ["ยอมรับการเข้ารหัส"]
เมื่อทดสอบคุกกี้ตัวอย่างเช่น $ {cookie.key} ใช้วัตถุคุกกี้ หากคุณเข้าถึงชื่อและค่าของคุกกี้คุณต้องมี $ {cookie.key.name} หรือ $ {cookie.key.value}
1.4. โทรหาวิธี Java โดยใช้ EL
EL Expression Syntax ช่วยให้นักพัฒนาพัฒนาฟังก์ชั่นที่กำหนดเองเพื่อเรียกใช้วิธีการของคลาส Java ไวยากรณ์: $ {คำนำหน้า: เมธอด (params)}
สิ่งเดียวที่สามารถเรียกได้ในนิพจน์ EL คือวิธีการคงที่ของคลาส Java วิธีการคงที่ของคลาส Java นี้จะต้องอธิบายไว้ในไฟล์ TLD ก่อนที่จะสามารถเรียกได้โดยนิพจน์ EL
ฟังก์ชั่นที่กำหนดเอง EL ใช้เพื่อขยายฟังก์ชั่นของ EL Expressions ช่วยให้ EL Expressions สามารถทำฟังก์ชั่นให้เสร็จสมบูรณ์ได้ว่ารหัสโปรแกรม Java ธรรมดาสามารถเสร็จสิ้นได้
1.5. ขั้นตอนการพัฒนาฟังก์ชั่น EL
โดยทั่วไปการพัฒนาและการประยุกต์ใช้ฟังก์ชั่นที่กำหนดเอง EL รวมถึงสามขั้นตอนต่อไปนี้:
1. เขียนวิธีการคงที่ของคลาส Java
2. เขียนไฟล์ TAG Library Descriptor (TLD) และอธิบายฟังก์ชั่นที่กำหนดเองในไฟล์ TLD
3. นำเข้าและใช้ฟังก์ชั่นที่กำหนดเองในหน้า JSP
ตัวอย่าง: การพัฒนาฟังก์ชั่น EL เพื่อหลบหนีแท็ก HTML
1. เขียนคลาสเครื่องมือประมวลผล HTML Escape และเพิ่มวิธีการประมวลผลแบบคงที่เพื่อหลบหนีแท็ก HTML ในคลาสเครื่องมือดังต่อไปนี้:
แพ็คเกจ me.gacl.util;/*** @classname: htmlfilter* @description: html การหลบหนีเครื่องมือการประมวลผลคลาส* @author: Lonely Canglang* @date: - Morning :: **/คลาสสาธารณะ htmlfilter {/*** @method: filter* @description เนื้อหาที่จะหลบหนี* @return เนื้อหาหลังจากหลบหนี*/ ตัวกรองสตริงคงที่สาธารณะ (ข้อความสตริง) {ถ้า (ข้อความ == null) return (null); เนื้อหาถ่าน [] = char ใหม่ [message.length ()]; message.get.getChars (, message.length (), เนื้อหา,); {case '<': result.append ("<"); break; case '>': result.append (">"); break; case '&': result.append ("&"); break; case '' ': result.append (""); break;2. เขียนไฟล์ TAG Library Descriptor (TLD) ในไดเรกทอรี Web-Inf และอธิบายฟังก์ชั่นที่กำหนดเองในไฟล์ TLD
รหัสของ elfunction.tld มีดังนี้:
<? xml version = "." encoding = "utf-"?> <taglib version = "." xmlns = "http://java.sun.com/xml/ns/jee" xmlns: xsi = "http://www.w.org//xmlschema-instance" xsi: schemalocation = "http://java.sun.com Web-jsptaglibrary __. xsd "> <tlib-version>. </tlib-version> <short-name> ฟังก์ชั่น el </short-name> <!-uri อ้างอิงสำหรับไลบรารีฟังก์ชั่น EL ที่กำหนดเองสามารถยกมาเช่นนี้ในหน้า JSP: < %@taglib uri ="/elfunction -> <uri>/elfunction </uri> <!-<function> องค์ประกอบถูกใช้เพื่ออธิบายฟังก์ชั่นที่กำหนดเอง EL-> <duction> <scription> วิธีการประมวลผลแท็ก HTML Escape </คำอธิบาย> <!-<name> องค์ประกอบเด็กใช้เพื่อระบุชื่อของ EL Custom Function-> <name> -> <function-class> me.gacl.util.htmlfilter </function-class> <!-<function-signature> องค์ประกอบเด็กใช้เพื่อระบุลายเซ็นของวิธีการคงที่ในคลาส Java ลายเซ็นวิธีการจะต้องระบุประเภทค่าส่งคืนของวิธีการและประเภทของแต่ละพารามิเตอร์และแต่ละพารามิเตอร์จะถูกคั่นด้วยเครื่องหมายจุลภาค -> <function-signature> java.lang.string ตัวกรอง (java.lang.string) </function-signature> </duccess> </taglib>
3. นำเข้าและใช้ฟังก์ชั่นที่กำหนดเองในหน้า JSP
<%@ page language = "java" import = "java.util.*" pageencoding = "utf-"%> <%-แนะนำไลบรารีฟังก์ชั่นที่กำหนดเอง El-%> <%@ taglib uri = "/elfunction El </title> </head> <body> <%-วิธีการโทรตัวกรองโดยใช้ EL-%> $ {fn: ตัวกรอง ("<a href = ''> diand </a>")} </body> </html> ผลการดำเนินการมีดังนี้:
1.6. สิ่งที่ควรทราบเมื่อพัฒนาฟังก์ชั่น EL
หลังจากเขียนไฟล์คำอธิบายแท็กไลบรารีคุณต้องวางไว้ในไดเรกทอรีย่อยใด ๆ ยกเว้นคลาสและไดเรกทอรี LIB ในไดเรกทอรี <เว็บแอปพลิเคชัน>/web-inf หรือในไดเรกทอรี Web-Inf
องค์ประกอบ <uri> ในไฟล์ TLD ใช้ URI ที่ระบุไฟล์ TLD URI นี้จำเป็นต้องใช้เพื่อแนะนำไฟล์คำอธิบายไลบรารีแท็กในไฟล์ JSP
องค์ประกอบ <Function> ใช้เพื่ออธิบายฟังก์ชันที่กำหนดเอง EL โดยที่:
องค์ประกอบของเด็ก <name> ใช้เพื่อระบุชื่อของฟังก์ชันที่กำหนดเอง EL
องค์ประกอบเด็ก <Function-Class> ใช้เพื่อระบุชื่อคลาส Java ที่สมบูรณ์
องค์ประกอบของเด็ก <ฟังก์ชั่น-signature> ใช้เพื่อระบุลายเซ็นของวิธีการคงที่ในคลาส Java ลายเซ็นวิธีการจะต้องระบุประเภทค่าส่งคืนของวิธีการและประเภทของแต่ละพารามิเตอร์และแต่ละพารามิเตอร์จะถูกคั่นด้วยเครื่องหมายจุลภาค
1.7. ข้อควรระวัง EL
EL Expressions เป็นเทคนิคในข้อกำหนด JSP 2.0 ดังนั้นหากคุณต้องการแยกวิเคราะห์การแสดงออกของ EL อย่างถูกต้องคุณต้องใช้เว็บเซิร์ฟเวอร์ที่รองรับเทคโนโลยี Servlet2.4/JSP2.0
หมายเหตุ: เซิร์ฟเวอร์ Tomcat บางตัวไม่สามารถใช้นิพจน์ EL
(1) อัปเกรดเป็น Tomcat6
(2) เพิ่ม < %@ page iselignored = "false" %> ถึง jsp
1.8. El Expressions ยังคงรักษาคำหลัก
คำที่เรียกว่าที่เรียกว่าหมายถึงเมื่อการตั้งชื่อตัวแปรควรหลีกเลี่ยงชื่อข้างต้นเพื่อหลีกเลี่ยงข้อผิดพลาดในระหว่างการรวบรวมโปรแกรม มีบทสรุปมากมายเกี่ยวกับเนื้อหาของ EL Expressions
เนื้อหาข้างต้นให้คำแนะนำโดยละเอียดเกี่ยวกับความรู้ที่เกี่ยวข้องของการแสดงออกของ Javaweb El ผ่านตัวอย่าง ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ ในเวลาเดียวกันฉันขอขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!