- 浏览: 470213 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
chexiazi:
一样的xml代码 报这个错 <ns1:XMLFault ...
CXF 通过用户名和密码进行验证 -
di1984HIT:
谢谢啊 ~~~
通过JavaCompiler进行编译java文件(转载) -
aa00aa00:
'%${userName}%' 这种是可以的,是可以模糊查询的 ...
mybatis 模糊查询 -
一棵杨柳的地盘:
我把你的代码不了一遍 但是汇报错首先:static { ...
CXF 通过用户名和密码进行验证 -
shangmin1990:
转 IntelliJ IDEA 编辑器生成 Hibernate 实体映射文件
在昨天是使用velocity和Servlet整合,其中使用继承(extends) VelocityViewServlet来实现servlet解析vm模板,发现这样写比较麻烦,今天研究了一下怎么和struts2进行整合,发现struts2可以很好的整合velocity。
项目结构为:
这个项目是用maven搭的项目,因为发现找jar包太麻烦了。
其中pom.xml文件为:
<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一样,代码如下:
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') 使用),代码如下:
<tool>
<key>date</key>
<scope>application</scope>
<class>org.apache.velocity.tools.generic.DateTool</class>
<parameter name="format" value="yyyy-M-d" />
<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文件
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文件如下
<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结合的非常好。上传代码……
发表评论
-
ajax文件导出
2018-10-22 14:50 2228前提ajax是没 ... -
velocity 取reuqust中的数据
2012-02-01 19:55 1265在servlet中写入request.setAttribute ... -
转Jquery UI dialog 详解 (中文)
2012-01-18 16:42 12611 属性 1.11 autoOpen ,这个属性为true的 ... -
maven package 命令报:-source1.3 中不支持注释错误
2012-01-12 13:22 3907在使用maven 打包或者编译时报:-source1.3 中不 ... -
jquery 使用ajax 提交整个表单的数据
2012-01-06 14:52 5920在使用Struts开发项目的时候发现很爽的一件事就是可以不使用 ... -
struts2 通配符
2011-12-31 16:25 1287在使用struts2时,如果想定义action的话可以这样做 ... -
Maven Web项目部署到Tomcat下
2011-12-30 17:28 19548通过Maven来搭建项目是 ... -
Could not find artifact com.sun:tools:jar:1.5.0 解决方案
2011-12-29 17:22 2871在使用myeclipse 工具开发maven与struts2结 ... -
(转)Velocity宏Velocimacros
2011-12-29 14:50 1083#macro脚本元素允许模版设计者定义一段可以重复使用的VTL ... -
Velocity初始化过程解析
2011-12-29 13:35 1586Velocity初始化过程解析 Velocity是 ... -
(转)Struts2学习笔记--Internationalization
2011-11-21 18:13 1333Struts2 的国际化 ======== ... -
maven 自动打包
2011-04-25 11:56 2076转自:http://skydream.it ... -
$.get方法缓存问题
2011-04-19 12:26 3056$.get 方法缓存的问题 ajax的get方法在ie中存在 ... -
删除表格
2009-02-25 18:15 966有时候我们会决定我们需要从数据库中清除一个表格。事实上,如果我 ... -
js 获取当前日期
2010-07-26 11:28 1023Js 获取当前日期 文章分类:Web前端 var myDa ... -
如果防止IE出现“要再次显示该网页internet exploer 需要重新发送您以前提交的信息..”
2010-08-02 10:01 7645在做asp.net 项目时遇到了一个需求,是在编辑对话框,在 ... -
javascript:浮动div,可拖拽div,遮罩层(div和iframe实现)
2010-08-10 10:45 1797在网页中,经常需要标题里提到的几种效果,实现比较简单,这里总结 ... -
一个form,多个submit提交
2010-09-17 22:00 1913在很多 Web 应用中,为了完成不同的工作,一个 HTML f ...
相关推荐
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** 1. **Shiro 安全框架** Shiro 可以接管系统的安全性,负责用户登录、权限控制、密码加密和缓存管理。通过 Shiro,你可以定义 URL 过滤规则,将权限与用户角色关联,避免每次...
在Struts2中整合Velocity还需要配置Velocity相关的依赖,确保项目中包含Velocity Engine库,并在Struts2的配置中指定Velocity工具库: ```xml <constant name="struts.velocity.properties" value="/WEB-INF/...
整合Struts2和Velocity,主要是让Struts2的Action能够将处理结果传递给Velocity模板进行渲染。这通常通过配置Struts2的Result类型来完成,例如设置一个`velocity`类型的Result,指定对应的Velocity模板文件路径。在...
当Velocity和SSI整合时,通常是因为项目中存在一些历史遗留的SSI文件,为了保持兼容性或利用现有资源,我们需要在Velocity环境中处理这些文件。整合的关键在于如何在Velocity中解析和执行SSI指令。这可能涉及到...
整合Struts2和Velocity主要是为了让Struts2的动作类(Action)能够与Velocity模板进行交互。在Struts2的配置文件中,我们需要指定一个Result类型为"velocity",这样当Action执行完毕后,会使用Velocity模板来渲染...
Struts2 和 Velocity 的整合是Java Web开发中常见的技术组合,用于构建动态、高效的Web应用程序。Velocity 是一个基于模板语言的轻量级视图层框架,而Struts2 是一个强大的MVC(Model-View-Controller)框架。将这...
整合Spring MVC、MyBatis和Velocity,首先需要在项目的pom.xml文件中引入这三个框架的依赖。然后,配置Spring的ApplicationContext.xml,定义DataSource、SqlSessionFactoryBean、MapperScannerConfigurer等,以连接...
【Velocity语法以及整合struts2总结】 Velocity是一个开源的Java模板引擎,它是Apache软件基金会的Jakarta项目的一部分。...正确理解和掌握Velocity的语法和整合方法,能有效提升Web应用的开发效率和用户体验。
将Spring MVC与Velocity整合,可以实现高效且易于维护的前端展示。 **1. Spring MVC 概述** Spring MVC是Spring框架的一部分,它提供了一个灵活的MVC实现,包括请求处理、模型绑定、异常处理等功能。通过...
在本项目中,Spring MVC与两个额外的技术——Sitemesh和Velocity进行了整合,增强了应用的模板渲染和页面布局能力。 Sitemesh 是一个开源的Web应用装饰器框架,主要用于统一网站的页面布局和样式。通过Sitemesh,...
这个“SpringMVC+ibatis+velocity”整合例子虽然简单,但足以让初学者了解这些技术的基本用法和协同工作方式。通过实际操作,开发者可以更深入地理解Web开发中的分层架构、数据访问和模板渲染等关键概念。在实际项目...
整合Struts2和Velocity,首先需要在Struts2的配置文件(struts.xml)中声明Velocity结果类型。然后,在Action类中设置需要传递到视图的数据,这些数据可以通过Struts2的数据绑定自动注入到模型对象中。最后,...
NULL 博文链接:https://yjhexy.iteye.com/blog/978123
本示例提供了一个基于Maven、Spring MVC、Mybatis和Velocity的整合实例,旨在帮助开发者理解并掌握这四大技术栈的协同工作方式。这四个组件在Java Web开发中扮演着至关重要的角色: 1. Maven:Maven是一款项目管理...
Struts2和Velocity是两种广泛应用于Java Web开发的技术。Struts2是一个强大的MVC(Model-View-Controller)框架,而Velocity则是一个快速、轻量级的模板引擎,主要用于生成动态网页内容。将两者集成可以有效地提高...
Velocity2相较于前一版本,增强了性能和易用性,支持更多的模板语法特性,例如条件语句、循环结构等,同时提供了更好的错误处理和调试工具。 Maven则是一个项目管理和综合工具,它简化了构建、依赖管理和文档生成的...
在 WebWork2 中,我们可以随意选择使用 Freemarker 或 Velocity 作为 View,模板技术作为 View 的好处是很多,尤其和 JSP 比较起来优点更大。 Velocity 和 Freemarker 都是开源的模板技术,它们都提供了强大的功能...
总的来说,**FreeMarker**在功能性和灵活性方面优于**Velocity**,尤其是在处理复杂逻辑和大规模项目时表现更佳。然而,如果项目的复杂度不高,或者对性能有特别要求,那么**Velocity**也是一个不错的选择。最终选择...