- 浏览: 338016 次
- 性别:
- 来自: 济南
文章分类
最新评论
-
u013810758:
[flash=200,200][url][img][list] ...
poi 解析excel 03与07不兼容问题 -
u013810758:
我也是这么做的 但是还是有问题啊 感觉07版的或03版的内容 ...
poi 解析excel 03与07不兼容问题 -
sezi915:
我觉得如果用异常来判断Excel版本的话 用org.apach ...
poi 解析excel 03与07不兼容问题 -
他大姨妈:
思路很好,楼主脑子比较好使
poi 解析excel 03与07不兼容问题 -
zhenlong_qu:
谢谢博主的这篇文章,不得不说,博主的思路真不错,按照这个思路, ...
poi 解析excel 03与07不兼容问题
Apache官方网站Velocity Tools自带的例子(位置:\velocity-tools-1.4-src\examples\simple)。
新建一个Web Project,名称为Velocity。
在src下面实现一个ToyTool类,如下所示:
public class ToyTool
{
private String message = "Hello from ToyTool!";
public String getMessage()
{
return message;
}
public void setMessage(String m)
{
message = m;
}
/** To test exception handling in templates. */
public boolean whine() {
throw new IllegalArgumentException();
}
}
这个类实现了一个简单的JavaBean,带setter和getter,操作的属性是message。
模板文件为index.vm,内容如下所示:
<html>
<body>
I'm a velocity template.
#if( $XHTML )
#set( $br = "<br />" )
#else
#set( $br = "<br>" )
#end
$br
$br
Here we use a custom tool: $toytool.message
$br
$br
Here we get the date from the DateTool: $date.medium
</body>
</html>
在这个自带的例子中,并没有实际实现一个自己的Servlet,而是直接使用了 org.apache.velocity.tools.view.servlet.VelocityViewServlet,该类位 于\velocity-tools-1.4-src\src\java\org\apache\velocity\tools\view\servlet 下面。
用到org.apache.velocity.tools.view.servlet.VelocityViewServlet,在该类中实现了对toolbox.xml的解析。可以在web.xml中对应的配置来了解到都配置了哪些项。
web.xml中配置如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee
"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd
">
<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>
<load-on-startup>10</load-on-startup>
</servlet>
<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>
其中,toolbox.xml的内容如下所示:
<toolbox>
<xhtml>true</xhtml>
<tool>
<key>toytool</key>
<class>ToyTool</class>
</tool>
<data type="number">
<key>version</key>
<value>1.1</value>
</data>
<data type="boolean">
<key>isSimple</key>
<value>true</value>
</data>
<data type="string">
<key>foo</key>
<value>this is foo.</value>
</data>
<data type="string">
<key>bar</key>
<value>this is bar.</value>
</data>
<tool>
<key>map</key>
<class>java.util.HashMap</class>
</tool>
<tool>
<key>date</key>
<scope>application</scope>
<class>org.apache.velocity.tools.generic.DateTool</class>
</tool>
</toolbox>
将对应的jar包文件加入到CLASSPATH中,启动Tomcat Web Server ,在浏览器地址栏中键入http://localhost:8080/Velocity/index.vm 就可以看到这个简单的例子运行的效果了:
I'm a velocity template.
Here we use a custom tool: Hello from ToyTool!
Here we get the date from the DateTool: 2008-4-19 21:23:50
既然,web.xml中指定了初始化参数:key为org.apache.velocity.toolbox,value为/WEB-INF /toolbox.xml文件,那么,在Web Server(这里使用Tomcat)启动的时候,就要解析/WEB-INF/toolbox.xml。
其实,这里隐藏了很多细节,需要解析的不仅仅是/WEB-INF/toolbox.xml,在解析它之前还有很多工作要做。
可以在VelocityViewServlet的源代码中看到实际的过程。VelocityViewServlet继承了HttpServlet,表现出了它是有生命周期的。其中在init方法中可以看到初始化过程:
public void init(ServletConfig config) throws ServletException
{
super.init(config);
// 根据config信息初始化Velocity,这时Web Server启动的时候要做的第一件事
initVelocity
(config);
// 初始化toolbox
initToolbox
(config);
// 当Velocity已经初始化完成之后,下面要做的一些事情:设置ContentType和编码等等等
defaultContentType =
(String)getVelocityProperty(CONTENT_TYPE, DEFAULT_CONTENT_TYPE);
String encoding =
(String)getVelocityProperty(RuntimeConstants.OUTPUT_ENCODING,
DEFAULT_OUTPUT_ENCODING);
// For non Latin-1 encodings, ensure that the charset is
// included in the Content-Type header.
if (!DEFAULT_OUTPUT_ENCODING.equalsIgnoreCase(encoding))
{
int index = defaultContentType.lastIndexOf("charset");
if (index < 0)
{
// the charset specifier is not yet present in header.
// append character encoding to default content-type
defaultContentType += "; charset=" + encoding;
}
else
{
// The user may have configuration issues.
velocity.warn("VelocityViewServlet: Charset was already " +
"specified in the Content-Type property. " +
"Output encoding property will be ignored.");
}
}
velocity.info("VelocityViewServlet: Default content-type is: " +
defaultContentType);
}
上面代码中,第一件事是initVelocity,即窄initVelocity方法中注册Velocity引擎
protected void initVelocity(ServletConfig config) throws ServletException
{
velocity = new VelocityEngine(); // 实例化一个VelocityEngine
setVelocityEngine(velocity); // 将已经创建的VelocityEngine设置到当前Velocity上下文中
// 注册
LogSystemCommonsLog.setVelocityEngine(velocity);
velocity.setApplicationAttribute(SERVLET_CONTEXT_KEY, getServletContext());
// 尝试读取VelocityTools 默认配置信息
try
{
/** 这里要读取Velocity的默认配置文件了,即org/apache/velocity/tools/view/servlet/velocity.properties文件,该文件默认设置如下所示:
# default to servletlogger, which logs to the servlet engines log
runtime.log.logsystem.class = org.apache.velocity.tools.view.servlet.ServletLogger
# by default, load resources with webapp resource loader
resource.loader = webapp
webapp.resource.loader.class = org.apache.velocity.tools.view.servlet.WebappLoader
*/
ExtendedProperties defaultProperties = loadDefaultProperties();
velocity.setExtendedProperties(defaultProperties);
}
catch(Exception e)
{
log("VelocityViewServlet: Unable to read Velocity Servlet configuration file: ", e);
throw new ServletException(e);
}
// velocity
.properties文件是可以由用户自己根据需要配置的,如果用户自己重新设置了该文件,在这里解析
try
{
ExtendedProperties p = loadConfiguration(config);
velocity.setExtendedProperties(p);
}
catch(Exception e)
{
log("VelocityViewServlet: Unable to read Velocity configuration file: ", e);
log("VelocityViewServlet: Using default Velocity configuration.");
}
// 当velocity
.properties文件加载完成,初始化VeloccityEngine
try
{
velocity.init();
}
catch(Exception e)
{
log("VelocityViewServlet: PANIC! unable to init()", e);
throw new ServletException(e);
}
}
接着就是initToolbox,开始解析/WEB-INF/toolbox.xml文件,initToolbox方法实现如下:
protected void initToolbox(ServletConfig config) throws ServletException
{
// 获取在web.xml中设置的toolbox.xml
String file = findInitParameter(config, TOOLBOX_KEY);
if (file == null)
{
// ok, look in the default location
file = DEFAULT_TOOLBOX_PATH;
velocity.debug("VelocityViewServlet: No toolbox entry in configuration."
+ " Looking for '" + DEFAULT_TOOLBOX_PATH + "'");
}
// 获取一个管理toolbox.xml的管理toolboxManager
toolboxManager =
ServletToolboxManager.getInstance(getServletContext(), file);
}
ToolboxManager是一个接口:
package org.apache.velocity.tools.view;
import java.util.Map;
public interface ToolboxManager
{
void addTool(ToolInfo info);
void addData(ToolInfo info);
Map getToolbox(Object initData);
}
它有一个实现子类XMLToolboxManager,可以完成对XML配置文件(比如toolbox.xml文件)的一些操作,其中,XMLToolboxManager类方法load实现了对XML文件的加载和解析:
public void load(InputStream input) throws Exception
{
LOG.trace("Loading toolbox...");
Digester digester = new Digester();
digester.setValidating(false);
digester.setUseContextClassLoader(true);
digester.push(this);
digester.addRuleSet(getRuleSet());
digester.parse(input);
LOG.trace("Toolbox loaded.");
}
发表评论
-
标题叠加在图片上面的几种显示方式
2014-02-24 10:55 1506很多新改版的网站都会在图片显示上下一些文章,比如加 ... -
原生js
2013-11-27 16:46 1150jQuery目前已经成为最流行的JavaScript库,它可 ... -
jquery 滚动条加载数据
2013-10-11 21:25 1165无刷新动态加载数据,滚动条加载 滚屏加载更多数据,适 ... -
正则表达式 匹配url
2013-07-09 14:27 1590正则表达式 (http|ftp|https):\ ... -
CSS实现兼容性的渐变背景(gradient)效果
2013-06-05 14:32 1046CSS实现兼容性的渐变背 ... -
javascript js hashmap 的实现
2012-07-12 10:12 2733function HashMap(){ /**Map大小** ... -
java 正则表达式详解
2012-06-20 17:37 971在Sun的Java JDK 1.40版本中 ... -
js去掉数组中的重复值和删除指定元素
2012-02-14 11:06 1760//在数组中移除指定位置的元素,返回删除指定元素后的数组 ... -
jquery 选择器
2011-04-25 15:58 870jQuery的选择器是CSS 1-3,XPath的结合物。jQ ... -
jquery 操作select checkbox radio
2011-04-25 11:53 1155一 、Select jQuery获取Select选择的Text ... -
js 操作iframe
2011-04-20 17:19 1234父级窗口操作iframe里的dom JS操作iframe里的 ... -
常用正则表达式
2011-04-12 14:19 851匹配中文字符的正则表达式: [u4e00-u9fa5]评注:匹 ... -
jquery 操作select
2011-04-12 13:34 877jQuery获取Select选择的Text和Value:语法解 ... -
js 注意事项
2011-02-24 16:29 1062[u][/u] 最近自己的写的js ... -
exijs学习文档
2010-12-29 13:00 875很好的extjs学习文档
相关推荐
- **模板渲染优化**:通过分析 Velocity Tools 源码,开发者可以学习如何优化模板渲染速度,例如避免不必要的计算或减少模板中的逻辑复杂度。 - **自定义工具**:根据项目需求,开发者可以参考 Velocity Tools 的...
本课程的定位是velocity的系统教学课程 , 从基础到进阶 , 所以只要对velocity感兴趣 , 想系统学习velocity的开发人员都可以学习本课程 ! 学习本课程对你有如下要求 : l 有一定的JAVA编程基础(velocity engine要求) l...
"velocity-tools-1.3-src" 是一个开源项目,它包含 Velocity Tools 的源代码,版本为1.3。...通过阅读和理解这些源代码,开发者可以学习到 Velocity 模板引擎的使用技巧,以及如何创建和维护开源项目。
通过学习Velocity,你可以构建出更加整洁、易于维护的前端界面,同时提高开发效率。在实际项目中,Velocity常常与Spring MVC、Struts等后端框架配合使用,构建高效的MVC架构。如果你已经熟悉JSP,那么转向Velocity会...
4. **velocity-tools-view-1.2.jar**:这是Velocity Tools的View模块,提供了额外的功能和集成,使得Velocity更易于与Web应用框架(如Struts、Spring MVC)结合使用。它包含了一些工具类和视图助手,比如国际化支持...
Velocity是Apache软件基金会的一个开源项目,它是一款Java模板...对于新手,建议先从基础的Velocity模板语言开始学习,然后逐渐熟悉并掌握Velocity Tools的使用,以便更好地利用Velocity构建高效、可维护的Web应用。
6. **Velocity工具箱 (Velocity Tools)**: Velocity Tools是Velocity的一个扩展库,提供了许多有用工具,如日期格式化、国际化、URL生成等。这些工具可以在Velocity模板中直接使用,增强模板的功能。 7. **模板设计...
- 用户还可以通过Velocity Tools框架添加自定义工具,增强模板的功能。 7. **性能优化** - 了解如何通过缓存管理、减少不必要的模板解析和优化VTL代码来提升Velocity的性能。 - 使用Velocity Profiler工具进行...
1. 在Spring MVC项目中添加对Velocity的支持,通过Maven配置velocity和velocitytools依赖。 2. 配置视图解析器(ViewResolver),指向存放模板文件的位置。 3. 在控制器(Controller)中创建数据模型,并返回对应的...
- **Velocity Tools**: 这是一个扩展库,提供了许多有用的工具,如视图辅助类,可以帮助简化模板编程。 - **Velocity模板最佳实践**: 如避免在模板中进行复杂计算,保持模板简洁,将业务逻辑留在后端代码中。 - *...
此外,还可以通过 `VelocityTools` 注册工具类,将常用的 Java 类库方法暴露给模板使用,例如日期格式化、URL编码等。 **5. 与其他技术的集成** Velocity 可以轻松地与Spring、Struts等其他Java Web框架集成,提供...
1. **添加依赖**:在`pom.xml`中,你需要添加Velocity相关的依赖,包括Velocity引擎和Velocity Tools,这些依赖会确保Maven可以运行Velocity模板。 2. **配置Velocity插件**:Maven有许多插件可以帮助处理Velocity...
8. **Velocity工具箱(Velocity Tools)**:Velocity Tools是Velocity的一个扩展,提供了许多有用的工具,如国际化支持、日期/时间格式化、对象转换等,可以极大地增强模板的功能。 9. **配置与实践**:在实际项目...
4. **可扩展性**:Velocity可以通过Velocity Tools等工具集进行扩展,如Velocity Toolbox提供了许多实用的工具和辅助类。 **二、Velocity在Struts2中的整合** Struts2是一个流行的MVC框架,它默认支持多种视图技术...
2. `velocity-tools-view`:Spring MVC与Velocity集成所需的工具库。 在Spring配置文件中,你需要定义一个`VelocityViewResolver`,这将负责解析模板并将其转换为实际的视图。同时,还需要配置`VelocityConfigurer`...
学习Velocity,你需要掌握如何创建和使用模板、如何管理上下文、如何编写和使用自定义工具,以及如何优化模板性能。此外,熟悉Java编程和面向对象设计原则将对使用Velocity大有裨益。在实际应用中,Velocity通常与...
Velocity 使用简单的语法,易于学习,使得非程序员也能参与到页面设计中。 **2. JDK 1.7 要求** Velocity 1.7 版本需要 Java Development Kit(JDK)1.7 或更高版本来运行。JDK 1.7 引入了一些重要的改进,如更...
Struts2 和 Velocity 的整合是Java Web开发中常见的技术组合,用于...在不断实践和学习中,你可以掌握这个组合的更多高级用法,比如使用Velocity Tools增强模板功能,或者利用Struts2的拦截器实现更灵活的控制流程。
- 强大的工具支持:如VelocityTools提供了各种辅助工具,如日期/时间处理,国际化等。 ### 7. 实战应用 在导入的Eclipse项目中,你可能会看到以下组件: - `velocity.properties` - 配置文件,定义了Velocity的...