Java Web基礎——自定義標簽和JSTL

因為在Struts2中使用到了很多該框架的標簽的使用,所以在此特別梳理了一下有關的知識體系


標簽(動作)的一般語法為:,如,該標簽的作用是把copyright.jsp頁面的輸出包含到當前頁面的輸出中

我們先來看一下常用的標準P動作動作指令,又可以叫做標簽指令:

jsp:include 在當前頁面包含另一個頁面的輸出

jsp:forward 將請求轉發到指定的頁面

jsp:usebean 查找或者創建一個JavaBeans對象

jsp:setProperty 設置JavaBeans的屬性值

jsp:getProperty 返回JavaBeans的屬性值

jsp:plugin 在JSP頁面嵌入一個插件(如Applet)

以上的這些標準標簽是JSP中內置的,所以不需要特別的生命便可使用。當然我們也可以根據需要定義自定義標簽以實現特定的效果,下面我將系統的介紹自定義標簽的創建和使用流程:


所謂自定義標簽就是用Java語言開發的程序的,以特定的格式在JSP頁面中使用的標簽,自定義標簽又被叫做自定義動作(Custom Action)。

我們這里主要介紹如何利用J.0中的擴展標簽API進行開發,而不再介紹傳統JSP1.x中標簽的開發,JSP2.0中簡單的自定義標簽開發更加簡潔和使用。

?

一.簡單自定義標簽API的層次結構


Jsp是一個接口,該接口沒有定義任法,只起到接口表示和類型安全的作用

SimpleTag接口用來實現結點的自定義標簽,接口中定義了5個生命周期方法,下面我們會

SimpleTagSupport類實現了SimpleTag接口,并且還定義了另外三個方法

?

二.自定義標簽的開發步驟

創建標簽處理類

創建描述文件TLD(Tag Library Discriptor)

在JSP頁面中引入標簽庫和使用標簽

下面我們將創建使用一個實現將標簽體打印五次的自定義標簽,并在之后說明其相關原理。

標簽處理類

?

public class HelloTag implements SimpleTag {

JspContext context = null;
JspTag parent = null;
JspFragment jspBody = null;

@Override
public void doTag() throws JspException, IOException {
StringWriter sw = new StringWriter();
jspBody.invoke(sw);
String bodyContent = sw.toString();
JspWriter out = context.getOut();
for(int i=0;i<5;i++){
out.println(bodyContent);
}
}
@Override
public JspTag getParent() {
return parent;
}
@Override
public void setJspBody(JspFragment jspBody) {
}
@Override
public void setJspContext(JspContext jspContext) {
context = jspContext;
}
@Override
public void setParent(JspTag parent) {
this.parent = parent;
}
}

?標簽庫描述文件 sampleLib.tld,放在WEB-INF或者其子文件夾中

?

<taglib xmlns="//java.sun.com/xml/ns/j2ee" xmlns:xsi="//www.w3.org/2001/-instance"
xsi:schemaLocation="//java.sun.com/xml/ns/j2ee //java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
1.2

/testPath


hello
com.mytream.HelloTag


?在hello.jsp頁面中使用該標簽

?

<%@ page="" contenttype="text/html">
<%@ taglib="" prefix="test" uri="/testPath">

 
   Test Custom Tag - 码报开奖结果本期|黄大仙本期码报
 
 
    good
 

?訪問hello.jsp頁面,我們將會看到good被連續打印了5遍,這是我們在doTag()方法中所做的操作,當然該標簽的過程要比這復雜的多,下面我講一一介紹。

?

三.容器解析自定義標簽的過程

?

上圖不一定符合UML規范,僅僅是為了幫助。從上圖我們可以看到tomcat容器在對JSP頁面進行轉換的過程中,一旦遇到用戶自定義的標簽便要通過如上三步進行解析并執行該標簽所代表的動作。

通過標簽的前綴找到該標簽所對應的uri,該uri并不表示資源的具體位置,而是通過它可以建立與TLD文件中所定義標簽的映射。在WEB-INF/下的TLD文件中找到標簽中的對應的,也就是需要創建的類的對象的名字。利用創建HelloTag的示例

調用HelloTag的setXXX()方法,根據JSP頁面中屬性對應的值對HelloTag對象的屬性值進行設置,這樣我們就可以在自己定義的這些類中使用這些屬性值了

調用HelloTag的doTag()方法,執行用戶定義的相關操作


四.使用標準標簽庫JSTL(JSP Standard Tag Library)


既然我們能夠自定義標簽,我們當然也能夠使用已經定義好的其他好的標簽。 JSTL為我們提供了龐大的標簽庫,使用JSTL可以提高開發的效率,參考之前自定義標簽的操作,要使用JSTL標簽要進行如下操作:

\webapps\examples\WEB-INF\lib中將jstl.jar和standard.jar文件復制到自己的項目中的WEB-INF\lib目錄中

在使用JSTL標簽前進行聲明,即用taglib指令來引用標簽庫,如<%@ taglib="" prefix="c" uri="//java.sun.com/jsp/jstl/core">

使用,如將會輸出Welcome to using JSTL.

JSTL相當龐大,共提供了5個庫,如下表所示 JSTL庫及使用的URI與前綴 庫名稱 使用的URI 前綴 核心標簽庫 //java.sun.com/jsp/jstl/core c XML標簽庫 //java.sun.com/jsp/jstl/xml x 國際化和格式化庫 //java.sun.com/jsp/jstl/fmt fmt SQL標簽庫 //java.sun.com/jsp/jstl/sql sql 函數庫//java.sun.com/jsp/jstl/s fn 


?


?

?

至于如何使用JSTL標簽庫,有太多的參考資料了,暫時不再列敘


來源:mytream的CSDN博客

上一篇: 獲取Java環境相關信息大全

下一篇: java環境變量配置

分享到: 更多
最新pk10计划安卓版下载 杀三停一输五赢六 双色球开奖结果今天的 重庆时时现场开奖结果 单机斗地主 赛车怎么用3000赢10万 黑龙江时时组选走势 下载①分快三破解软件 美国nba投注量 11选5计划软件神器 天天pk10计划软件手机版下载 彩票最稳的计划软件 众彩网专家预测汇总 新浪双色球基本走势图 炸金花的技巧与经验 上海时时一天多少期