軟體專案實訓及課程設計指導——如何在Web應用系統中實現Velocity 與Struts2框架相互整合的應用例項
1、Struts 2應用框架提供對 Velocity 和 FreeMarker 模板引擎的支援
在Struts 2應用框架中不僅繼續保留有對Velocity模板引擎的支援,而且也提供對 另一個廣泛應用的FreeMarker 模板引擎的支援。
在Struts 2應用框架中整合Velocity模板引擎的實現過程比在Struts應用框架中整合Velocity模板引擎要簡單的多,因為Struts 2應用框架系統內帶有對Velocity模板引擎的技術支援。
2、整合Struts 2應用框架和Velocity模板引擎時所需要的系統配置
(1)新增有關的系統JAR包檔案
實現Struts 2應用框架整合Velocity模板引擎時所需要的系統JAR包,除了Struts2應用框架本身所需要的系統包檔案以外,還需要與Velocity模板引擎有關的系統包檔案——主要為velocity-1.6.1-dep.jar、velocity-tools-1.4.jar和velocity-tools-view-1.4.jar,請參考如下示圖所示。
(2)在web.xml部署描述檔案中配置定義VelocityViewServlet元件
在Web專案的部署描述符web.xml部署描述檔案中除了要配置定義出Struts 2應用框架本身的org.apache.struts2.dispatcher.FilterDispatcher元件類外,也還需要配置定義出org.apache.velocity.tools.view.servlet.VelocityViewServlet元件類,請參考如下程式碼示例中對VelocityViewServlet類的配置示例。
<servlet> <servlet-name>velocity</servlet-name> <servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServlet</servlet-class> <init-param> <param-name>org.apache.velocity.properties</param-name> <param-value>/WEB-INF/velocity.properties</param-value> </init-param></servlet><servlet-mapping> <servlet-name>velocity</servlet-name> <url-pattern>*.vm</url-pattern></servlet-mapping>
3、在Web專案中新增/WEB-INF/velocity.properties檔案
(1)在Web專案的WEB-INF目錄中新建一個檔名稱為velocity.properties的檔案,參看如下示圖所示
(2)velocity.properties檔案中的內容如下
file.resource.loader.path = /runtime.log = /velocity.logdefault.contentType=text/htmlinput.encoding=GBKoutput.encoding=GBK
4、在Web專案中新增一個請求頁面velocityUserLogin.jsp
(1)在MyEclipse開發工具中新增加一個velocityUserLogin.jsp頁面檔案,參看如下示圖所示
(2)velocityUserLogin.jsp頁面檔案中的程式碼示例如下
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>My JSP 'fmtUserLogin.jsp' starting page</title></head><body> <form action="/Struts2Web/velocityUserInfoAction.action" method="post" > 您的名稱:<input type="text" name="userName" /> <br /> 您的密碼:<input type="password" name="userPassWord" /> <br /> <input type="submit" value="提交" name="submitButton" onclick="this.value='正在提交請求,請稍候'"/> <input type="reset" value="取消" /> </form></body></html>
(3)velocityUserLogin.jsp頁面靜態預覽效果參看如下示例圖所示
5、在Web專案中再設計一個處理的Action類VelocityUserInfoAction
(1)VelocityUserInfoAction所在的程式包名稱為com.px1987.struts2.action,並繼承於com.opensymphony.xwork2.ActionSupport的基類,參看如下示例圖所示的建立過程。
(2)VelocityUserInfoAction程式類的程式碼示例如下
package com.px1987.struts2.action;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;import com.px1987.struts2.actionform.UserInfoActionForm;public class VelocityUserInfoAction extends ActionSupport { private String userName=null; private String userPassWord=null; private UserInfoActionForm oneUserInfo=null; public VelocityUserInfoAction() { } /** 在該方法中進行使用者登陸的功能實現 */ public String execute(){ String resultMessage=null; boolean returnResult= getUserName().equals("yang") &&getUserPassWord().equals("1234"); if(returnResult){ resultMessage =getUserName()+"您登入成功!"; } else{ resultMessage =getUserName()+"您的身份資訊無效!"; } HttpServletRequest request=ServletActionContext.getRequest(); request.setAttribute("showResultInfo", resultMessage); return this.SUCCESS; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPassWord() { return userPassWord; } public void setUserPassWord(String userPassWord) { this.userPassWord = userPassWord; }}
6、在Web專案中的系統配置檔案struts.xml檔案中配置出該Action類
(1)最終配置的程式碼示例
<action name ="velocityUserInfoAction"class ="com.px1987.struts2.action.VelocityUserInfoAction"> <result name="success" type="velocity">/userManage/showInfoTemplate.vm</result> <result name="input">/userManage/velocityUserLogin.jsp</result></action>
由於Struts2應用框架使用Velocity作為其預設的模板技術,因此Struts2應用框架對Velocity模板技術的支援是非常良好的。為了在Struts2應用框架中使用Velocity模板技術,只需要在struts.xml檔案中進行簡單配置。
(2)將Action類的配置定義中的<result>標籤內的type屬性設定為velovity
由於在Struts 2 應用框架中是把各種型別的結果檢視——如 JSP、Velocity、FreeMarker 等都封裝成 ResultType 的子類。也就是說對於每一種型別的檢視,在J2EE Struts 2應用框架中都有與之對應的 ResultType 的實現類,而本示例中的Velocity 檢視對應的類是 org.apache.struts2.dispatcher.VelocityResult。
上面的程式碼示例中的配置程式碼示例是將<result>標籤內的type屬性設定為velocity,也就是將<result>標籤內的type屬性設定為velocity的Action類的定義示例,注意其中黑體標識的語句。
7、在Web專案中設計Velocity的模板頁面showInfoTemplate.vm
(1)在Web專案中新增加模板頁面showInfoTemplate.vm檔案,建立過程參看如下示例圖所示
(2)模板頁面showInfoTemplate.vm檔案的程式碼示例如下,注意其中黑體標識的語句
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>使用者登入成功資訊顯示頁面</title><meta http-equiv="content-type" content="text/html; charset=gb2312"></head><body> <h2>採用標準的方式獲得引數值: $showResultInfo</h2 > <br></body></html>
由於Velocity模板引擎系統採用簡單而強大的模板語言VTL實現對Web頁面的渲染,因此能保證在Dreamwaver之類的Web頁面視覺化編輯器中都能夠正常顯示(參看如下示例圖所示)。
另外,模板檔案可以是任意的副檔名,採用*.vm、*.html或者*.xml都是可以的(本示例採用*.vm副檔名),這樣就能直接在Web瀏覽器中看到Web頁面的預覽的效果。
8、部署並測試本示例Web專案
(1)部署本示例的Web專案相關程式到Web伺服器中,部署後的結果參看如下示例圖所示
(2)在Web瀏覽器中啟動待測試的Web頁面
在Web瀏覽器的URL位址列中輸入如下的URL地址資訊http://127.0.0.1:8080/Struts2Web/userManage/velocityUserLogin.jsp,然後啟動待測試的Web頁面,參看如下示圖所示。