軟體專案實訓及課程設計指導——如何在Struts框架中應用FreeMarker模板技術的例項
1、Struts應用框架全面地支援FreeMarker模板技術
(1)Struts應用框架也同樣提供對FreeMarker模板技術的支援
而在Struts應用框架中應用FreeMarker模板技術,開發人員只需要在Web應用系統的部署描述檔案web.xml中配置出與FreeMarker模板相關的FreemarkerServlet元件(參看如下示例圖所示),然後由該FreemarkerServlet元件將專案中的相關Action類中所儲存的模型資料和模板檔案相互整合組裝成最終的HTML頁面檔案、並向Web瀏覽器輸出。
(2)在專案的web.xml檔案中配置定義FreemarkerServlet元件的程式碼示例
作者在下文為讀者介紹在J2EE Struts應用框架的應用系統環境中如何應用FreeMarker模板技術。
2、在基於Struts應用框架的Web專案中新增與FreeMarker有關的*.jar包檔案
在Web專案中新增與FreeMarker有關的*.jar包檔案,操作的主要過程可以參看如下示圖所示。
3、在基於Struts應用框架的Web專案中新增一個請求頁面fmtUserLogin.jsp
(1)在Web專案中新增一個請求的JSP頁面,該頁面的檔名稱為fmtUserLogin.jsp檔案,在MyEclipse開發工具中選擇檔案新建選單專案,然後創建出一個JSP型別的頁面檔案,操作的主要過程可以參看如下示圖所示。
(2)fmtUserLogin.jsp檔案的程式碼內容參看如下的示例
<%@ page language="java" pageEncoding="gb2312"%><%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html:html lang="true"> <head><html:base /><title>fmtUserLogin.jsp</title></head> <body> <html:form action="/userInfoURL.do?action=goFMTUserLogin" method="post" > <html:hidden property="formType" value="1"/> <table border="0"> <tr> <td>您的名稱:</td><td><html:text property="userName" /></td></tr> <tr> <td>您的密碼:</td><td><html:password property="userPassWord" /></td></tr> <tr> <td colspan="2" align="center"> <html:submit value="提交" property="submitButton" onclick="this.value='正在提交請求,請稍候'"/> <html:reset value="取消" property="resetButton" /> </td></tr> </table> </html:form> </body></html:html>
fmtUserLogin.jsp頁面檔案在靜態狀態下預覽的效果示圖請參看如下示例圖所示。
4、在Web專案中再設計一個處理的Action類,該類名稱為UserInfoAction
(1)本示例將採用Struts應用框架中的DispatchAction技術,並提供一個goFMTUserLogin方法
在Web專案中新增一個Action程式類,該Action程式類的檔名稱為UserInfoAction.java檔案,在MyEclipse開發工具中選擇檔案新建類專案,然後創建出一個Java程式類檔案,並在該UserInfoAction類中新增一個goFMTUserLogin方法。該goFMTUserLogin方法的程式程式碼參看如下示例,並注意其中黑體標識的語句。
public ActionForward goFMTUserLogin(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response){ String resultMessage=null; //這是DynaActionForm的實現程式碼 UserInfoActionForm userLoginForm = (UserInfoActionForm) form; String userName = (String)userLoginForm.get("userName"); String userPassWord = (String)userLoginForm.get("userPassWord"); boolean returnResult=userName.equals("yang") &&userPassWord.equals("1234"); if(returnResult){ resultMessage =userName+"您登入成功!"; } else{ resultMessage =userName+"您的身份資訊無效!"; } request.setAttribute("showResultInfo", resultMessage); return (mapping.findForward("showFMTLoginInfo"));}
在Action類中只需要將資料儲存在request物件中,然後跳轉到模板檔案中就可以了。
(2)配置出該Action及跳轉的目標,並請注意其中黑體標識的語句
<action path="/userInfoURL" name="userInfoActionForm" roles="user"type="com.px1987.sshproject.action.UserInfoAction" scope="request" parameter="action"> <forward name="loginSuccess" path="/loginSuccess.jsp" /> <forward name="loginFailure" path="/loginFailure.jsp" /> <forward name="registerFailure" path="/userManage/registerFailure.jsp" /> <forward name="registerSuccess" path="/userManage/registerSuccess.jsp" /> <forward name="showFMTLoginInfo" path="/userManage/showInfoFMTTemplate.ftl" /></action>
5、在基於Struts應用框架的Web專案中新增一個模板檔案
(1)showInfoFMTTemplate.ftl模板檔案
在Web專案中新增一個模板檔案,該模板檔案的檔名稱為showInfoFMTTemplate.ftl。在MyEclipse開發工具中選擇檔案新建選單專案,然後創建出一個模板檔案,操作的主要過程可以參看如下示圖所示。
(2)showInfoFMTTemplate.ftl模板檔案的程式碼內容,並注意其中的黑體標識的語句,該檔案中的程式碼主要是獲得使用者登入後的狀態資訊。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>showInfoTemplate.ftl</title> <meta http-equiv="content-type" content="text/html; charset=gb2312"> </head> <body> <h2>採用標準的方式獲得引數值: ${showResultInfo}</h2 > <br> </body></html>
讀者需要注意的是,由於showInfoFMTTemplate.ftl模板檔案不是JSP型別的頁面檔案,而是普通的文字檔案,該檔案的內容不需要透過JSP引擎的解析和處理。如下示例圖為showInfoFMTTemplate.ftl模板檔案在MyEclipse開發工具中的顯示狀態圖。
從上面的showInfoFMTTemplate.ftl模板頁面檔案示例中可以瞭解到FreeMarker的模板檔案基本上就是靜態的HTML頁面,FreeMarker模板檔案主要由如下4個部分組成:
1)文字:直接輸出的部分
2)註釋:<#-- ... -->格式部分,不會輸出
3)插值:即${...}或#{...}格式的部分,將使用資料模型中的部分替代輸出
4)FTL指令:由FreeMarker指定但和HTML標記基本類似,名字前加#予以區分,不會輸出。
6、在Web專案的部署描述檔案web.xml中配置出下面的內容
7、部署本Web示例專案和測試示例中的相關功能
(1)在瀏覽器中啟動測試頁面
一旦將本Web專案部署成功後,然後再啟動伺服器。在瀏覽器的URL位址列中輸入如下示例圖中所示的URL地址將能夠啟動本示例中的測試頁面。
(2)在表單中輸入相關的引數後的提交輸出結果,參看如下示例圖所示
(3)再測試非法登入狀態是否能夠識別
在測試頁面的表單中輸入模擬系統登入相關的賬戶和密碼,但這次故意輸入不正確的登入引數,最終瀏覽的結果參看如下示例圖所示。
從示例程式返回的結果來看,本示例的功能實現是完全正確。因此,本示例正確地實現了將Struts應用框架和FreeMarker模板相互整合,並在Web頁面中應用FreeMarker模板技術同樣也能夠獲得從伺服器返回的處理結果。
但由於showInfoFMTTemplate.ftl模板檔案不是JSP型別的頁面檔案,而是普通的文字檔案,該檔案的內容不需要透過JSP引擎的解析和處理。因此頁面的響應速度將會大大地提高,從而應用FreeMarker模板技術的Web頁面可以是非JSP型別的Web頁面——達到"動態內容靜態化"的應用效果。