现在开始正式搭建,首先构建如下的包结构
src/main/java下面的包:
com.sdusz.framework.ssm.constant-一些定义的常量的类
com.sdusz.framework.ssm.controller-控制器
com.sdusz.framework.ssm.entity-与数据库表对应的实体类
com.sdusz.framework.ssm.exception-自定义异常
com.sdusz.framework.ssm.filter-自定义过滤器
com.sdusz.framework.ssm.inteceptor-自定义拦截器
com.sdusz.framework.ssm.listener-自定义监听器
com.sdusz.framework.ssm.mapper-mybatis的dao接口层,反向生成得到
com.sdusz.framework.ssm.model-一些入参和出参对应的值对象
com.sdusz.framework.ssm.service-service层
com.sdusz.framework.ssm.serviceImpl-service实现层
com.sdusz.framework.ssm.task-定时任务相关类,可以先不建(以后再讲)
com.sdusz.framework.ssm.util-自定义工具类,方便个性化操作
src/main/resources下面的文件夹:
config-一些配置参数对应的文件
i18n-服务端国际化对应的properties文件
mybatis-myBatis中的.xml文件,反向生成得到
spring-spring配置文件,包括一些与spring集成的其他框架的配置文件
mybatis-generator-core-1.3.2-反向生成用的工具包,可以不放
集成SpringMVC
1、在spring文件夹下建立这两个文件
spring-context.xml 就是spring容器上下文对应的配置文件,也是AOP,DI,IOC的核心文件。
spring-mvc.xml主要是就是对应了dispatcherServlet的定义,包括数据到Controller层,以及从Controller返回时的Converter。
spring-context.xml现在内容如下,现在可以什么bean和aop的定义都不写,但是一定要有这么一个结构,否则等下服务启动是会报错的,因为启动时会将配置文件中的<beans></beans>之间定义的bean进行解析,加载到BeanFactory中去,如果没有这个beans节点,无法解析,就会报错。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> </beans>
spring-mvc.xml内容如下,
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:util="http://www.springframework.org/schema/util" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> <!-- MVC注解扫描start --> <mvc:annotation-driven> <mvc:message-converters> <!--避免IE执行AJAX时,返回JSON出现下载文件 start--> <bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>application/json;charset=UTF-8</value> </list> </property> </bean> <bean id="StringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> </bean> <!--避免IE执行AJAX时,返回JSON出现下载文件 end--> </mvc:message-converters> </mvc:annotation-driven> <!-- MVC注解扫描end --> <!-- 扫描controller包 start --> <context:component-scan base-package="com.sdusz.framework.ssm" use-default-filters="false"> <context:include-filter type="regex" expression="com.sdusz.framework.ssm.controller.*" /> </context:component-scan> <!-- 扫描controller包 end --> <!-- 使用默认servlet的处理方式处理MVC start --> <mvc:default-servlet-handler /> <!-- 使用默认servlet的处理方式处理MVC end --> <!-- 使用CGLib动态代理技术植入增强 start --> <aop:aspectj-autoproxy proxy-target-class="true" /> <!-- 使用CGLib动态代理技术植入增强 end --> </beans>
在web.xml中添加如下配置,其中:
contextConfigLocation为类路径下的,也就是src/main/resurces下的spring/spring-context.xml文件,不配置将会默认去找WEB-INF下的applicationContext.xrnl 文件,找不到就会报错,log4j配置文件的位置同理,这里就不给出log4j的具体配置了,因为因项目而异,配置没有通用性。
<!-- 首页 start --> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> <!-- 首页 end --> <!-- 上下文初始化参数 start --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/spring-context.xml</param-value> </context-param> <!-- 上下文初始化参数 end --> <!-- log4j配置文件路径 start --> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:config/log4j.properties</param-value> </context-param> <!-- log4j配置文件路径 end --> <!-- log4j刷新周期 start --> <context-param> <param-name>log4jRefreshInterval</param-name> <param-value>600000</param-value> </context-param> <!-- log4j刷新周期 end --> <!-- 项目根目录名称 start --> <context-param> <param-name>webAppRootKey</param-name> <param-value>ssm.root</param-value> </context-param> <!-- 项目根目录名称 end --> <!-- spring全站编码过滤器 start --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <async-supported>true</async-supported> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- spring全站编码过滤器 end --> <!-- log4j监听器 start --> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <!-- log4j监听器 end --> <!-- Spring上下文初始化监听器 start --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- Spring上下文初始化监听器 end --> <!-- 防止Spring内存溢出监听器 start --> <listener> <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> </listener> <!-- 防止Spring内存溢出监听器 end --> <!-- SpringMVC servlet start --> <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:spring/spring-mvc.xml</param-value> </init-param> <load-on-startup>2</load-on-startup> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <url-pattern>/interfaces/*</url-pattern> </servlet-mapping> <!-- SpringMVC servlet end --> <!-- session过期时间 start --> <session-config> <session-timeout>30</session-timeout> </session-config> <!-- session过期时间 end -->
在com.sdusz.framework.ssm.controller包下添加一个测试类TestController.java
@Controller @RequestMapping("test") public class TestController { /** * 方法描述: 返回单个字符串 * 初始作者: shenmengqi * 创建日期: 2016年3月18日-上午9:22:08 * 开始版本: 2.0.0 * ================================================= * 修改记录: * 修改作者 日期 修改内容 * ================================================ * * @return * String 返回的字符串 */ @RequestMapping("/m001") @ResponseBody public String getString() { return "hello,这只是一个字符串!"; } /** * 方法描述: 返回map对象 * 初始作者: shenmengqi * 创建日期: 2016年3月18日-上午9:21:37 * 开始版本: 2.0.0 * ================================================= * 修改记录: * 修改作者 日期 修改内容 * ================================================ * * @return * Map<String,String> 返回的map对象 */ @RequestMapping("/m002") @ResponseBody public Map<String, String> getJSON() { Map<String, String> data = new HashMap<String, String>(); data.put("id", "001"); data.put("name", "张三"); return data; } } /** * 方法描述: 访问restful接口并将参数作为结果返回 * 初始作者: shenmengqi * 创建日期: 2016年3月18日-上午9:22:40 * 开始版本: 2.0.0 * ================================================= * 修改记录: * 修改作者 日期 修改内容 * ================================================ * * @param clientType * 对应{clientType} * @param loginId * 对应{loginId} * @param userType * 对应{userType} * @return * Map<String,String> 参数组装出的map对象 */ @RequestMapping("/{clientType}/{loginId}/{userType}/m003") @ResponseBody public Map<String, String> testRestful(@PathVariable String clientType, @PathVariable String loginId, @PathVariable String userType) { Map<String, String> data = new HashMap<String, String>(); data.put("clientType", clientType); data.put("loginid", loginId); data.put("userType", userType); return data; } /** * 方法描述: 测试将model转为json传到前台</br> * 初始作者: shenmengqi * 创建日期: 2016年3月28日-下午10:12:47 * 开始版本: 2.0.0 * ================================================= * 修改记录: * 修改作者 日期 修改内容 * ================================================ * * @param models * 传入model * @return * Object json对象 */ @RequestMapping("/m005") @ResponseBody public Object testParamList(@RequestBody List<VoModel> models) { return JSON.toJSON(models); }
这里边的接口的返回值类型任意,另外方法上需要加上@ResponseBody注解,由于在spring-mvc.xml中配置了Converter,其实最终返回给前台的结果都是json对象,contentType就是application/json;charset=utf-8,但是如果要从前台传入VO就必须将对象用JSON.stringify()进行转换,类前面要加@Controller注解。上面接口的访问路径依次为:
1.http://ip:port/工程名/interfaces/test/m001
参数:无
请求类型:任意
结果:hello,这只是一个字符串!
2.http://ip:port/工程名/interfaces/test/m002
参数:无
请求类型:任意
结果:{“name”:”张三”,”id”:”001”}
3.http://ip:port/工程名/interfaces/test/1/2/3/m003
参数:无
请求类型:任意
结果:{“clientType”:”1”,”loginid”:”2”,”userType”:”3”}
4.http://ip:port/工程名/interfaces/test/m005
参数:参数的结构要与@RequestBody的结构一致,key必须与javabean的属性对应,
[{ "id":"001", "name":"name" }]
请求类型:POST
结果:
[ { "name": "name", "id": "001", "voModel2": null, "email": null } ]
如果上述几个接口都可以调用成功,且没有乱码出现,那么Spring与SpringMVC就已经整合成功了!