jsp template之我見
來源:互聯網
上載者:User
js 我們在做程式的過程中,常常會遇到這樣一種情況,就是在一個項目中,會發現有很多頁面的架構基本相同的,只是具體顯示的內容不同,而按常規的做法,我們可能會用include語句來提出架構內容,然後在每個頁面中引用這些架構,但這樣就會產生一個問題,如果我的架構發生變化了,那應該怎麼辦呢?舉個例子,一個index.jsp可能包含有head.jsp和foot.jsp。而其它頁面也同樣包含這兩個JSP。但如果我在index.jsp裡有一段導航條的代碼,我現在想在每個頁面裡引用,而不想加到head.jsp中,難道我們要在每個頁面裡都增加這個導航條的代碼嗎?我想我是不會這樣做的。因為有一種更好的辦法來解決這種問題。那就是採用模板頁面。
template頁面的原理,其實就是寫一個servlet來實現頁面的跳轉,然後在web.xml裡面配置這個servlet,使要使用模板的這一類JSP檔案,都通過這個servlet來處理,使它們都轉到模板頁面即可。然後在模板頁面中include這些頁面的內容頁即可。
具體的做法,只要寫一個template.jsp做為模板頁面、一個TemplateDispatch.java做為跳轉的類就可以了。然後在調用時,直接指向這個SERVLET,加一個參數,說明要用到哪個內容頁就行了。寫個簡單的例子如下:
template.jsp
=====================================
<% page contentType="text/html; charset=gb2312"%>
<%@ include file=“head.jsp“%>
<%=(String)request.getAttribute(“body“)%>
<%@ include file=“foot.jsp“%>
TemplateDispatch
=====================================
public class TemplateDispatchextends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response){
doPost(request,response);
}
public void doPost(HttpServletRequest request,HttpServletResponse response){
HttpSession session = request.getSession(true);
session.setAttribute(“body“,“index.jsp“);
RequestDispatcher rd = session.getServletContext().getRequestDispatcher("template.jsp");
rd.forward(request,response);
}
}
web.xml
=====================================
<servlet>
<servlet-name>dispatch</servlet-name>
<servlet-class>TemplateDispatchextends </servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatch</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
代碼是即興寫的,沒有做過測試,只是表達一下意思。
===========================================
如果覺得簡單的話,還可以擴充一下。通過設定檔配置內容頁,以及taglib來定義兩個標籤insert用來增加內容頁、value用來在模板裡直接顯示內容。
現在在回頭想想前面提到的問題,是不是會比較容易解決了呢?如果頁面有什麼變動的話,只要修改一下模板頁就可以了。這樣還不會犯漏掉哪個頁面的錯誤。