Velocity与struts结合应用:
具体通过一个实际的例子来解释,例子选择以传统的注册模块为主(主要是joseph的书上就这么写的)
首先,web.xml文件配置情况struts部分就不讲了,velocity的配置如下所示:
VelocityViewServlet
其中velocity的servlet配置中的初始参数传入了toolbox.xml,该文件的具体内容如下:
< xml version="1.0" >
这个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了。核心代码如下:
type="RegisterAction" name="registerForm">
配置文件与传统的struts出奇的一致,唯一变化的就是在forward里的path写成了vm文件,而不是我们传统的jsp。
好了,写到现在,MVC中的M和C都完成了,该是velocity上场了――View层。
注册页面register.vm的核心代码:
Success跳转页面success.vm:
Registration Success!
Thanks for logging in $!registerForm.username
其中只用到了一个$!registerForm.username。整个代码完成了,压根没用到什么context之类的东西。
源代码来自http://www.wiley.com//legacy/compbooks/gradecki/apache/index.html
下载ch17.zip即可。
另html">http://www.ibm.com/developerworks/cn/java/j-sr1.html里George Franciscus讲的也很详细。