搭建SSH,从零开始(第N天)—在Struts2中集成Velocity
一,Velocity是什麽?
具体概念在百度中都能找到,不赘述。可以参见http://airport.iteye.com/blog/23634
简单点说,Velocity与JSP类似。就是一个模板技术,通过后台JAVA程序进行变量的计算和赋值,前端模板vm文件使用后台计算的变量排版表示。优点是
1,可以不使用JSP的Taglib,容易扩展
2,完全的界面design和后台分离。互不影响
3,与jsp相比,效率更高
二,Struts2与Velocity的集成方法
参考资料:https://struts.apache.org/docs/velocity.html
1,依赖Jar包导入
最新的Struts2中已经提供了集成Velocity时所需的依赖jar包,集成时需要导入以下Jar包(struts-2.3.20-all\struts-2.3.20\lib)。
・velocity-tools-1.3.jar
・velocity-1.6.4.jar
・commons-collections-3.1.jar
・commons-lang-2.4.jar
2,配置文件Check
检查struts-default.xml文件中Velocity Result是否已配置。
struts-default.xml路径:struts2-core-2.3.20.jar/struts-default.xml
3,在Struts2中使用Velocity
1的依赖和2的配置都OK的话,可以直接使用Velocity模板。配置如下,在Result中声明type为velocity并跳转到vm模板
<action name="testLogin" class="gravehistory.test.struts.LoginAction"> <result name="fail">/test/login.jsp</result> <result name="input">/test/login.jsp</result> <result name="success" type="velocity">/test/test-success.vm</result> </action>test-success.vm
<html> <head> <title>Hello</title> </head> <body> Hello, $userName </body>以上userName在LoginAction做为属性被定义
<pre name="code" class="java">public class LoginAction extends ActionSupport { private String userName; private String passWord; public void validate() { //省略 } public String execute() { //useraname的赋值等 } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassWord() { return passWord; } public void setPassWord(String passWord) { this.passWord = passWord; } }
</html>
4,显示效果:
提交后
三,Velocity中自定义Macro的使用和配置
如果Velocity提供的标签不能满足需求,可以基于现有的标签创建新的macro对其进行扩展。macro是可嵌套的。所谓的macro,可以理解为vm中的一个函数,传入参数,获取处理后的html片段,支持html标签。
1,创建macro文件,定义新的macro
创建文件WEB-INF\vm\macro.vm
#macro(test $msg) <h1>*****$!{msg}*****<h1> #end
2,配置velocity,使其可以使用自定义的macro
velocity的配置文件为velocity.properties,路径为WEB-INF\velocity.properties
配置内容
velocimacro.library = WEB-INF/vm/macro.vm
3,vm中使用方法
修改后的test-success.vm<html> <head> <title>Hello</title> </head> <body> Hello, #test($userName) </body> </html>
4,显示效果
四,其它问题说明
按照之前的的配置和部署在Local环境下,可正常运行。在远程服务器上发现有如下问题:
问题1:提示/test/test-success.vm 找不到
解决方法1:将/test/test-success.vm放在resources目录下,编译至classpath
问题2:/test/test-success.vm可以访问,但是自定义macro不起作用
解决方法:之前放在/WEB-INFO下的velocity.properties未被找到,所以将velocity.properties也放在resources目录下
问题3:velocity.properties可以被访问,但使用自定macro时,velocity.properties中配置的macro库找不到
解决方法:将macro库放到resources目录下,并修改velocity.properties
修改后的目录结构如下
相关推荐
newfarhui 2019-11-04
upxiaofeng 2019-11-04
ErixHao 2014-06-26
yangjinpingc 2014-11-27
strburnchang 2015-01-17
yangjinpingc 2012-06-07
whileinsist 2013-05-31
xiajlxiajl 2011-07-28
Stephenmu 2017-01-08
81941231 2019-06-30
88251546 2015-02-16
liuyaping 2013-04-25
沙丁鱼 2012-02-16
87453661 2016-02-16
finalcola 2011-09-22
82384399 2011-05-16