ssm框架对于大多数的java开发的小伙伴们并不陌生吧,已经成为各种java开发的首选框架,想当初,为了整合一个通用的ssm框架模板煞费苦心,一度陷入各类配置文件,各类xml的配置苦海里不能自拔,一旦使用熟练了,发现也就那么回事啊,为了方便本身和各位童鞋从此的整合使用,在此将所有的整合过程简单罗列出来,不足之处,请多多指教;css
该项目为maven工程,工程命名和包的结构命名可根据我的习惯而定,大致不差,项目结构如图:html
添加pom依赖jar文件:前端
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>4.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.0.0.RELEASE</version> </dependency> <!-- spring aop --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>4.0.0.RELEASE</version> </dependency> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.2</version> </dependency> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.6.8</version> </dependency> <!-- Spring整合MyBatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.8</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version> </dependency> <!-- 控制日志输出:结合log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.7</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.37</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.0.0.RELEASE</version> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.1</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.9</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.2</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1.3-b06</version> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- spring单元测试 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>4.3.7.RELEASE</version> <scope>test</scope> </dependency> <!-- 格式化对象,方便输出日志 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.41</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.9</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.8</version> </dependency> <!--rabbitmq依赖 --> <!-- <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>3.6.0</version> </dependency> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> <version>1.6.5.RELEASE</version> </dependency> --> <!--active mq start--> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-core</artifactId> <version>5.7.0</version> </dependency> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-pool</artifactId> <version>5.13.3</version> </dependency> <!--active mq end--> </dependencies> 实际开发中,会对项目中依赖的jar包作统一的版本控制,jar包会从部署在linux服务器包的私服仓库中获取,便于管理,此处为了作演示,没有作版本管理,不须要的jar包能够暂时不依赖,用到的时候再添加也能够;
【1】applicationcontext.xml,这个配置文件中主要包括下面几项,把这几项主要的记住了,其余的问题不大,之后即使修改也不会改动太多,包括,引入外部数据源并配置数据源,整合mybatis扫描相应的接口包文件,配置事务,配置AOP,引入第三方的xml配置文件,如spring整合rabbitmq的xml文件等,具体以下: <!-- 加载外部配置文件 --> <context:property-placeholder location="classpath:jdbc.properties" /> <!-- 注解扫描包文件,此处有多种写法,主要的一点就是controller层做为控制器交由springmvc的配置文件进行扫描 --> <!-- <context:component-scan base-package="com.sino" /> --> <!-- <context:component-scan base-package="com.sino.*"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> --> <context:component-scan base-package="com.sino"/> <!-- 配置数据源 ,可选择dbcp,c3p0,druid等--> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="url" value="${jdbc_url}" /> <property name="driverClassName" value="${jdbc_driverClassName}" /> <property name="username" value="${jdbc_username}" /> <property name="password" value="${jdbc_password}" /> </bean> <!-- 配置整合mybatis,注意,此处直接将实体类文件到数据库数据表作了映射匹配,便再也不额外添加sqlConfig.xml的配置文件,简化了配置的写法 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="typeAliasesPackage" value="com.sino.entity"/> <!-- 自动扫描mapping.xml文件 --> <property name="mapperLocations" value="classpath:mybatis/*-mapper.xml"></property> </bean> <!-- mybatis扫描接口包文件,扫描接口所在的包文件 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.sino.dao" /> <property name="SqlSessionFactoryBeanName" value="sqlSessionFactory" /> </bean> <!-- 事务配置 --> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 配置拦截service --> <!-- <aop:config> <aop:pointcut expression="execution(* com.ssm.service..*(..))" id="txPoint"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint"/> </aop:config> --> <!-- 配置事物加强,事物如何切入--> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <!-- 全部方法都是事物方法 --> <tx:method name="*"/> <!-- 以get开始的全部方法 --> <tx:method name="get*" read-only="true"/> <tx:method name="query*" read-only="true"/> <tx:method name="find*" read-only="true"/> <tx:method name="select*" read-only="true"/> </tx:attributes> </tx:advice> <!-- 引入rabbitmq --> <!-- <import resource="rabbitMq.xml"/> --> 该配置文件中,还能够对事务作更精细的配置,还有AOP的配置,因为时间关系,没有写出来,可自行补上; 【2】springmvc.xml,该配置文件属于控制器层面的配置,全部前端的请求传递到后端,都要通过该配置文件的控制和管理,其主要配置项包括,扫描controller所在的包,配置静态资源的访问,如html,jsp,css,img,配置拦截器,配置视图解析器,配置时间格式化日期,配置上传文件的组件控制等,具体配置以下: <!-- 配置静态资源访问 --> <mvc:default-servlet-handler /> <mvc:annotation-driven /> <!-- 扫描注解包 --> <context:component-scan base-package="com.sino.controller" /> <!-- 自定义拦截器定义 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**" /> <mvc:exclude-mapping path="/login"/> <mvc:exclude-mapping path="/doLogin"/> <mvc:exclude-mapping path="/bootstrap/**"/> <mvc:exclude-mapping path="/css/**" /> <mvc:exclude-mapping path="/fonts/**" /> <mvc:exclude-mapping path="/img/**" /> <mvc:exclude-mapping path="/jquery/**" /> <mvc:exclude-mapping path="/layer/**" /> <mvc:exclude-mapping path="/script/**" /> <mvc:exclude-mapping path="/ztree/**" /> <bean class="com.sino.intercepter.LoginInterceptor"></bean> </mvc:interceptor> <mvc:interceptor> <mvc:mapping path="/**" /> <mvc:exclude-mapping path="/login"/> <mvc:exclude-mapping path="/doLogin"/> <mvc:exclude-mapping path="/bootstrap/**"/> <mvc:exclude-mapping path="/css/**" /> <mvc:exclude-mapping path="/fonts/**" /> <mvc:exclude-mapping path="/img/**" /> <mvc:exclude-mapping path="/jquery/**" /> <mvc:exclude-mapping path="/layer/**" /> <mvc:exclude-mapping path="/script/**" /> <mvc:exclude-mapping path="/ztree/**" /> <bean class="com.sino.intercepter.AuthInterceptor"></bean> </mvc:interceptor> </mvc:interceptors> <!-- 配置视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>application/json;charset=UTF-8</value> </list> </property> </bean> </list> </property> </bean> <!-- 配置文件上传大小控制 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" > <property name="maxUploadSize" value="2097152" /> <property name="resolveLazily" value="true" /> </bean> 【3】访问数据库的配置文件 jdbc.properties jdbc_driverClassName=com.mysql.jdbc.Driver jdbc_url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8 jdbc_username=root jdbc_password=root 【4】log4j.properties #将Mybatis log4j运行级别调到DEBUG能够在控制台打印出Mybatis运行的sql语句
log4j.rootLogger=DEBUG,Console,File java
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout = org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d{yyyy-MM-dd-HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n mysql
log4j.appender.File = org.apache.log4j.DailyRollingFileAppender
log4j.appender.File.File = /opt/uploads/maven_logs/maven_web.log
log4j.appender.File.Threshold = DEBUG
log4j.appender.File.layout = org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern =%d{yyyy-MM-dd-HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n jquery
log4j.logger.com.mybatis=DEBUG
log4j.logger.com.mybatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.mybatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.mybatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUGlinux
【5】web.xml,最容易忽视并且容易出问题的就在这个配置文件中,注意的问题就是搞明白这个配置文件的做用和加载的顺序就行了,其中配置的项包括,加载springmvc的xml文件,前端的请求首先通过web.xml文件,将其转发给springmvc的配置文件进行请求的统一处理;配置spring的xml文件,对spring的相关配置进行全局统一初始化工做;再就是字符集过滤,日志信息,其余错误页面的转发等,下面请看具体配置,注意,配置文件的路径不要写错了,不然启动报错,web
配置文件到此基本搞定,配置文件配置好能够说框架整合完成了八成工做,不然各类报错会一直在配置文件中纠缠,接下来就是作测试,框架整合完毕,测试主要包括3种,一种是框架自身,例如项目启动没有报错的话,是否能够访问controller中的接口,其二是静态页面的定向,可否经过controller将请求路由到相应的页面,第三是数据库链接是否成功,下面将分别作这三种简单的测试, 首先在tomcat中启动工程,此处使用的是tomcat8.X版本, spring
1)经过浏览器直接访问controller接口,是否可以访问到,
sql
在controller包下面建立IndexController,
@Controller
@RequestMapping(“/user”)
public class IndexController {
@RequestMapping("/index") public String toIndex(){ return "index"; } @ResponseBody @RequestMapping("/getData") public String getData(){ String result = "success"; return result; }
}
浏览器输入地址,http://localhost:8080/ssm_project/user/getData,结果以下:
2)经过浏览器直接访问controller接口,经过controller转发到页面
在WEB-INF下的jsp文件中有一个index.jsp,
说明接口是通顺的;
浏览器输入:http://localhost:8080/ssm_project/user/index,页面展现内容以下:
说明能够经过接口正常转发页面;
3)经过浏览器直接访问controller接口,测试数据库配置是否成功链接
在user-mapper.xml文件中,有一个查询t_user的表,数据库中新建一个t_user的表并存入几条数据,
同时,建立测试的controller类,代码以下, @ResponseBody @RequestMapping("/testDbData") public List<User> testDbData(){ return userService.getDbData(); } 再在mybatis包下新建一个user-mapper.xml文件,里面有一个查询t_user的sql语句, select * from t_user
浏览器输入:http://localhost:8080/ssm_project/user/testDbData,页面展现内容以下:
说明整合mybatis访问mysql也是能够正常使用的,至此,ssm整合所有完毕,有关ssm更多的配置,好比自定义异常处理,访问拦截器配置,业务层的事务处理等,都可在此基础上作添加补充,还欢迎各位童鞋提出宝贵意见!!