最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

EL調(diào)用Java方法_動力節(jié)點Java學(xué)院整理

 更新時間:2017年07月18日 11:07:44   作者:fjdingsd  
簡單來說,我們在一個類中的某個方法,可以使用EL進(jìn)行調(diào)用,這個能被EL表達(dá)式調(diào)用的方法稱之為EL函數(shù),但是這種方式必須滿足兩點要求,具體哪兩點,大家可以參考下本文

簡單來說,我們在一個類中的某個方法,可以使用EL進(jìn)行調(diào)用,這個能被EL表達(dá)式調(diào)用的方法稱之為EL函數(shù),但是這種方式必須滿足以下兩點要求:

 ?、?在EL表達(dá)式中調(diào)用的只能是Java類的靜態(tài)方法

  ② 這個Java類的靜態(tài)方法需要在我們另外在自定義的TLD文件中描述

  滿足以上兩點才能被EL表達(dá)式調(diào)用。

語法:  ${prefix:方法名(參數(shù)列表) } 

例1:使用EL函數(shù)來實現(xiàn)HTML語言的過濾轉(zhuǎn)義

  在web工程中自定義一個HTMLFilter類,同時定義一個靜態(tài)的filter方法:

 package com.bjpowernode.filter;
 public class HtmlFilter {
  public static String filter(String message) {
   if (message == null)
    return (null);
   char content[] = new char[message.length()];
   message.getChars(0, message.length(), content, 0);
   StringBuilder result = new StringBuilder(content.length + 50);
   for (int i = 0; i < content.length; i++) {
    switch (content[i]) {
    case '<':
     result.append("&lt;");
     break;
    case '>':
     result.append("&gt;");
     break;
    case '&':
     result.append("&amp;");
     break;
    case '"':
     result.append("&quot;");
     break;
    default:
     result.append(content[i]);
    }
   }
   return (result.toString());
  }
 }

  這個類中的filter方法能將HTML語言轉(zhuǎn)換為普通的字符串,當(dāng)然這個類和方法在Tomcat中也有示例,路徑為【Tomcat】--->【webapps】--->【examples】--->【W(wǎng)EB-INF】--->【classes】--->【utils】,找到HTMLFilter.java就是了?!?/p>

 

  好了我們已經(jīng)有靜態(tài)的方法了,現(xiàn)在需要在TLD文件中對這個方法進(jìn)行描述才能在JSP中使用。

  TLD文件需要在“WEB-INF”文件中創(chuàng)建和定義,在哪里找模板呢,依然可以到Tomcat中尋找。在【Tomcat】--->【webapps】--->【examples】--->【W(wǎng)EB-INF】--->【jsp2】中有一個“jsp2-example-taglib.tld”文件,我們就可以對這個文件復(fù)制其“首尾”啦。

  在web工程下建立“elfunction.tld”文件,從“jsp2-example-taglib.tld”文件模板中抄首抄尾,其中<function>標(biāo)簽也是我們需要的:

 <?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>A tag library exercising SimpleTag handlers.</description>
  <tlib-version>1.0</tlib-version>
  <short-name>SimpleTagLibrary</short-name>
  <uri>elfunction</uri>
  <function>
   <description>Converts Html to String</description>
   <name>filter</name>
   <function-class>com.bjpowernode.filter.HtmlFilter</function-class>
   <function-signature>java.lang.String filter( java.lang.String )</function-signature>
  </function>
 </taglib>

  在TLD文件中要對某Java靜態(tài)方法進(jìn)行描述最重要的就是要定義<function>標(biāo)簽,在<function>標(biāo)簽下,<description>只是對該方法的描述,不是必需的;<name>指定在JSP上使用該EL函數(shù)時應(yīng)該使用的標(biāo)簽名;<function-class>指定該方法所在的類,必需提供完整類名(包括包名);<function-signature>是方法簽名,就是對所使用的靜態(tài)方法的聲明,所有的參數(shù)都必需指定完整類名,包括返回值類型和參數(shù)列表類型。

  好了,接下來我們在JSP頁面中就可使用剛才定義好的EL函數(shù)了,當(dāng)然,首先我們應(yīng)該現(xiàn)在JSP上使用tablib指定導(dǎo)入標(biāo)簽庫,并定義好標(biāo)簽前綴(prefix):

 <%@ taglib uri="elfunction" prefix="elfn" %>

最后再在JSP頁面的主體中使用EL函數(shù):

 ${elfn:filter("<a href='www.baidu.com'>百度</a>") }

在瀏覽器中觀察: 

 

這樣,使用EL函數(shù)就將一個超鏈接過濾轉(zhuǎn)義成普通的文本了。

  通過上面的例子,使用EL函數(shù)似乎和自定義標(biāo)簽一樣,可以移除JSP中出現(xiàn)的Java代碼,但是EL函數(shù)比自定義標(biāo)簽的不足之處在于,EL函數(shù)只能移除與web無法的方法,無法移除與web有關(guān)的方法,比如某些方法中含有HttpServletRequest、HttpServletResponse等等這樣的對象,因為在定義靜態(tài)方法的時候,我們無法使用到這些web對象,這些web對象都是由Tomcat服務(wù)器返回這些接口的實例對象的,這都是服務(wù)器中低層封裝好的,我們平常使用靜態(tài)方法根本無法獲取,因此此時還是需要使用自定義標(biāo)簽的。 

  Sun公司也幫我們制作了一個函數(shù)庫,在這函數(shù)庫中封裝好了一些常用的EL函數(shù),平時我們可以先看看在這個函數(shù)庫中是否有滿足我們需求的EL函數(shù),如果沒有再像上面一樣自定義。

Sun公司定義的EL函數(shù)封裝和描述在JSTL標(biāo)簽庫中,因此在JSP頁面中使用這個EL函數(shù)庫時,應(yīng)該先導(dǎo)入JSTL開發(fā)包,并在該頁面中導(dǎo)入EL函數(shù)庫。如果是使用JavaEE5.0以上的,JSTL包會自動導(dǎo)入,可以在【Java EE 5 Libraries】庫中看到:  

在這個“jstl-1.2.jar”中,查看其“META-INF”文件,有一個“fn.tld”文件,這個就是Sun公司封裝在JSTL中的EL函數(shù)的TLD文件:  

我們可以點擊進(jìn)去看看,這個tld文件中封裝了所有Sun公司設(shè)計好的EL函數(shù),同時也提供了taglib指令的uri,和推薦前綴(prefix): 

 

那么我們在JSP頁面中導(dǎo)入tablib指令時只要這兩個信息即可:

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

這樣我們就可以在JSP頁面中使用Sun公司開發(fā)好的EL函數(shù)了。 

例2:   fn:toLowerCase函數(shù)

 ${fn:toLowerCase("AAA") }

輸出:aaa。

例3:      fn:length()函數(shù)

${fn:length("aaa") }

輸出:3 

例4:  fn:length函數(shù)

 <%
   request.setAttribute("arr", new String[5]);
  %>
  ${fn:length(arr) }

輸出:5

例5:使用JSTL與EL函數(shù)來遍歷集合

  需同時導(dǎo)入JSTL與EL的tablib指令:

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

在JSP主體中的代碼如下:

 <%
    ArrayList<String> list = new ArrayList<String>();
    list.add("Ding");
    list.add("LRR");
    request.setAttribute("list", list);
  %>
   
   <c:forEach var="i" begin="0" end="${fn:length(list)}">
    ${list[i] }  <br>
  </c:forEach>

在瀏覽器中觀察:  

例6:      fn:join函數(shù)

  fn:join函數(shù)第一個參數(shù)為字符串?dāng)?shù)組或集合,第二個參數(shù)為將該字符串?dāng)?shù)組或集合相連起來的分隔符。

 <%
   String[] arr = {"www","bjpowernode","com"};
   pageContext.setAttribute("arr", arr);
  %>  
 ${fn:join(arr,".") }

輸出:www.bjpowernode.com

  注:如果fn:join函數(shù)的第二個參數(shù)為空字符串“”,那么將會把所有元素直接相連。 

例7:    fn:contains函數(shù)

  fn:contains函數(shù)檢測一個字符串中是否包含指定的字符串,返回值為布爾類型。注意,fn:contains函數(shù)只能檢測字符串,不能以數(shù)組來檢測,如果第二個參數(shù)為空字符串“”,那么fn:contains函數(shù)總是返回true。

 ${fn:contains("fjdingsd","fj") }

輸出:true。

  注:fn:contains函數(shù)是大小寫敏感的,如果要忽略大小寫,請使用fn:containsIgnoreCase函數(shù)。

例8:  取出表單類型為checkbox的數(shù)據(jù)回顯

  模擬在表單提交失敗時,對于表單中類型為“checkbox”的表單項的數(shù)據(jù),可以使用EL函數(shù)從重新轉(zhuǎn)發(fā)回的request獲取數(shù)據(jù),經(jīng)過一定的處理,使該頁面中的表單項數(shù)據(jù)重新顯示:

 <%
    request.setAttribute("hobbies", new String[]{"sing","dance"});
  %>
  <input type="checkbox" name="hobbies" value="sing"
   ${fn:contains(fn:join(hobbies,""),"sing")?'checked':'' } >唱歌 <br>
  <input type="checkbox" name="hobbies" value="dance"
   ${fn:contains(fn:join(hobbies,""),"dance")?'checked':'' }>跳舞 <br>
  <input type="checkbox" name="hobbies" value="game"
  ${fn:contains(fn:join(hobbies,""),"game")?'checked':'' }>游戲 <br>
 <input type="checkbox" name="hobbies" value="movie" 
  ${fn:contains(fn:join(hobbies,""),"movie")?'checked':'' }>電影 <br>

在瀏覽器中觀察:

例9:   fn:escapeXml函數(shù)

  功能與例1相同,對HTML語言進(jìn)行過濾轉(zhuǎn)義成字符串。

 ${fn:escapeXml("<a href='www.baidu.com'>百度</a>") }

瀏覽器中觀察:

例10:自定義字符串連接的EL函數(shù)(因為在EL表達(dá)式中不支持使用”+”作為字符串的連接符)

  在一個類中定義字符串連接的靜態(tài)方法:

 public class MyElFunctions {
  public static String connectString(String str1,String str2) {
   return str1+str2;
  } 
 }

在【W(wǎng)EB-INF】中自定義TLD文件中聲明這個方法,同時定義自己的uri:

 <?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>A tag library exercising SimpleTag handlers.</description>
  <tlib-version>1.0</tlib-version>
  <short-name>SimpleTagLibrary</short-name>
  <uri>myelfunction</uri>
 <function>
   <description>Connect two Strings</description>
   <name>connect</name>
   <function-class>com.bjpowernode.elfunctions.MyElFunctions</function-class>
   <function-signature>java.lang.String connectString( java.lang.String , java.lang.String )</function-signature>
  </function>
 </taglib>

 在JSP頁面中加入taglib聲明:

 <%@ taglib uri="myelfunction" prefix="elfn" %>

在JSP頁面中的主體代碼為:

<%
   User u = new User();
   u.setUsername("fjdingsd");
   session.setAttribute("user", u);
  %>
  ${sessionScope.user!=null ? elfn:connect("歡迎您: ",user.username):'' }

在瀏覽器中觀察: 

 

  通常,我們在項目中會有專門的一個類來作為EL函數(shù)的方法實現(xiàn)類,在這個類中都是定義EL函數(shù)的靜態(tài)方法。

  在JSTL包中的fn.tld文件中還有很多EL函數(shù),這里就不再一一介紹了,如果我們有需要,可以在這個文件中查看,基本每個函數(shù)都有示例。

  EL表達(dá)式到這里就差不多介紹完了,主要就是這四大功能(獲取數(shù)據(jù),執(zhí)行運(yùn)算,使用隱式對象,調(diào)用Java方法),最后就來簡單說明一下EL表達(dá)式的注意事項:EL表達(dá)式是JSP2.0規(guī)范中的一門技術(shù),因此若想正確解析EL表達(dá)式,必須使用Servlet2.4/JSP2.0技術(shù)及以上的WEB服務(wù)器。

  有些Tomcat服務(wù)器不能使用EL表達(dá)式的話,要么將Tomcat升級6及以上的版本,要么在JSP頁面中加入page指令<%@ page isELIgnored="false" %>

以上所述是小編給大家介紹的EL調(diào)用Java方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • java為何不能多繼承的原因詳解

    java為何不能多繼承的原因詳解

    多重繼承是一個子類從多個父類中繼承屬性和方法。C++, Common Lisp是時下支持多重繼承的流行語言。那java為何不能多繼承呢,下面小編帶大家來一起學(xué)習(xí)一下吧
    2019-06-06
  • 基于Spring MVC 簡介及入門小例子(推薦)

    基于Spring MVC 簡介及入門小例子(推薦)

    下面小編就為大家?guī)硪黄赟pring MVC 簡介及入門小例子(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • 一文掌握Spring中循環(huán)依賴與三級緩存

    一文掌握Spring中循環(huán)依賴與三級緩存

    這篇文章主要介紹了Spring中循環(huán)依賴與三級緩存,Spring通過三級緩存解決了循環(huán)依賴,其中一級緩存為單例池,二級緩存為早期曝光對象earlySingletonObjects,三級緩存為早期曝光對象工廠(singletonFactories),本文結(jié)合實例代碼介紹的非常詳細(xì),需要的朋友參考下吧
    2023-09-09
  • MyBatis-Plus3.x版本使用入門和踩過的坑

    MyBatis-Plus3.x版本使用入門和踩過的坑

    Mybatis-Plus是Mybatis的增強(qiáng)版,他只是在Mybatis的基礎(chǔ)上增加了功能,且并未對原有功能進(jìn)行任何的改動,本文給大家說一下MyBatis-Plus3.x版本使用入門和踩過的坑,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • Java 8 Function函數(shù)式接口及函數(shù)式接口實例

    Java 8 Function函數(shù)式接口及函數(shù)式接口實例

    函數(shù)式接口(Functional Interface)就是一個有且僅有一個抽象方法,但是可以有多個非抽象方法的接口。接下來通過本文給大家介紹Java 8 Function函數(shù)式接口及函數(shù)式接口實例代碼,需要的朋友可以參考下
    2018-05-05
  • Java+Swing實現(xiàn)五子棋游戲的示例代碼

    Java+Swing實現(xiàn)五子棋游戲的示例代碼

    本文將通過Java語言實現(xiàn)經(jīng)典游戲—五子棋游戲,文中采用了Swing制作游戲界面,具有開始游戲,悔棋,認(rèn)輸,退出等功能。感興趣的可以跟隨小編一起動手試一試
    2022-02-02
  • java常見事件響應(yīng)方法實例匯總

    java常見事件響應(yīng)方法實例匯總

    這篇文章主要介紹了java常見事件響應(yīng)方法,對于初學(xué)者有很好的參考借鑒價值,分享給大家,需要的朋友可以參考下
    2014-08-08
  • 手工搭建Servlet實現(xiàn)

    手工搭建Servlet實現(xiàn)

    現(xiàn)在作為一個Java程序員,我們已經(jīng)習(xí)慣了使用IDE和Web框架進(jìn)行開發(fā),IDE幫助我們做了編譯、打包的工作。Spring框架則幫助我們實現(xiàn)了Servlet接口,并把Servlet容器注冊到了Web容器中。本文主要介紹了Servlet手工搭建,感興趣的可以了解一下
    2021-07-07
  • java?spring?validation?自動、手動校驗

    java?spring?validation?自動、手動校驗

    HibernateValidator簡化了Java開發(fā)中的參數(shù)校驗過程,提供自動和手動兩種校驗方式,通過引入相關(guān)依賴并使用@Validated注解,可以實現(xiàn)自動校驗,手動校驗則需要使用ValidatorUtils類,此方法有效減少代碼重復(fù),提高開發(fā)效率
    2024-09-09
  • 如何解決Maven打包時每次都出現(xiàn)Download maven-metadata.xml卡住問題

    如何解決Maven打包時每次都出現(xiàn)Download maven-metadata.xml卡住問題

    這篇文章主要介紹了如何解決Maven打包時每次都出現(xiàn)Download maven-metadata.xml卡住問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05

最新評論

中卫市| 青铜峡市| 大连市| 洪泽县| 定边县| 礼泉县| 盐城市| 辉南县| 拉萨市| 武清区| 和林格尔县| 永年县| 都昌县| 南溪县| 海丰县| 扎兰屯市| 广昌县| 巩义市| 高唐县| 句容市| 忻城县| 云龙县| 康乐县| 财经| 玉龙| 收藏| 金寨县| 汉中市| 新巴尔虎左旗| 平塘县| 页游| 夹江县| 阿图什市| 怀安县| 闽侯县| 吴忠市| 玉屏| 德庆县| 沭阳县| 宁南县| 洪湖市|