Velocity 是一個基于 java 的通用模板工具,來自于 jakarta.apache.org 。
Velocity 的介紹請參考 Velocity -- Java Web 開發新技術。這里是它的一個應用示例。
這個例子參照了 php-Nuke 的結構, 即所有 HTTP 請求都以 http://www.some.com/xxx/Modules?name=xxx&arg1=xxx&bbb=xxx 的形式進行處理。例子中所有文件都是 .java 和 .Html , 沒有其他非凡的文件格式。除了 Modules.java 是 Java Servlet, 其余的 .java 文件都是普通的 Java Class.
所有 HTTP 請求都通過 Modules.java 處理。Modules.java 通過 Velocity 加載 Modules.htm。 Modules.htm 有頁頭,頁腳,頁左導航鏈接,頁中內容幾個部分。其中頁頭廣告、頁中內容是變化部分。頁頭廣告由 Modules.java 處理,頁中內容部分由 Modules.java dispatch 到子頁面類處理。
1) Modules.java
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.velocity.*;
import org.apache.velocity.context.*;
import org.apache.velocity.exception.*;
import org.apache.velocity.servlet.*;
import commontools.*;
public class Modules
extends VelocityServlet {
public Template handleRequest(HttpServletRequest request,
HttpServletResponse response,
Context context) {
//init
response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("utf-8");
//PRepare function page
ProcessSubPage page = null;
ProcessSubPage mainPage = new HomeSubPage();
String requestFunctionName = (String) request.getParameter("name");
boolean logined = false;
String loginaccount = (String) request.getsession(true).getAttribute(
"loginaccount");
if (loginaccount != null) {
logined = true;
}
//default page is mainpage
page = mainPage;
if (requestFunctionName == nullrequestFunctionName.equalsIgnoreCase("home")) {
page = mainPage;
}
//no login , can use these page
else if (requestFunctionName.equalsIgnoreCase("login")) {
page = new LoginProcessSubPage();
}
else if (requestFunctionName.equalsIgnoreCase("ChangePassWord")) {
page = new ChangePasswordSubPage();
}
else if (requestFunctionName.equalsIgnoreCase("ForgetPassword")) {
page = new ForgetPassword();
}
else if (requestFunctionName.equalsIgnoreCase("about")) {
page = new AboutSubPage();
}
else if (requestFunctionName.equalsIgnoreCase("contact")) {
page = new ContactSubPage();
}
//for other page, need login first
else if (logined == false) {
page = new LoginProcessSubPage();
}
else if (requestFunctionName.equalsIgnoreCase("listProgram")) {
page = new ListTransactionProgramSubPage();
新聞熱點
疑難解答