الاسم الكامل لـ EL هو لغة التعبير (لغة التعبير) ، والتي تعد واحدة من أهم ميزات JSP2.0. يمكن استخدام تعبيرات EL للوصول إلى البيانات في التطبيق لإزالة البرامج النصية Java في صفحة JSP.
بناء جملة التعبير EL
التعبير على سبيل المثال ، يمكن كتابة x+y كـ {x+y}
الكلمات الرئيسية في EL
فيما يلي الكلمات الرئيسية في EL ، والتي لا يمكن استخدامها كمعرفات:
و EQ ، GT ، true ، extryof ، أو le ، false ، فارغة ، لا ، lt ، ge ، null ، div ، mod
1. مقدمة في تعبيرات EL
اسم EL الكامل هو لغة التعبير. وظائف EL الرئيسية:
1. الحصول على البيانات
تُستخدم تعبيرات EL بشكل أساسي لاستبدال تعبيرات البرنامج النصي في صفحات JSP لاسترداد كائنات Java والحصول على بيانات من أنواع مختلفة من نطاقات الويب. (الكائنات في مجال ويب معين ، وصول خصائص Javabean ، وجمع قائمة الوصول ، وجمع خريطة الوصول ، ومصفوفة الوصول)
2. أداء العمليات
باستخدام تعبيرات EL ، يمكنك تنفيذ بعض العمليات العلائقية الأساسية والعمليات المنطقية والعمليات الحسابية في صفحة JSP لإكمال بعض العمليات المنطقية البسيطة في صفحة JSP. $ {user == null}
3. الحصول على كائنات شائعة لتطوير الويب
تحدد تعبيرات EL بعض الأشياء الضمنية. باستخدام هذه الكائنات الضمنية ، يمكن لمطوري الويب الحصول بسهولة على إشارات إلى كائنات الويب الشائعة الاستخدام ، وبالتالي الحصول على بيانات في هذه الكائنات.
4. اتصل على أساليب جافا
تسمح تعبيرات EL للمستخدمين بتطوير وظائف EL المخصصة لاتصال طرق فئات Java من خلال تعبيرات EL في صفحات JSP.
1.1. الحصول على البيانات
استخدم EL Expression للحصول على بناء جملة البيانات: "$ {Identifier}"
عند تنفيذ عبارة EL Expression ، سيتم استدعاء طريقة pagecontext.findattribute ، باستخدام المعرف باعتباره الكلمة الرئيسية للعثور على الكائن المقابل من الحقول الأربعة للصفحة والطلب والجلسة والتطبيق. إذا تم العثور عليه ، فسيعود الكائن المقابل. إذا لم يتم العثور عليها ، فسيعود "" (لاحظ أنه ليس فارغًا ، ولكن سلسلة فارغة).
يمكن أن تحصل تعبيرات EL بسهولة على خصائص javabean ، أو الحصول على بيانات المصفوفات والمجموعات وأنواع الخرائط.
مثال على التعبير EL للحصول على البيانات:
<٪@page language = "java" import = "java.util. import = "me.gacl.domain.address" ٪> <! doctype html> <html> <head> <title> el expression يحصل على البيانات </title> </head> <body> <٪ request.setTubute ("name" ، "wold wolf") ؛ ٪> $ {name} مكافئ لـ pagecontext. البيانات: $ {name} <hr> <!-في صفحة JSP ، استخدم EL Expression للحصول على خصائص Bean-> <٪ person p = new person () ؛ p.setage () ؛ request.setattribute ("الشخص" ، p) ؛ ٪> استخدم التعبير EL للحصول على خصائص الفول: $ {person.age} <hr> <hr> . . . . . . . . سمات-> <٪ شخص شخص = شخص جديد () ؛ عنوان العنوان = عنوان جديد () ؛ person.setAddress (العنوان) ؛ request.setattribute ("شخص" ، شخص) ؛ ٪> $ {person.address.name} <hr> <!-في صفحة JSP ، استخدم EL Expression للحصول على البيانات المحددة في مجموعة القائمة-> <٪ PINE P = canglang ") ؛ person p = new person () ؛ p.setName (" White Tiger God Emperor ") ؛ قائمة <Person> list = new ArrayList <Person> () ؛ list.add (p) ؛ list.add (p) ؛ request.settribute (" list "، list) ؛ -> <c: foreach var = "person" عناصر = "$ {list}"> $ {person.name} </c: foreach> <hr> <!-في صفحة JSP ، استخدم التعبير EL للحصول على بيانات مجموعة MAP-> <٪ خريطة <string ، string> map = new = new. LinkedHashMap <string ، string> () ؛ map.put ("a" ، "aaaaxxx") ؛ map.put ("b" ، "bbbb") ؛ map.put ("c" ، "cccc") ؛ map.put ("" "" "AAAA) ؛ request.setattribute ( -> $ {map.c} $ {map ["]} <hr> <!-تكرار مجموعة الخريطة-> <c: foreach var =" me "عناصر =" $ {map} "> $ {me.key} = $ {me.value} <br/> </c: for each> تأثير العملية على النحو التالي:
1.2. تنفيذ العمليات
بناء الجملة: $ {Operation Expression} ، يدعم EL Expression المشغلين التاليين:
1. العوامل العلائقية
2. العوامل المنطقية:
3. عامل فارغ: تحقق مما إذا كان الكائن فارغًا (فارغًا)
4. التعبير الثنائي: $ {user! = null؟ user.name: ""}
5. [] و. المشغلين
مثال على أداء العمليات باستخدام تعبيرات EL:
<٪@page language = "java" import = "java.util. html> <html> <head> <title> El Expression Operator </title> </head> <body> <h> El Expression يؤدي أربع عمليات: </h> الإضافة العملية: $ {+} <br/> عملية Subtraction: $ {-} <br/> عملية متعددة: $ {*} العمليات: </h> <٪-$ {user == null} و $ {user eq null} ؛ ما يعادل-٪> $ {user == null} <br/> $ {user eq null} <br/> $ {user eq null} <br/> يستخدم EL Exprative المشغل الفارغ للتحقق مما إذا كان الكائن فارغًا (فارغ) </h> <٪ قائمة <string> ArrayList <String> () ؛ list.add ("gacl") ؛ list.add ("XDP") ؛ request.setAttribute ("list" ، list) ؛ ٪> <٪-استخدم المشغل الفارغ للتحقق مما إذا كان الكائن فارغًا (str)-٪> <c: if test = "$ {! list)}" العناصر = "$ {list}"> $ {str} <br/> </c: foreach> </c: if> <br/> ٪ list <string> leghlist = null ؛ ٪> <٪-استخدم المشغل الفارغ للتحقق مما إذا كانت الكائنات فارغة (vare)-٪> <c: إذا test = "$ {فارغة (قائمة فارغة)}" تُستخدم التعبيرات في EL Expressions </h> <٪ session.setAttribute ("المستخدم" ، مستخدم جديد ("Lonely Ganglang")) ؛ ٪> $ {user == null؟ "عذرًا ، لم يتم تسجيل الدخول إلى": user.username} <br/> <h> el data data echo </h> <٪ user user = new user () ؛ user.setgender ("male") ؛ // data echo request.setattribute ("user" ، user) ؛ $ {user.gender == 'male'؟ '' checked ':' '}> male <input type = "radio" name = "gender" value = "permet" $ {user.gender ==' female '؟نتائج التشغيل كما يلي:
1.3. الحصول على كائنات شائعة لتطوير الويب
لغة التعبير EL تحدد 11 كائنات ضمنية. يمكن استخدام هذه الكائنات الضمنية بسهولة الحصول على بعض الكائنات الشائعة في تطوير الويب وقراءة بيانات هذه الكائنات.
بناء الجملة: $ {اسم كائن ضمني}: احصل على مرجع إلى الكائن
اختبار 11 كائنات ضمنية في تعبيرات EL:
<٪@ page language = "java" import = "java.util.*" pageencoding = "UTF-" ٪> <! كائن </title> </head> <body> <br/> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //map٪> $ {pagescope.name} <br/> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //map٪> $ {sessionscope.user} <br/> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- غالبًا ما يتم استخدام هذا التعبير على أصداء البيانات -> <form action = "$ {pagecontext.request.contextpath}/servlet/resterservlet" method = "post"> <input type = "text" name = "username" value = "$ {param.username}"> <input type = "submit" value = "register"> </form> <br/> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ http: // localhost: /javaweb_el_study_/eldemo.jsp؟ like = aaa & like = bb -> $ {paramvalues. like []} $ {paramvalues. like []} <br/>---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- , for مثال على تقبل الترميز ، headervalues ["قبول الترميز"]-٪> $ {header ["access-encoding"]} <br/> -------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ كائن MAP الذي يخزن جميع حقول رأس طلب HTTP. لمعلمة طلب ، فإنه يعيد سلسلة []. على سبيل المثال: headervalues.accept إرجاع سلسلة []. headervalues.accept [] يأخذ القيمة الأولى في المصفوفة-٪> $ {headervalues.accept []} <br/> <٪-$ {headervalues.accept-ending} عند الكتابة بهذه الطريقة ، سيتم الإبلاغ عن خطأ عند اختبار التحفيز. إذا كان هناك "-" في الرأس ، مثل التشفير القبول ، فإن التحميلات ["قبول"] headervalues ["قبول الترميز"] [] إرجاع سلسلة []. يخرج التحفيز ["قبول الترميز"] [] [] القيمة الأولى في Array-٪> $ {headervalues ["قبول الترميز"]] -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -> $ {cookie.jsessionid.value} // حفظ الخريطة للجميع ملفات تعريف الارتباط <br/> -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- تكوين معلمات التهيئة في ملف web.xml -> <context-param> <Param-name> xxx </param-name> <param-value> yyyy </parm-value> </sucked-param> <context-param> <Param-Name> root </param-name> <param-value>/javaweb_el_study _/param-val> </suge </sugent </sugent </sugent </sugent </sugent </sugent </sugent </sugent </sugent </sugent </sugent </sugent </sugent <s servletContext لحفظ معلمات التهيئة -٪> $ {initparam.xxx} <br/> $ {initparam.root} </body> </html> مدونة السجلات على النحو التالي:
package me.gacl.web.controller ؛ استيراد java.io.ioException ؛ استيراد javax.servlet.servletexception ؛ استيراد javax.servlet.http.httpservlet يمتد httpservlet {/*** طرق التعامل مع تسجيل المستخدم*/public void doget (httpservletrequest request ، httpservletresponse) يلقي servletexception ، ioexception {// ، استلام سلسلة المعلمة username = request.getParameter ("username") ؛ request.setattribute ("اسم المستخدم" ، اسم المستخدم) لتخزين اسم المستخدم في كائن الطلب* ومع ذلك ، في صفحة eldemo.jsp ، يمكنك استخدام $ {param.username} للحصول على قيمة اسم المستخدم في كائن الطلب*/request.getRequestDispatcher ("/eldemo.jsp"). طلب ، استجابة httpservletresponse) يلقي servletexception ، ioException {doge (طلب ، استجابة) ؛}} نتائج الاختبار كما يلي:
يلاحظ:
عند اختبار الرأس والرأس ، إذا كان هناك "-" في الرأس ، مثل الرسم القبول ، رأس ["قبول"] و headervalues ["القبول"]
عند اختبار ملفات تعريف الارتباط ، على سبيل المثال ، يأخذ $ {cookie.key} كائن ملف تعريف الارتباط. إذا قمت بالوصول إلى اسم وقيمة ملف تعريف الارتباط ، فيجب أن يكون لديك $ {cookie.key.name} أو $ {cookie.key.value}
1.4. استدعاء أساليب Java باستخدام EL
يتيح Syntax Expression Expression للمطورين تطوير وظائف مخصصة لاستدعاء طرق فئات Java. بناء الجملة: $ {prefix: method (params)}
الشيء الوحيد الذي يمكن استدعاؤه في تعبير EL هو الطريقة الثابتة لفئة Java. يجب وصف الطريقة الثابتة لفئة Java هذه في ملف TLD قبل أن يتم استدعاؤه بواسطة EL Expression.
تُستخدم وظائف EL المخصصة لتوسيع وظائف تعبيرات EL ، مما يتيح تعبيرات EL بإكمال الوظائف التي يمكن أن يكملها رمز برنامج JAVA العادي.
1.5. خطوات تطوير وظيفة EL
بشكل عام ، يتضمن تطوير وتطبيق وظائف EL المخصصة الخطوات الثلاث التالية:
1. اكتب طريقة ثابتة لفئة جافا
2. اكتب ملف واصف مكتبة العلامات (TLD) ووصف الوظائف المخصصة في ملف TLD.
3. استيراد واستخدام وظائف مخصصة في صفحة JSP
مثال: تطوير وظيفة EL للهروب من علامات HTML
1. اكتب فئة أداة معالجة HTML Escape ، وأضف طرقًا معالجة ثابتة للهروب من علامات HTML في فئة الأدوات ، على النحو التالي:
package me.gacl.util ؛/*** classname: htmlfilter* description: html class excarting tool class* author: lonely canglang* @date: --: Param Message Content to Esper* @Return Content بعد Escape*/ Public Static String Filter (رسالة سلسلة) {if (message == null) return (null) ؛ char content [] = new char [message.length ()] ؛ message.getChars (، message.length () ،) (المحتوى [i]) {case '<': result.append ("<") ؛ break ؛ case '>': result.append (">") ؛ case '&': result.append ("&") ؛ break ؛ case '"': result.append (" ") ؛ break ؛ default: result.append (content [i]) ؛}}}}2. اكتب ملف واصف مكتبة العلامات (TLD) في دليل Web-Inf ووصف الوظائف المخصصة في ملف TLD.
رمز Elfunction.tld كما يلي:
<؟ xml الإصدار = "." الترميز = "UTF-"؟> <إصدار taglib = "." xmlns = "http://java.sun.com/xml/ns/jee" web-jsptaglibrary __. -> <URI>/elfunction </uri> <!-<function> يتم استخدام العنصر لوصف وظيفة EL Custom-> <function> <specord> html tag tag escorting method </description> <!-<name> يتم استخدام عنصر الطفل لتحديد اسم el custom-> <same> مرشح </name> <!- -> <function-class> me.gacl.util.htmlfilter </function-class> <!-<signatureature> يتم استخدام عنصر الطفل لتحديد توقيع الطريقة الثابتة في فئة Java. يجب أن يشير توقيع الطريقة إلى نوع قيمة الإرجاع للطريقة ونوع كل معلمة ، ويتم فصل كل معلمة بواسطة فاصلة. -> <function-signature> java.lang.string filter (java.lang.string) </function-signature> </function> </aglib>
3. استيراد واستخدام وظائف مخصصة في صفحة JSP
<٪@ page language = "java" import = "java.util. el </title> </head> <body> <٪-أساليب تصفية الاتصال باستخدام EL-٪> $ {fn: filter ("<a href = '' 'diAnd </a>")} </body> </tml> نتائج التشغيل كما يلي:
1.6. أشياء يجب ملاحظتها عند تطوير وظيفة EL
بعد كتابة ملف وصف مكتبة العلامات ، تحتاج إلى وضعه في أي دليل فرعي باستثناء الفئات وأدلة LIB في دليل <bolling>/web-Inf أو في دليل الويب.
يستخدم عنصر <Uri> في ملف TLD URI الذي يحدد ملف TLD. يجب استخدام هذا URI لتقديم ملف وصف مكتبة العلامات في ملف JSP.
يتم استخدام عنصر <function> لوصف وظيفة EL المخصصة ، حيث:
يتم استخدام عنصر الطفل <name> لتحديد اسم وظيفة EL Custom.
يتم استخدام عنصر الطفل <function-class> لتحديد اسم فئة Java الكامل.
يتم استخدام عنصر الطفل <function-signature> لتحديد توقيع طريقة ثابتة في فئة Java. يجب أن يشير توقيع الطريقة إلى نوع قيمة الإرجاع للطريقة ونوع كل معلمة ، ويتم فصل كل معلمة بواسطة فاصلة.
1.7. احتياطات EL
تعبيرات EL هي تقنية في مواصفات JSP 2.0. لذلك ، إذا كنت ترغب في تحليل تعبيرات EL بشكل صحيح ، فأنت بحاجة إلى استخدام تقنية Servlet2.4/JSP2.0.
ملاحظة: لا يمكن لبعض خوادم Tomcat استخدام تعبيرات EL
(1) الترقية إلى tomcat6
(2) أضف <٪@ page iselignored = "false" ٪> إلى JSP
1.8. تعبيرات EL تحتفظ بالكلمات الرئيسية
تعني ما يسمى الكلمة المحجوزة أنه عند تسمية المتغيرات ، يجب تجنب الأسماء المذكورة أعلاه لتجنب الأخطاء أثناء تجميع البرنامج. هناك العديد من الملخصات حول محتوى تعبيرات EL.
يوفر المحتوى أعلاه مقدمة مفصلة للمعرفة ذات الصلة بتعبيرات Javaweb El من خلال أمثلة. آمل أن يكون ذلك مفيدًا لك. في الوقت نفسه ، أود أن أشكرك كثيرًا على دعمكم لموقع Wulin.com!