注:本站所有项目均使用maven构建!
创建maven项目,目录结构
pom.xml引用jar包
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> </dependency> <!-- velocity --> <dependency> <groupId>com.e-rimming.third</groupId> <artifactId>velocity</artifactId> </dependency> <dependency> <groupId>com.e-rimming.third</groupId> <artifactId>velocity-tools</artifactId> </dependency> <!-- apache --> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> </dependency> <dependency> <groupId>commons-digester</groupId> <artifactId>commons-digester</artifactId> </dependency> <!-- servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </dependency> <!-- log --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </dependency>
注:此处引用的jar包比直接在servlet使用velocity多引用了spring和log4j的依赖!
web.xml增加springmvc的监听映射,log4j的配置文件等其他相关内容
<!-- 参 数:log4j配置路径 --> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/classes/log4j.xml</param-value> </context-param> <!-- 参 数:Log4j设定文件中可以引用当前应用的根目录,避免使用绝对路径 --> <context-param> <param-name>webAppRootKey</param-name> <param-value>webAppRootKey.templet</param-value> </context-param> <!-- 参 数:Spring配置路径 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <!-- Spring Listener --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- SpringMVC --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/*-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
注:web.xml中除以上内容外,还应该包括项目描述、字符编码拦截、session超时时间、欢迎界面等其他内容,此处就不在一一陈述。
applicationContext.xml中spring相关参数设置
<!-- 注解自动装配 --> <context:annotation-config/> <!-- 加入Spring注解自动装配管理 --> <context:component-scan base-package="cn.ipwin.velocity03.*" /> <!-- 加载properties配置文件 --> <util:properties id="appProperties" location="classpath:application.properties"/> <!-- 定义受环境影响易变的变量 --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /> <property name="ignoreResourceNotFound" value="true" /> <property name="locations"> <list> <value>classpath*:/application.properties</value> </list> </property> </bean>
注:applicationContext.xml中除以上内容外,还应该包括数据源、安全、AOP、异常等处理内容,此处就不在一一陈述。
springmvc-servlet.xml中spring相关参数设置
<!-- 加入Spring注解自动装配管理 --> <context:component-scan base-package="cn.ipwin.velocity03.controller" /> <!-- 加入SpringMVC注解管理 --> <mvc:annotation-driven /> <!-- 视图控制器VM,不需要prefix,于velocityConfigurer中设置 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver"> <property name="suffix"><value>.vm</value></property> <property name="contentType"><value>text/html;charset=utf-8</value></property> </bean>
velocity-servlet.xml中spring相关参数设置
<bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"> <!-- 模版路径 --> <property name="resourceLoaderPath"> <value>/templates/</value> </property> <!-- 模版属性 --> <property name="velocityProperties"> <props> <prop key="input.encoding">utf-8</prop> <prop key="output.encoding">utf-8</prop> </props> </property> </bean>
注:以上3个xml配置文件,分开的目的是使结构清晰,各司其职,可以合在一个xml配置文件中。
DemoController.java对应的跳转
package cn.ipwin.velocity03.controller; import java.util.ArrayList; import java.util.List; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class DemoController { @RequestMapping(value = "/demo") public String hello(ModelMap model) { // 准备测试数据 List<String> list = new ArrayList<String>(); list.add("List element 1"); list.add("List element 2"); list.add("List element 3"); list.add("List element 4"); model.put("list", list); return "demo"; } }
demo.vm模版
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Velocity DEMO</title> </head> <body> #set( $this = "Velocity") $this is so great!<br/> #foreach( $name in $list ) $name<br/> #end </body> </html>
运行结果如下:
Velocity is so great! List element 1 List element 2 List element 3 List element 4