感觉现在的JAVA框架越来越多,纷繁复杂。想彻底研究一种框架,了解下其中的一些通用的东西,于是选择了struts2。
看了很多struts2的文档,发现很多都是在讲struts2与JSP使用很多标签库,我不喜欢用那么多的标签,于是研究了下如何使用velocity与 struts2整合。
主要有四个步骤:
1,添加pom依赖 (这里我采用 maven管理依赖,相当方便)
- <dependency>
- <groupId>org.apache.velocity</groupId>
- <artifactId>velocity</artifactId>
- <version>1.6</version>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.velocity</groupId>
- <artifactId>velocity-tools</artifactId>
- <version>1.3</version>
- <scope>compile</scope>
- </dependency>
2,修改web.xml
- <!DOCTYPE web-app PUBLIC
- "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
- "http://java.sun.com/dtd/web-app_2_3.dtd" >
- <web-app>
- <display-name>Archetype Created Web Application</display-name>
- <filter>
- <filter-name>struts2</filter-name>
- <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <servlet>
- <servlet-name>velocity</servlet-name>
- <servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServlet</servlet-class>
- </servlet>
- <!-- Map *.vm files to Velocity -->
- <servlet-mapping>
- <servlet-name>velocity</servlet-name>
- <url-pattern>*.vm</url-pattern>
- </servlet-mapping>
- <welcome-file-list>
- <welcome-file>index.vm<welcome-file>
- </welcome-file-list>
- </web-app>
3,增加/WEB-INF/velocity.properties
这里根据需要加velocity参数,我暂时啥参数也不加,整个空文件,用默认的总可以吧,需要的时候再加好了。
4,增加/EB-INF/toolbox.xml
- <?xml version="1.0"?>
- <toolbox>
- <tool>
- <key>link</key>
- <scope>request</scope>
- <class>org.apache.velocity.tools.struts.StrutsLinkTool</class>
- </tool>
- <tool>
- <key>msg</key>
- <scope>request</scope>
- <class>org.apache.velocity.tools.struts.MessageTool</class>
- </tool>
- <tool>
- <key>errors</key>
- <scope>request</scope>
- <class>org.apache.velocity.tools.struts.ErrorsTool</class>
- </tool>
- <tool>
- <key>form</key>
- <scope>request</scope>
- <class>org.apache.velocity.tools.struts.FormTool</class>
- </tool>
- <tool>
- <key>tiles</key>
- <scope>request</scope>
- <class>org.apache.velocity.tools.struts.TilesTool</class>
- </tool>
- <tool>
- <key>validator</key>
- <scope>request</scope>
- <class>org.apache.velocity.tools.struts.ValidatorTool</class>
- </tool>
- </toolbox>
好,到此为止整合完毕。
最后添上一个helloworld.vm
- velocity的helloWorld
- #foreach( $header in $request.HeaderNames )
- <b>$header:</b> $request.getHeader($header)<br>
- #end
试一下吧,会打出浏览器的一些请求的head出来。原来不是helloworld,呵呵。但是还是小有成就感,至少出来点东西了吗。
====================邪恶的分割线==================
接下来我们来真正的helloWorld。
1,建立index.vm
- <html>
- <body>
- <form action="HelloWorld">
- <input type="text" name="userName"/>
- <input type="submit" value="提交" />
- </form>
- </body>
- </html>
2,修改struts.xml
加上如下配置
- <package name="default" extends="struts-default">
- <action name="HelloWorld" class="com.yajun.helloworld.HelloWorld">
- <result name="SUCCESS">/success.vm</result>
- </action>
- </package>
3,如上面的配置所示,还需要加入
com.yajun.helloworld.HelloWorld 这个类:
- package com.yajun.helloworld;
- public class HelloWorld {
- private String message;
- private String userName;
- public HelloWorld(){
- }
- public String execute() {
- setMessage("Hello " + getUserName());
- return "SUCCESS";
- }
- public String getMessage() {
- return message;
- }
- public void setMessage(String message) {
- this.message = message;
- }
- public String getUserName() {
- return userName;
- }
- public void setUserName(String userName) {
- this.userName = userName;
- }
- }
和success.vm
- <html>
- <head>
- <title>Hello World</title>
- </head>
- <body>
- <h1>$message</h1>
- </body>
- </html>
完成了,运行吧。哈哈。
感觉比标签清爽许多,而且velocity可以直接从 struts2 的 valueStack中 取得像要的值,还是挺不错的。
但是,有突然发现,中文显示有问题呀。于是想到了velocity.properties那个文件还需要配置个东西:
input.encoding = GBK
output.encoding = GBK
这下一个HelloWorld应该OK了。