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用來在模板裡直接顯示內容。

現在在回頭想想前面提到的問題,是不是會比較容易解決了呢?如果頁面有什麼變動的話,只要修改一下模板頁就可以了。這樣還不會犯漏掉哪個頁面的錯誤。


相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。