在jsp中實現 類 的繼承關係

2021-08-30 08:16:19 字數 3169 閱讀 1793

1.介紹

使用過python django模板的應該清楚,django裡面有乙個激動人心的功能就是模板可以使用類的繼承關係。 即模板是可以繼承的,並且不限繼承的層次。 如

1. child.html extends base.html

2. grandchild.html extends child.html

這樣,我們在base.html中定義好html布局,然後在「子類」(我們這樣稱呼吧)重定義需要父頁面內容即可

2.jsp繼承示例

現在我們來看jsp中如何實現此功能(django與下面的宣告類似)。

父頁面: base.jsp,定義布局

<%@ taglib uri="" prefix="rapid" %>

base_head_content

base_body_content

子頁面: child.jsp

<%@ taglib uri="" prefix="rapid" %>

<% //重定義父頁面的內容為content的內容 %>

child_body_content

<%@ include file="base.jsp" %>

如上: 我們使用了兩個jsp tag: block,override,還有<@include >指令.

下面描述各個功能:

直接訪問base.jsp輸出:

base_head_content

base_body_content

訪問child.jsp輸出:

base_head_content

child_body_content

可以看到,child.jsp的的body輸出內容被重定義了.

現該tag可以實現jsp的無限級的繼承關係. 即 grandchild.jsp 繼承 child.jsp , child.jsp繼承 base.jsp

3.具體實現方式:

block tag:

public class blocktag extends tagsupport

@override

public int dostarttag() throws jspexception

@override

public int doendtag() throws jspexception

try catch (ioexception e)

return eval_page; }

private string getoverriedcontent()

}

override tag:

public class overridetag extends bodytagsupport

@override

public int dostarttag() throws jspexception

@override

public int doendtag() throws jspexception

bodycontent b = getbodycontent();

string varname = utils.getoverridevariablename(name);

pagecontext.setattribute(varname, b.getstring());

return eval_page; }

private boolean isoverrided()

}

工具類:

class utils 

}

可以看到,實現**不需要100行,重要是的實現技巧,由此,你從此可以放棄使用sitemesh. 並且如上實現方式具有更高效能。

並且筆者也擴充套件了freemarker模板,通過自定義指令,實現如上相同的功能。

該內容以後也會隨rapid-framework一起發布

原始碼位置: 

PHP中類的繼承關係

原文 php中類的繼承關係 在php中,我時常會寫乙個類,類寫了乙個共用方法,然後讓子類去繼承就能得到相應的功能。假設大致有這麼乙個父類 1 2 class father 7 8 protected function say str hello world 11 12 然後呢,搞乙個子類去繼承他 1...

powerdesigner 類的繼承關係

在開發中,總是會面對部分相同的實體類這種情況的。那麼,我們需要在powerdesigner 中就直接關聯好這種關係。但是,怎麼做呢?實現方式 concrete table inheritance 具體表繼承 single table inheritance 單錶繼承 class table inhe...

類的關係之繼承

子類在呼叫構造方法時預設呼叫父類的構造方法 程式塊子類不能直接呼叫,子類執行構造方法之前,預設呼叫了父類的構造方法,父類的構造方法之前預設執行父類的塊this和super都是指代詞,代替的是物件 this代替的是當前執行方法時的那個物件,不一定是當前類的 super代替的是當前執行方法時的物件的父類...