Velocity筆記下 – JAVA編程語言程序開發技術文章

Velocity與struts結合應用:
具體通過一個實際的例子來解釋,例子選擇以傳統的註冊模塊為主(主要是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配置中的初始參數傳入瞭toolbox.xml,該文件的具體內容如下:


<?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文件的意義就在於定義瞭很多類,來串聯整個struts和velocity還有javabean等各個元素。


接著就開始配置struts瞭,首先考慮到這個應用,struts的第一步就是要寫form瞭。首先構建一個RegisterForm。代碼如下,這個javabean用來當做model定義數據。


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表單讀入數據,如果密碼和驗證密碼相同,那麼就跳到success,否則是failure,這個邏輯非常簡單。Struts中也看不出任何的velocity相關(那當然,這就叫低耦合,各幹各的,分層處理)


然後該配置熟悉的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>


配置文件與傳統的struts出奇的一致,唯一變化的就是在forward裡的path寫成瞭vm文件,而不是我們傳統的jsp。


好瞭,寫到現在,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跳轉頁面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講的也很詳細。

發佈留言