Spring3 MVC和Velocity整合配置笔记
程序员文章站
2022-06-07 15:20:40
...
刚刚尝试用Spring MVC框架来替换Struts2框架,遇到了不少问题,网上的资料相当乱,记录备案一下。
东西有点多,可能会比较乱,整理个目录:
一、引用到的jar包
二、Spring中设置properties资源文件
三、使用注解的准备
四、Spring MVC配置中出现的找不到配置文件的问题
五、velocity和spring mvc的整合
六、velocity和javamail的整合
七、Spring MVC注解及fastjson与@ResponseBody的整合
-----------------------正文------------------------------
一、首先是引用的包,直接给Maven吧
很抱歉一下copy了很长。。。
不过大致就是Spring Core,Spring Context,Spring Context Support,Spring MVC这几个
外加Velocity。javamail因为也用到了所以提一句。
---------------------------------------
二、Spring中设置properties资源文件
随后就可以在配置中使用${}来引用properties里面的值了
博主在这里还遇到一个问题,同时有两个以上的Spring配置文件时似乎会出现问题。首先是appCxt.xml里面配置了但在SpringMVC-servlet.xml里面没配置,SpringMVC-servlet.xml报错,无法解析。把其中的一部分移到SpringMVC-servlet.xml后appCxt也出现了报错。
无奈把所有配置信息写一个文件里了。好在大量使用了注解,因此实际没有特别长。
----------------------------------------------------------
三、使用注解的准备
后面的是表示要扫描的package
----------------------------------------------------------
四、Spring MVC配置中出现的找不到配置文件的问题
原因:配置web.xml时会给Spring的DispatcherServlet配置一个Servlet
值的注意的是其中的init-param属性,如果不配置的话默认是到WEB-INF目录下寻找${servlet-name}-servlet.xml的配置文件,如果没找到就直接报FileNotFoundException。
解决方案一是创建一个这样的文件,二是像博主这样自定义文件位置。
-----------------------------------------------------------
五、velocity和spring mvc的整合
本篇资料五花八门,但是大多是spring2.5的资料了
配置文件不用多说,首先是velocity的配置信息
然后引入ViewResolver
要补充的是Spring3 MVC中的Controller大多都是普通类了,我也不喜欢在一个映射方法中添加一堆莫名其妙的参数
实际上Spring支持直接的字符串解析:
这里index会直接映射到WEB-INF/velocity/index.vm文件。
注意return字符串中不需要添加.vm字符串
###################补充2013-06-02#######################
也可以直接将配置信息写入properties文件
在VelocityConfigurer类的bean中添加
#########################################################
-----------------------------------------------------------
六、velocity和javamail的整合
javamail可以使用velocity作为模板来发送模板邮件
具体在这里已经很清楚了:http://gundumw100.iteye.com/blog/515346
博主在这里要补充的是里面引用的是org.springframework.ui.velocity.VelocityEngineFactoryBean来创建一个VelocityEngine对象。
但是velocity和spring mvc的整合则使用了org.springframework.web.servlet.view.velocity.VelocityConfigurer
我们没必要为了javamail还单独配置一个VelocityEngine方法。
通过阅读源码发现org.springframework.web.servlet.view.velocity.VelocityConfigurer实际有一个getVelocityEngine()方法。
因此我们可以直接把Confirgurer注入到javamail发送类
这个和前面的方法是等效的
--------------------------------------------------------------
其余相关的还有读写session之类,网上资料很全了,可以自行寻找,这里就不赘述了。
----------------------------------------------------------------
#################补充2013-06-02#############################
七、Spring MVC注解及fastjson与@ResponseBody的整合
Spring MVC使用注解需要在配置文件中添加一行:
如果要使用fastjson作为@ResponseBody输出的话还需要额外配置message-converters
需要注意的是mvc:message-conterters的register-defaults一定要设置为false
否则系统会自动调用默认的JSON解析器解析,如果缺少JSON包的话就会报406错误
东西有点多,可能会比较乱,整理个目录:
一、引用到的jar包
二、Spring中设置properties资源文件
三、使用注解的准备
四、Spring MVC配置中出现的找不到配置文件的问题
五、velocity和spring mvc的整合
六、velocity和javamail的整合
七、Spring MVC注解及fastjson与@ResponseBody的整合
-----------------------正文------------------------------
一、首先是引用的包,直接给Maven吧
<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了很长。。。
不过大致就是Spring Core,Spring Context,Spring Context Support,Spring MVC这几个
外加Velocity。javamail因为也用到了所以提一句。
---------------------------------------
二、Spring中设置properties资源文件
<bean id="propertyConfigs" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="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也出现了报错。
无奈把所有配置信息写一个文件里了。好在大量使用了注解,因此实际没有特别长。
----------------------------------------------------------
三、使用注解的准备
<context:annotation-config/> <context:component-scan base-package="cn.yix.blog"/>
后面的是表示要扫描的package
----------------------------------------------------------
四、Spring MVC配置中出现的找不到配置文件的问题
原因:配置web.xml时会给Spring的DispatcherServlet配置一个Servlet
<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和spring mvc的整合
本篇资料五花八门,但是大多是spring2.5的资料了
配置文件不用多说,首先是velocity的配置信息
<bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"> <property name="resourceLoaderPath" value="WEB-INF/velocity"/> <property name="velocityProperties"> <props> <prop key="input.encoding">utf-8</prop> <prop key="output.encoding">utf-8</prop> </props> </property> </bean>
然后引入ViewResolver
<bean id="velocityViewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver"> <property name="suffix" value=".vm"/> <property name="contentType" value="text/html;charset=utf-8"/> </bean>
要补充的是Spring3 MVC中的Controller大多都是普通类了,我也不喜欢在一个映射方法中添加一堆莫名其妙的参数
实际上Spring支持直接的字符串解析:
@Controller @RequestMapping("/") public class IndexController { @RequestMapping("/index.htm") public String showIndex(){ return "index"; } }
这里index会直接映射到WEB-INF/velocity/index.vm文件。
注意return字符串中不需要添加.vm字符串
###################补充2013-06-02#######################
也可以直接将配置信息写入properties文件
在VelocityConfigurer类的bean中添加
<property name="configLocation" value="classpath:velocity.properties"/>
#########################################################
-----------------------------------------------------------
六、velocity和javamail的整合
javamail可以使用velocity作为模板来发送模板邮件
具体在这里已经很清楚了:http://gundumw100.iteye.com/blog/515346
博主在这里要补充的是里面引用的是org.springframework.ui.velocity.VelocityEngineFactoryBean来创建一个VelocityEngine对象。
但是velocity和spring mvc的整合则使用了org.springframework.web.servlet.view.velocity.VelocityConfigurer
我们没必要为了javamail还单独配置一个VelocityEngine方法。
通过阅读源码发现org.springframework.web.servlet.view.velocity.VelocityConfigurer实际有一个getVelocityEngine()方法。
因此我们可以直接把Confirgurer注入到javamail发送类
private VelocityEngine velocityEngine; @Resource(name = "velocityConfigurer") private void setVelocityConfigurer(VelocityConfigurer velocityConfigurer){ velocityEngine = velocityConfigurer.getVelocityEngine(); }
这个和前面的方法是等效的
--------------------------------------------------------------
其余相关的还有读写session之类,网上资料很全了,可以自行寻找,这里就不赘述了。
----------------------------------------------------------------
#################补充2013-06-02#############################
七、Spring MVC注解及fastjson与@ResponseBody的整合
Spring MVC使用注解需要在配置文件中添加一行:
<mvc:annotation-driven/>
如果要使用fastjson作为@ResponseBody输出的话还需要额外配置message-converters
<mvc:annotation-driven> <mvc:message-converters register-defaults="false"> <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"> <property name="supportedMediaTypes" value="application/json"/> </bean> </mvc:message-converters> </mvc:annotation-driven>
需要注意的是mvc:message-conterters的register-defaults一定要设置为false
否则系统会自动调用默认的JSON解析器解析,如果缺少JSON包的话就会报406错误