如果你对struts和velocity都不陌生,那么就请往下看吧。
我想大家对Struts都应该不会陌生,过去的几年里,Struts占去了MVC模式开发Web应用的大半江山,关于Struts的话题网络上有太多太多了。Velocity是近一两年才火起来的,它是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。有兴趣的朋友可以参照 http://www.junesky.org/blog/article.asp?id=14,也可以在官网 http://jakarta.apache.org/velocity/index.html 上了解更多Velocity的最新信息。
既然Struts与Velocity都是如此出色,并且它们关注的方面也不相同,何不将其优点集中起来进行开发呢?关于Struts和Velocity的配置方法请参照 http://www-128.ibm.com/developerworks/cn/java/j-sr1.html 这上面已经说的非常详细了,这里我们就不在说明了。请注意,以下步骤都是建立在环境都已配置成功的基础之上的。所以,在进行以下步骤之前,请确保你的环境已经配置成功。
根据上面的文章配置好环境后,就可以进行开发了。不过这里需要提醒各位一点,在配置toolbox.xml的时候,记得要先在这里 http://jakarta.apache.org/velocity/index.html 下载velocityTools,并将其拷贝至lib目录下后,才可以启动web容器,否则报错。这是因为在toolbox.xml配置了velocitytools中的类库。
在开始我们的例子前需要说明一下,这篇文章并不打算讲解如何使用struts和velocity,而是将目标锁定在struts和velocity的协同工作上面。
一切准备就绪后,就开始我们的第一个例子吧。
1、建立一个test.vm文件,和jsp放在同一目录中。
2、新建Form Bean,使它拥有一个属性test。
3、新建一个TestAction。
4、配置struts-config.xml文件
检查没有错误后,运行,就会在页面上显示出hello struts and velocity。
关于struts和velocity的配置是很容易理解的,最令初学者头痛的是,velocity是如何取到数据的?我们在单独使用velocity进行开发时,需要初始化,并为其设置想要返回的页面。如下:
而当与struts一同进行开发时,这一步就可以省去了,并且我们不必在为context中赋值:
我们只需在Struts的Action层中将值置入request或session中即能达到相同的效果。
我想大家对Struts都应该不会陌生,过去的几年里,Struts占去了MVC模式开发Web应用的大半江山,关于Struts的话题网络上有太多太多了。Velocity是近一两年才火起来的,它是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。有兴趣的朋友可以参照 http://www.junesky.org/blog/article.asp?id=14,也可以在官网 http://jakarta.apache.org/velocity/index.html 上了解更多Velocity的最新信息。
既然Struts与Velocity都是如此出色,并且它们关注的方面也不相同,何不将其优点集中起来进行开发呢?关于Struts和Velocity的配置方法请参照 http://www-128.ibm.com/developerworks/cn/java/j-sr1.html 这上面已经说的非常详细了,这里我们就不在说明了。请注意,以下步骤都是建立在环境都已配置成功的基础之上的。所以,在进行以下步骤之前,请确保你的环境已经配置成功。
根据上面的文章配置好环境后,就可以进行开发了。不过这里需要提醒各位一点,在配置toolbox.xml的时候,记得要先在这里 http://jakarta.apache.org/velocity/index.html 下载velocityTools,并将其拷贝至lib目录下后,才可以启动web容器,否则报错。这是因为在toolbox.xml配置了velocitytools中的类库。
在开始我们的例子前需要说明一下,这篇文章并不打算讲解如何使用struts和velocity,而是将目标锁定在struts和velocity的协同工作上面。
一切准备就绪后,就开始我们的第一个例子吧。
1、建立一个test.vm文件,和jsp放在同一目录中。
程序代码
<%@ page pageEncoding="utf-8"%>
<%
request.setCharacterEncoding("utf-8");
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>struts velocity 六月天</title>
</head>
<body>
${test.getTest()} //注意这里使用了velocity代码,从test对象中取数据。
</body>
</html>
<%
request.setCharacterEncoding("utf-8");
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>struts velocity 六月天</title>
</head>
<body>
${test.getTest()} //注意这里使用了velocity代码,从test对象中取数据。
</body>
</html>
2、新建Form Bean,使它拥有一个属性test。
程序代码
public class TestForm extends ActionForm {
private String test;
public String getTest() {
return test;
}
public void setTest(String test) {
this.test = test;
}
}
private String test;
public String getTest() {
return test;
}
public void setTest(String test) {
this.test = test;
}
}
3、新建一个TestAction。
程序代码
public class TestAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest req, HttpServletResponse res) {
TestForm cform = (TestForm)form;
cform.setTest("hello struts and velocity");
//注意这里,将form置入request中,它的key是test
//这个key也就是vm页面中的test对象的引用 ${test.getTest()}
req.setAttribute("test", cform);
return mapping.findForward("success");
}
}
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest req, HttpServletResponse res) {
TestForm cform = (TestForm)form;
cform.setTest("hello struts and velocity");
//注意这里,将form置入request中,它的key是test
//这个key也就是vm页面中的test对象的引用 ${test.getTest()}
req.setAttribute("test", cform);
return mapping.findForward("success");
}
}
4、配置struts-config.xml文件
程序代码
<form-beans>
<form-bean name="TestForm" type="org.junesky.form.TestForm"/>
</form-beans>
<action
name="TestForm"
input="/error.jsp"
scope="request"
path="/test"
validate="false"
type="org.junesky.action.TestAction" >
<forward
name="success"
path="/test.vm" />
</action>
<form-bean name="TestForm" type="org.junesky.form.TestForm"/>
</form-beans>
<action
name="TestForm"
input="/error.jsp"
scope="request"
path="/test"
validate="false"
type="org.junesky.action.TestAction" >
<forward
name="success"
path="/test.vm" />
</action>
检查没有错误后,运行,就会在页面上显示出hello struts and velocity。
关于struts和velocity的配置是很容易理解的,最令初学者头痛的是,velocity是如何取到数据的?我们在单独使用velocity进行开发时,需要初始化,并为其设置想要返回的页面。如下:
程序代码
VelocityEngine ve = new VelocityEngine();
ve.init();
Template t = ve.getTemplate( "hellosite.vm" );
ve.init();
Template t = ve.getTemplate( "hellosite.vm" );
而当与struts一同进行开发时,这一步就可以省去了,并且我们不必在为context中赋值:
程序代码
VelocityContext context = new VelocityContext();
context.put("test", "hello struts and velocity ");
context.put("test", "hello struts and velocity ");
我们只需在Struts的Action层中将值置入request或session中即能达到相同的效果。