一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - EL調用Java方法_動力節點Java學院整理

EL調用Java方法_動力節點Java學院整理

2020-12-03 10:06fjdingsd Java教程

簡單來說,我們在一個類中的某個方法,可以使用EL進行調用,這個能被EL表達式調用的方法稱之為EL函數,但是這種方式必須滿足兩點要求,具體哪兩點,大家可以參考下本文

簡單來說,我們在一個類中的某個方法,可以使用el進行調用,這個能被el表達式調用的方法稱之為el函數,但是這種方式必須滿足以下兩點要求:

  ① 在el表達式中調用的只能是java類的靜態方法

  ② 這個java類的靜態方法需要在我們另外在自定義的tld文件中描述

  滿足以上兩點才能被el表達式調用。

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

例1:使用el函數來實現html語言的過濾轉義

  在web工程中自定義一個htmlfilter類,同時定義一個靜態的filter方法:

 
?
1
 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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("<");
    break;
   case '>':
    result.append(">");
    break;
   case '&':
    result.append("&");
    break;
   case '"':
    result.append(""");
    break;
   default:
    result.append(content[i]);
   }
  }
  return (result.tostring());
 }
}

  這個類中的filter方法能將html語言轉換為普通的字符串,當然這個類和方法在tomcat中也有示例,路徑為【tomcat】--->【webapps】--->【examples】--->【web-inf】--->【classes】--->【utils】,找到htmlfilter.java就是了。 

EL調用Java方法_動力節點Java學院整理 

  好了我們已經有靜態的方法了,現在需要在tld文件中對這個方法進行描述才能在jsp中使用。

  tld文件需要在“web-inf”文件中創建和定義,在哪里找模板呢,依然可以到tomcat中尋找。在【tomcat】--->【webapps】--->【examples】--->【web-inf】--->【jsp2】中有一個“jsp2-example-taglib.tld”文件,我們就可以對這個文件復制其“首尾”啦。

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

 
?
1
 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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靜態方法進行描述最重要的就是要定義<function>標簽,在<function>標簽下,<description>只是對該方法的描述,不是必需的;<name>指定在jsp上使用該el函數時應該使用的標簽名;<function-class>指定該方法所在的類,必需提供完整類名(包括包名);<function-signature>是方法簽名,就是對所使用的靜態方法的聲明,所有的參數都必需指定完整類名,包括返回值類型和參數列表類型。

  好了,接下來我們在jsp頁面中就可使用剛才定義好的el函數了,當然,首先我們應該現在jsp上使用tablib指定導入標簽庫,并定義好標簽前綴(prefix):

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

最后再在jsp頁面的主體中使用el函數:

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

在瀏覽器中觀察: 

EL調用Java方法_動力節點Java學院整理 

這樣,使用el函數就將一個超鏈接過濾轉義成普通的文本了。

  通過上面的例子,使用el函數似乎和自定義標簽一樣,可以移除jsp中出現的java代碼,但是el函數比自定義標簽的不足之處在于,el函數只能移除與web無法的方法,無法移除與web有關的方法,比如某些方法中含有httpservletrequest、httpservletresponse等等這樣的對象,因為在定義靜態方法的時候,我們無法使用到這些web對象,這些web對象都是由tomcat服務器返回這些接口的實例對象的,這都是服務器中低層封裝好的,我們平常使用靜態方法根本無法獲取,因此此時還是需要使用自定義標簽的。 

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

sun公司定義的el函數封裝和描述在jstl標簽庫中,因此在jsp頁面中使用這個el函數庫時,應該先導入jstl開發包,并在該頁面中導入el函數庫。如果是使用javaee5.0以上的,jstl包會自動導入,可以在【java ee 5 libraries】庫中看到:  

EL調用Java方法_動力節點Java學院整理

在這個“jstl-1.2.jar”中,查看其“meta-inf”文件,有一個“fn.tld”文件,這個就是sun公司封裝在jstl中的el函數的tld文件:  

EL調用Java方法_動力節點Java學院整理

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

EL調用Java方法_動力節點Java學院整理 

那么我們在jsp頁面中導入tablib指令時只要這兩個信息即可:

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

這樣我們就可以在jsp頁面中使用sun公司開發好的el函數了。 

例2:   fn:tolowercase函數

 
?
1
 
${fn:tolowercase("aaa") }

輸出:aaa。

例3:      fn:length()函數

 
?
1
 
${fn:length("aaa") }

輸出:3 

例4:  fn:length函數

 
?
1
 
2
3
4
<%
  request.setattribute("arr", new string[5]);
 %>
 ${fn:length(arr) }

輸出:5

例5:使用jstl與el函數來遍歷集合

  需同時導入jstl與el的tablib指令:

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

在jsp主體中的代碼如下:

 
?
1
 
2
3
4
5
6
7
8
9
10
<%
   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>

在瀏覽器中觀察:  

EL調用Java方法_動力節點Java學院整理

例6:      fn:join函數

  fn:join函數第一個參數為字符串數組或集合,第二個參數為將該字符串數組或集合相連起來的分隔符。

 
?
1
 
2
3
4
5
<%
  string[] arr = {"www","bjpowernode","com"};
  pagecontext.setattribute("arr", arr);
 %> 
${fn:join(arr,".") }

輸出:

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

例7:    fn:contains函數

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

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

輸出:true。

  注:fn:contains函數是大小寫敏感的,如果要忽略大小寫,請使用fn:containsignorecase函數。

例8:  取出表單類型為checkbox的數據回顯

  模擬在表單提交失敗時,對于表單中類型為“checkbox”的表單項的數據,可以使用el函數從重新轉發回的request獲取數據,經過一定的處理,使該頁面中的表單項數據重新顯示:

 
?
1
 
2
3
4
5
6
7
8
9
10
11
<%
   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>

在瀏覽器中觀察:

EL調用Java方法_動力節點Java學院整理

例9:   fn:escapexml函數

  功能與例1相同,對html語言進行過濾轉義成字符串。

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

瀏覽器中觀察:

EL調用Java方法_動力節點Java學院整理

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

  在一個類中定義字符串連接的靜態方法:

 
?
1
 
2
3
4
5
public class myelfunctions {
 public static string connectstring(string str1,string str2) {
  return str1+str2;
 }
}

在【web-inf】中自定義tld文件中聲明這個方法,同時定義自己的uri:

 
?
1
 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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聲明:

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

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

 
?
1
 
2
3
4
5
6
<%
   user u = new user();
   u.setusername("fjdingsd");
   session.setattribute("user", u);
  %>
  ${sessionscope.user!=null ? elfn:connect("歡迎您: ",user.username):'' }

在瀏覽器中觀察: 

EL調用Java方法_動力節點Java學院整理 

  通常,我們在項目中會有專門的一個類來作為el函數的方法實現類,在這個類中都是定義el函數的靜態方法。

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

  el表達式到這里就差不多介紹完了,主要就是這四大功能(獲取數據,執行運算,使用隱式對象,調用java方法),最后就來簡單說明一下el表達式的注意事項:el表達式是jsp2.0規范中的一門技術,因此若想正確解析el表達式,必須使用servlet2.4/jsp2.0技術及以上的web服務器。

  有些tomcat服務器不能使用el表達式的話,要么將tomcat升級6及以上的版本,要么在jsp頁面中加入page指令<%@ page iselignored="false" %>

以上所述是小編給大家介紹的el調用java方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品午夜剧场 | 五月色综合婷婷综合俺来也 | 偷偷操不一样 | 国产成人免费高清激情视频 | 亚洲人成网站在线观看妞妞网 | free chinese 国产精品 | 精品一区二区三区 不卡高清 | 天使萌痴汉在线中文字幕 | 国内久久精品视频 | 2021国产精品成人免费视频 | 欧美最猛性xxxxx动态图 | 国产精品久久久久久岛国 | 精品久久免费视频 | 欧美日韩一区二区三区免费 | 贰佰麻豆剧果冻传媒一二三区 | 热久久免费视频 | 波多野结衣女老师 | 青青草国产精品 | 日韩欧免费一区二区三区 | 色综合久久夜色精品国产 | 啪啪链接| 男人使劲躁女人小视频 | 国产精品久久久久影视不卡 | 99国产精品免费观看视频 | 午夜宅男网 | 奇米影视在线观看 | 亚洲国产精品福利片在线观看 | 国产最强大片免费视频 | 欧美日韩高清不卡一区二区三区 | 海绵宝宝第二季全集免费观看 | 亚洲精品色图 | daring国家队在线观看樱花动漫 | 日老逼 | 国产精品天天看特色大片不卡 | 亚洲a视频在线 | 成年人黄色录像 | 国产特级 | 国产精品污双胞胎在线观看 | 成人国产在线观看 | 精品国产线拍大陆久久尤物 | 国产91精品在线观看 |