`

sttuts2和velocity整合

 
阅读更多

 在昨天是使用velocity和Servlet整合,其中使用继承(extends) VelocityViewServlet来实现servlet解析vm模板,发现这样写比较麻烦,今天研究了一下怎么和struts2进行整合,发现struts2可以很好的整合velocity。

 

项目结构为:



 

这个项目是用maven搭的项目,因为发现找jar包太麻烦了。

 

其中pom.xml文件为:

写道
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>VelocityStruts</groupId>
<artifactId>VelocityStruts</artifactId>
<packaging>war</packaging>
<name />
<version>0.0.1-SNAPSHOT</version>
<description />
<build>
<sourceDirectory>${basedir}/src</sourceDirectory>
<outputDirectory>${basedir}/WebRoot/WEB-INF/classes</outputDirectory>
<resources>
<resource>
<directory>${basedir}/src</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webappDirectory>${basedir}/WebRoot</webappDirectory>
<warSourceDirectory>${basedir}/WebRoot</warSourceDirectory>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>javaee-api</artifactId>
<version>5.0-1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>1.2_04</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>1.2_04</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.2.1</version>
</dependency>


<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-tools</artifactId>
<version>2.0</version>
</dependency>

<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
<dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.8.0.GA</version>
</dependency>

<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>

<dependency>
<groupId>avalon-logkit</groupId>
<artifactId>avalon-logkit</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>

</dependencies>
</project>

 

在用servlet和velocity结合的时候,需要手动的覆盖handleRequest(HttpServletRequest request,
            HttpServletResponse response, Context ctx)方法,并且手动的往ctx中写数据,才能在vm模板中读到数据,但是用struts2中,已经完全的简化了该步骤,直接像写普通的action一样,代码如下:

写道
package com.velocity.action;

import java.util.ArrayList;
import java.util.List;

import com.velocity.bean.Department;
import com.velocity.bean.Employee;

public class HelloWorld {

private String message;
private String userName;
private List<Employee> list=new ArrayList<Employee>();

public List<Employee> getList() {
return list;
}

public void setList(List<Employee> list) {
this.list = list;
}

public HelloWorld() {
}

public String execute() {
setMessage("Hello " + getUserName());


list.add(new Employee(1,"张三","北京",18,new Department(1,"软件研发部1")));
list.add(new Employee(2,"张三","北京",19,new Department(2,"软件研发部2")));
list.add(new Employee(3,"张三","北京",20,new Department(3,"软件研发部3")));
list.add(new Employee(4,"张三","北京",21,new Department(4,"软件研发部4")));
list.add(new Employee(5,"张三","北京",22,new Department(5,"软件研发部5")));
list.add(new Employee(6,"张三","北京",23,new Department(6,"软件研发部6")));
list.add(new Employee(7,"张三","北京",24,new Department(7,"软件研发部7")));
list.add(new Employee(8,"张三","北京",25,new Department(8,"软件研发部8")));
list.add(new Employee(9,"张三","北京",26,new Department(9,"软件研发部9")));
list.add(new Employee(10,"张三","北京",27,new Department(10,"软件研发部10")));


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;
}

}

 其中的bean类和上一篇文章中的一模一样,在这里就不重复了。

 

在struts中需要添加一个配置文件tools.xml(也可以不需要,该xml文件,就如他的名字一样,可以在vm中直接使用该配置文件中添加的工具变量,如date就是一个工具变量,可以在vm中通过日期:$date.get('yyyy-M-d H:m:s') 使用),代码如下:

写道
<?xml version="1.0"?>
<toolbox>
 <tool>
  <key>date</key>
  <scope>application</scope>
  <class>org.apache.velocity.tools.generic.DateTool</class>
  <parameter name="format" value="yyyy-M-d" />
 </tool>
 <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>

 如果想使用toolbox,必须在web.xml中添加如下一段话:

<init-param>
<param-name>org.apache.velocity.toolbox</param-name>
<param-value>/WEB-INF/toolbox.xml</param-value>     
</init-param>

 

 

 

以后的代码就和servlet类似了,在该项目中,我把vm模板文件放在了项目的根目录中了,如果想找到他的话,需要配置velocity.properties文件

写道
resource.loader = webapp
webapp.resource.loader.class = org.apache.velocity.tools.view.servlet.WebappLoader
webapp.resource.loader.path=  ---这里是配置vm的路径的
input.encoding=utf-8
output.encoding=utf-8

runtime.log =d/\:/velocity.log

web.xml文件如下

写道
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<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>
<init-param>
<param-name>org.apache.velocity.toolbox</param-name>
<param-value>/WEB-INF/toolbox.xml</param-value>
</init-param>
</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>

 

 

在web项目中loader.class 需要用 org.apache.velocity.tools.view.servlet.WebappLoader
其他的项目直接使用velocity包中的类就可以了。

velocity中也支持struts2中的ValueStack的数据,这样就轻松了很多,哈哈

其他的就没有什么可以说了,反正觉得struts和velocity结合的非常好。上传代码……

  • 大小: 10.9 KB
分享到:
评论

相关推荐

    Struts2+velocity 整合jar包

    Struts2+velocity 整合时所用的jar包 资源目录如下 commons-collections-3.1 commons-digester-2.0 commons-fileupload-1.2.2 commons-lang-2.5 freemarker-2.3.16 ognl-3.0.1 oro-2.0.8 struts2-core-2.2.3.1 ...

    shiro_spring_velocity整合

    **整合 Shiro、Spring 和 Velocity** 1. **Shiro 安全框架** Shiro 可以接管系统的安全性,负责用户登录、权限控制、密码加密和缓存管理。通过 Shiro,你可以定义 URL 过滤规则,将权限与用户角色关联,避免每次...

    struts2整合velocity

    在Struts2中整合Velocity还需要配置Velocity相关的依赖,确保项目中包含Velocity Engine库,并在Struts2的配置中指定Velocity工具库: ```xml &lt;constant name="struts.velocity.properties" value="/WEB-INF/...

    Struts+Velocity整合示例(含源码)

    整合Struts2和Velocity,主要是让Struts2的Action能够将处理结果传递给Velocity模板进行渲染。这通常通过配置Struts2的Result类型来完成,例如设置一个`velocity`类型的Result,指定对应的Velocity模板文件路径。在...

    velocity+ssi整合

    当Velocity和SSI整合时,通常是因为项目中存在一些历史遗留的SSI文件,为了保持兼容性或利用现有资源,我们需要在Velocity环境中处理这些文件。整合的关键在于如何在Velocity中解析和执行SSI指令。这可能涉及到...

    velocity+struts2实例,适合开发和整合使用

    整合Struts2和Velocity主要是为了让Struts2的动作类(Action)能够与Velocity模板进行交互。在Struts2的配置文件中,我们需要指定一个Result类型为"velocity",这样当Action执行完毕后,会使用Velocity模板来渲染...

    Struts2 整合 velocity最简单工程 最少的jar包

    Struts2 和 Velocity 的整合是Java Web开发中常见的技术组合,用于构建动态、高效的Web应用程序。Velocity 是一个基于模板语言的轻量级视图层框架,而Struts2 是一个强大的MVC(Model-View-Controller)框架。将这...

    springmvc+mybatis+velocity整合实例

    整合Spring MVC、MyBatis和Velocity,首先需要在项目的pom.xml文件中引入这三个框架的依赖。然后,配置Spring的ApplicationContext.xml,定义DataSource、SqlSessionFactoryBean、MapperScannerConfigurer等,以连接...

    Velocity语法以及整合struts2总结

    【Velocity语法以及整合struts2总结】 Velocity是一个开源的Java模板引擎,它是Apache软件基金会的Jakarta项目的一部分。...正确理解和掌握Velocity的语法和整合方法,能有效提升Web应用的开发效率和用户体验。

    spring mvc与velocity整合

    将Spring MVC与Velocity整合,可以实现高效且易于维护的前端展示。 **1. Spring MVC 概述** Spring MVC是Spring框架的一部分,它提供了一个灵活的MVC实现,包括请求处理、模型绑定、异常处理等功能。通过...

    spring mvc sitemesh velocity整合

    在本项目中,Spring MVC与两个额外的技术——Sitemesh和Velocity进行了整合,增强了应用的模板渲染和页面布局能力。 Sitemesh 是一个开源的Web应用装饰器框架,主要用于统一网站的页面布局和样式。通过Sitemesh,...

    SpringMVC+ibatis+velocity整合例子

    这个“SpringMVC+ibatis+velocity”整合例子虽然简单,但足以让初学者了解这些技术的基本用法和协同工作方式。通过实际操作,开发者可以更深入地理解Web开发中的分层架构、数据访问和模板渲染等关键概念。在实际项目...

    struts2整合velocity含源码

    整合Struts2和Velocity,首先需要在Struts2的配置文件(struts.xml)中声明Velocity结果类型。然后,在Action类中设置需要传递到视图的数据,这些数据可以通过Struts2的数据绑定自动注入到模型对象中。最后,...

    struts2 与 velocity 整合 探究

    NULL 博文链接:https://yjhexy.iteye.com/blog/978123

    Maven + Spring mvc + Mybatis + Velocity 整合实例

    本示例提供了一个基于Maven、Spring MVC、Mybatis和Velocity的整合实例,旨在帮助开发者理解并掌握这四大技术栈的协同工作方式。这四个组件在Java Web开发中扮演着至关重要的角色: 1. Maven:Maven是一款项目管理...

    struts2与velocity集成 实例

    Struts2和Velocity是两种广泛应用于Java Web开发的技术。Struts2是一个强大的MVC(Model-View-Controller)框架,而Velocity则是一个快速、轻量级的模板引擎,主要用于生成动态网页内容。将两者集成可以有效地提高...

    SpringMVC+Velocity+Maven整合例子

    Velocity2相较于前一版本,增强了性能和易用性,支持更多的模板语法特性,例如条件语句、循环结构等,同时提供了更好的错误处理和调试工具。 Maven则是一个项目管理和综合工具,它简化了构建、依赖管理和文档生成的...

    模板:velocity和freemarker的比较

    在 WebWork2 中,我们可以随意选择使用 Freemarker 或 Velocity 作为 View,模板技术作为 View 的好处是很多,尤其和 JSP 比较起来优点更大。 Velocity 和 Freemarker 都是开源的模板技术,它们都提供了强大的功能...

    Velocity 和 FreeMarker区别

    总的来说,**FreeMarker**在功能性和灵活性方面优于**Velocity**,尤其是在处理复杂逻辑和大规模项目时表现更佳。然而,如果项目的复杂度不高,或者对性能有特别要求,那么**Velocity**也是一个不错的选择。最终选择...

Global site tag (gtag.js) - Google Analytics