Spring3 MVC和Velocity整合配置笔记--转载

Spring3MVC和Velocity整合配置笔记

博客分类:java总结SpringSpringMVCVelocity

springvelocitymvcjavamail

刚刚尝试用SpringMVC框架来替换Struts2框架,遇到了不少问题,网上的资料相当乱,记录备案一下。

东西有点多,可能会比较乱,整理个目录:

一、引用到的jar包

二、Spring中设置properties资源文件

三、使用注解的准备

四、SpringMVC配置中出现的找不到配置文件的问题

五、velocity和springmvc的整合

六、velocity和javamail的整合

-----------------------正文------------------------------

一、首先是引用的包,直接给Maven吧

Xml代码

<properties>

<spring.version>3.2.2.RELEASE</spring.version>

</properties>

<dependencies>

<!--spring-->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-core</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context-support</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-beans</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-tx</artifactId>

<version>${spring.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-webmvc</artifactId>

<version>${spring.version}</version>

</dependency>

<!--mybatis-->

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis</artifactId>

<version>3.2.1</version>

</dependency>

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis-spring</artifactId>

<version>1.2.0</version>

</dependency>

<!--database-->

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<version>5.1.24</version>

</dependency>

<!--test-->

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.11</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-test</artifactId>

<version>${spring.version}</version>

<scope>test</scope>

</dependency>

<!--fastjson-->

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>fastjson</artifactId>

<version>1.1.28</version>

</dependency>

<!--log4j-->

<dependency>

<groupId>log4j</groupId>

<artifactId>log4j</artifactId>

<version>1.2.16</version>

</dependency>

<!--javamail-->

<dependency>

<groupId>javax.mail</groupId>

<artifactId>mail</artifactId>

<version>1.4.7</version>

</dependency>

<!--velocity-->

<dependency>

<groupId>velocity</groupId>

<artifactId>velocity</artifactId>

<version>1.5</version>

</dependency>

</dependencies>

很抱歉一下copy了很长。。。

不过大致就是SpringCore,SpringContext,SpringContextSupport,SpringMVC这几个

外加Velocity。javamail因为也用到了所以提一句。

---------------------------------------

二、Spring中设置properties资源文件

Xml代码

<beanid="propertyConfigs"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

<propertyname="locations">

<list>

<value>classpath:datasource.properties</value>

<value>classpath:mailconfig.properties</value>

<value>classpath:site.properties</value>

</list>

</property>

</bean>

随后就可以在配置中使用${}来引用properties里面的值了

博主在这里还遇到一个问题,同时有两个以上的Spring配置文件时似乎会出现问题。首先是appCxt.xml里面配置了但在SpringMVC-servlet.xml里面没配置,SpringMVC-servlet.xml报错,无法解析。把其中的一部分移到SpringMVC-servlet.xml后appCxt也出现了报错。

无奈把所有配置信息写一个文件里了。好在大量使用了注解,因此实际没有特别长。

----------------------------------------------------------

三、使用注解的准备

Xml代码

<context:annotation-config/>

<context:component-scanbase-package="cn.yix.blog"/>

后面的是表示要扫描的package

----------------------------------------------------------

四、SpringMVC配置中出现的找不到配置文件的问题

原因:配置web.xml时会给Spring的DispatcherServlet配置一个Servlet

Xml代码

<servlet>

<servlet-name>springMVC</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:appCxt.xml</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>

值的注意的是其中的init-param属性,如果不配置的话默认是到WEB-INF目录下寻找${servlet-name}-servlet.xml的配置文件,如果没找到就直接报FileNotFoundException。

解决方案一是创建一个这样的文件,二是像博主这样自定义文件位置。

-----------------------------------------------------------

五、velocity和springmvc的整合

本篇资料五花八门,但是大多是spring2.5的资料了

配置文件不用多说,首先是velocity的配置信息

Xml代码

<beanid="velocityConfigurer"class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">

<propertyname="resourceLoaderPath"value="WEB-INF/velocity"/>

<propertyname="velocityProperties">

<props>

<propkey="input.encoding">utf-8</prop>

<propkey="output.encoding">utf-8</prop>

</props>

</property>

</bean>

然后引入ViewResolver

Xml代码

<beanid="velocityViewResolver"class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">

<propertyname="suffix"value=".vm"/>

<propertyname="contentType"value="text/html;charset=utf-8"/>

</bean>

要补充的是Spring3MVC中的Controller大多都是普通类了,我也不喜欢在一个映射方法中添加一堆莫名其妙的参数

实际上Spring支持直接的字符串解析:

Java代码

@Controller

@RequestMapping("/")

publicclassIndexController{

@RequestMapping("/index.htm")

publicStringshowIndex(){

return"index";

}

}

这里index会直接映射到WEB-INF/velocity/index.vm文件。

注意return字符串中不需要添加.vm字符串

-----------------------------------------------------------

六、velocity和javamail的整合

javamail可以使用velocity作为模板来发送模板邮件

博主在这里要补充的是里面引用的是org.springframework.ui.velocity.VelocityEngineFactoryBean来创建一个VelocityEngine对象。

但是velocity和springmvc的整合则使用了org.springframework.web.servlet.view.velocity.VelocityConfigurer

我们没必要为了javamail还单独配置一个VelocityEngine方法。

通过阅读源码发现org.springframework.web.servlet.view.velocity.VelocityConfigurer实际有一个getVelocityEngine()方法。

因此我们可以直接把Confirgurer注入到javamail发送类

Java代码

privateVelocityEnginevelocityEngine;

@Resource(name="velocityConfigurer")

privatevoidsetVelocityConfigurer(VelocityConfigurervelocityConfigurer){

velocityEngine=velocityConfigurer.getVelocityEngine();

}

这个和前面的方法是等效的

--------------------------------------------------------------

其余相关的还有读写session之类,网上资料很全了,可以自行寻找,这里就不赘述了。

相关推荐