Velocity筆記下
Velocity與struts結(jié)合應用:
具體通過一個實際的例子來解釋,例子選擇以傳統(tǒng)的注冊模塊為主(主要是joseph的書上就這么寫的)
首先,web.xml文件配置情況struts部分就不講了,velocity的配置如下所示:
<servlet>
<servlet-name>velocity</servlet-name>
<servlet-class>org.apache.velocity.tools.view.servlet.
VelocityViewServlet</servlet-class>
<init-param>
<param-name>toolbox</param-name>
<param-value>/WEB-INF/toolbox.xml</param-value>
</init-param>
<load-on-startup>10</load-on-startup>
</servlet>
<!-- Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>velocity</servlet-name>
<url-pattern>*.vm</url-pattern>
</servlet-mapping>
其中velocity的servlet配置中的初始參數(shù)傳入了toolbox.xml,該文件的具體內(nèi)容如下:
<?xml version="1.0"?>
<toolbox>
<tool>
<key>toolLoader</key>
<class>org.apache.velocity.tools.tools.ToolLoader</class>
</tool>
<tool>
<key>link</key>
<class>org.apache.velocity.tools.struts.LinkTool</class>
</tool>
<tool>
<key>msg</key>
<class>org.apache.velocity.tools.struts.MessageTool</class>
</tool>
<tool>
<key>errors</key>
<class>org.apache.velocity.tools.struts.ErrorsTool</class>
</tool>
<tool>
<key>form</key>
<class>org.apache.velocity.tools.struts.FormTool</class>
</tool>
</toolbox>
這個xml文件的意義就在于定義了很多類,來串聯(lián)整個struts和velocity還有javabean等各個元素。
接著就開始配置struts了,首先考慮到這個應用,struts的第一步就是要寫form了。首先構(gòu)建一個RegisterForm。代碼如下,這個javabean用來當做model定義數(shù)據(jù)。
package app;
import org.apache.struts.action.*;
publicclass RegisterForm extends ActionForm {
protected String username;
protected String password;
protected String password2;
public String getUsername() { returnthis.username; }
public String getPassword() { returnthis.password; }
public String getPassword2() { returnthis.password2; }
publicvoid setUsername(String username) { this.username = username; };
publicvoid setPassword(String password) { this.password = password; };
publicvoid setPassword2(String password) { this.password2 = password; };
}
該javabean有3個field屬性,分別是username用戶名,password密碼和password2驗證密碼。
接著寫控制處理邏輯RegisterAction。代碼如下:
package app;
import org.apache.struts.action.*;
import javax.servlet.http.*;
import java.io.*;
publicclass RegisterAction extends Action {
public ActionForward perform(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
RegisterForm rf = (RegisterForm) form;
String username = rf.getUsername();
String password = rf.getPassword();
String password2 = rf.getPassword2();
if (password.equals(password2)) {
return mapping.findForward("success");
}
return mapping.findForward("failure");
}
}
通過form表單讀入數(shù)據(jù),如果密碼和驗證密碼相同,那么就跳到success,否則是failure,這個邏輯非常簡單。Struts中也看不出任何的velocity相關(guān)(那當然,這就叫低耦合,各干各的,分層處理)
然后該配置熟悉的struts-config.xml了。核心代碼如下:
<struts-config>
<form-beans>
<form-bean name="registerForm" type="RegisterForm"/>
</form-beans>
<action-mappings>
<action path="/struts"
type="RegisterAction"
name="registerForm">
<forward name="success" path="/success.vm"/>
<forward name="failure" path="/failure.vm"/>
</action>
</action-mappings>
</struts-config>
配置文件與傳統(tǒng)的struts出奇的一致,唯一變化的就是在forward里的path寫成了vm文件,而不是我們傳統(tǒng)的jsp。
好了,寫到現(xiàn)在,MVC中的M和C都完成了,該是velocity上場了——View層。
注冊頁面register.vm的核心代碼:
<form action="struts.do" method="post">
username: <input type="text" name="username"/><BR>
password: <input type="text" name="password"/><BR>
again : <input type="text" name="password2"/><BR>
<input type="submit" name="submit" value="Register"/>
</form>
Success跳轉(zhuǎn)頁面success.vm:
<HTML>
<HEAD>
<TITLE>Success</TITLE>
</HEAD>
<BODY>
Registration Success!
Thanks for logging in $!registerForm.username
<P><A href="register.vm">Try Another?</A></P>
</BODY>
</HTML>
其中只用到了一個$!registerForm.username。整個代碼完成了,壓根沒用到什么context之類的東西。
源代碼來自http://www.wiley.com//legacy/compbooks/gradecki/apache/index.html
下載ch17.zip即可。
另http://www.ibm.com/developerworks/cn/java/j-sr1.html里George Franciscus講的也很詳細。