IDEA 整合SSM入门
Posted youngchaolin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IDEA 整合SSM入门相关的知识,希望对你有一定的参考价值。
IDEA整合SSM,有很多坑,这里记录一下,新建项目采用的普通Java Enterprise项目,不是Maven项目。
创建SSM项目前期搭建
(1)先创建一个Java Enterprise项目,一般是选择Spring来创建,并且会自动导包,这里使用另外一种方式来实现。
(2)创建完成后需要设置,进入Project Structure界面,跟其他IDE可以直接使用不同,IDEA的还需要设置source目录和resource目录,代表代码和资源文件存放的地方。如图所示在src目录下建立main目录,main目录下建立java和resource目录,分别存放量产代码和配置文件,test文件夹也可以设置,这里省略了。上面Mark as标签可以看出来,可以分别设置量产代码文件夹(Sources)、测试代码文件夹(Tests),量产资源文件夹(Resources)、测试资源文件夹(Test Resources)和排它文件夹(不被使用)。
(3)设置Tomcat部署路径,这里选择部署在Tomcat的Webapp下。
(4)设置Tomcat服务器,选择菜单Edit Configurations进入设置界面,可以将After lauch勾选掉,另外更新和鼠标离焦选项选择Update classes and resources,这样就支持热部署,即无需重启tomcat也可以支持更新。
另外切换到Deployment,将Application Context修改,这样访问资源是通过如下web虚拟路径名可以访问到部署到tomcat后的真正资源。
以上就完成前期的基本配置,后面需要配置SpringMVC、Spring和MyBatis的核心配置文件了。
SSM项目核心文件配置
SpringMVC配置
(1)web.xml中配置启动前端控制器,需要读取SpringMVC核心配置文件。注意spring-mvc.xml是放在前面的resource文件夹下。
1 <!--配置SpringMVC前端控制器--> 2 <servlet> 3 <servlet-name>springmvc</servlet-name> 4 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 5 <init-param> 6 <param-name>contextConfigLocation</param-name> 7 <param-value>classpath:spring-mvc.xml</param-value> 8 </init-param> 9 <!--设置启动tomcat就启动--> 10 <load-on-startup>1</load-on-startup> 11 </servlet> 12 <servlet-mapping> 13 <servlet-name>springmvc</servlet-name> 14 <url-pattern>*.action</url-pattern> 15 </servlet-mapping> 16 17 <!--配置全站式乱码解决,只针对post有效--> 18 <filter> 19 <filter-name>filtercoding</filter-name> 20 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 21 <init-param> 22 <param-name>encoding</param-name> 23 <param-value>utf-8</param-value> 24 </init-param> 25 </filter> 26 <filter-mapping> 27 <filter-name>filtercoding</filter-name> 28 <url-pattern>*.action</url-pattern> 29 </filter-mapping>
(2)配置SpringMVC核心配置文件,这里需要配置前端控制器、需要配置包扫描、mvc注解驱动和视图解析器,通过采坑后发现,后面配置Spring也需要扫描包,如果都配置可能会导致事务失效,这里因为没有配置事务因此将不需要事务的包在这里扫描。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 6 xmlns:util="http://www.springframework.org/schema/util" 7 xmlns:aop="http://www.springframework.org/schema/aop" 8 xmlns:tx="http://www.springframework.org/schema/tx" 9 xmlns:mvc="http://www.springframework.org/schema/mvc" 10 xsi:schemaLocation= 11 "http://www.springframework.org/schema/beans 12 http://www.springframework.org/schema/beans/spring-beans-4.3.xsd 13 http://www.springframework.org/schema/context 14 http://www.springframework.org/schema/context/spring-context-4.3.xsd 15 http://www.springframework.org/schema/util 16 http://www.springframework.org/schema/util/spring-util-4.3.xsd 17 http://www.springframework.org/schema/aop 18 http://www.springframework.org/schema/aop/spring-aop-4.3.xsd 19 http://www.springframework.org/schema/tx 20 http://www.springframework.org/schema/tx/spring-tx-4.3.xsd 21 http://www.springframework.org/schema/mvc 22 http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd" 23 > 24 25 <!--开启包扫描--> 26 <context:component-scan base-package="com.boe.dao"></context:component-scan> 27 <!--注释掉,sevice层上的事务才能生效,将service层的扫描放到spring配置文件中扫描,赋予事务--> 28 <!--<context:component-scan base-package="com.boe.service"></context:component-scan>--> 29 <context:component-scan base-package="com.boe.web"></context:component-scan> 30 <!--开启mvc注解--> 31 <mvc:annotation-driven></mvc:annotation-driven> 32 <!--配置视图解析器--> 33 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 34 <property name="suffix" value=".jsp"></property> 35 <property name="prefix" value="/WEB-INF/jsp/"></property> 36 </bean> 37 38 </beans>
Spring配置
(1)web.xml中配置,使用listener来读取applicationContext.xml配置文件,启动Spring容器。
1 <!--配置监听器,spring在web初始化时自动加载--> 2 <context-param> 3 <param-name>contextConfigLocation</param-name> 4 <param-value>classpath:applicationContext.xml</param-value> 5 </context-param> 6 <listener> 7 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 8 </listener>
(2)spring核心配置文件中,需要配置包扫描、DI注入、事务等。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:context="http://www.springframework.org/schema/context" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xmlns:util="http://www.springframework.org/schema/util" 6 xmlns:aop="http://www.springframework.org/schema/aop" 7 xmlns:tx="http://www.springframework.org/schema/tx" 8 xmlns:mvc="http://www.springframework.org/schema/cache" 9 xsi:schemaLocation= 10 "http://www.springframework.org/schema/beans 11 http://www.springframework.org/schema/beans/spring-beans-4.3.xsd 12 http://www.springframework.org/schema/context 13 http://www.springframework.org/schema/context/spring-context-4.3.xsd 14 http://www.springframework.org/schema/util 15 http://www.springframework.org/schema/util/spring-util-4.3.xsd 16 http://www.springframework.org/schema/aop 17 http://www.springframework.org/schema/aop/spring-aop-4.3.xsd 18 http://www.springframework.org/schema/tx 19 http://www.springframework.org/schema/tx/spring-tx-4.3.xsd 20 http://www.springframework.org/schema/mvc 21 http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd" 22 > 23 24 <!-- 开启包扫描 --> 25 <!--<context:component-scan base-package="com.boe.web"/>--> 26 <context:component-scan base-package="com.boe.service"/> 27 <!--<context:component-scan base-package="com.boe.dao"/>--> 28 <!--DI依赖注入--> 29 <context:annotation-config></context:annotation-config> 30 <!--引入外部数据库连接配置文件 --> 31 <context:property-placeholder location="classpath:connConf/db.properties"/> 32 <!--配置数据源 --> 33 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 34 <property name="driverClass" value="${driverClass}"/> 35 <property name="jdbcUrl" value="${jdbcUrl}"/> 36 <property name="user" value="${user}"/> 37 <property name="password" value="${password}"/> 38 </bean> 39 40 <!--配置事务管理器--> 41 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 42 <property name="dataSource" ref="dataSource"></property> 43 </bean> 44 <!--开启事务注解--> 45 <tx:annotation-driven></tx:annotation-driven> 46 47 </beans>
Mybatis配置
(1)mybatis的配置需要准备核心配置文件sqlMapConfig和mapper映射文件(这里准备了一个UserMapper.xml)。
sqlMapConfig.xml
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 7 <!--配置mapper映射文件--> 8 <!--<mappers> 9 <mapper resource="UserMapper.xml"></mapper> 10 </mappers>--> 11 12 </configuration>
UserMapper.xml
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 6 <mapper namespace="com.boe.dao.UserMapper"> 7 8 <!--查询user--> 9 <select id="findAll" resultType="com.boe.domain.User"> 10 SELECT * FROM user; 11 </select> 12 13 14 <!--插入一个user--> 15 <insert id="addUser" parameterType="com.boe.domain.User"> 16 INSERT INTO user 17 <trim prefix="(" suffix=")" suffixOverrides=","> 18 id, 19 <if test="name!=null">name,</if> 20 <if test="age!=0">age,</if> 21 </trim> 22 VALUES 23 <trim prefix="(" suffix=")" suffixOverrides=","> 24 null, 25 <if test="name!=null">#{name},</if> 26 <if test="age!=0">#{age},</if> 27 </trim> 28 </insert> 29 30 </mapper>
(2)在spring核心配置文件中添加跟Mybatis相关的配置,完成整合。需要配置Sqlsessionfactorybean,里面配置了数据源、mybatis核心配置文件和mapper映射文件(原来在mybatis核心配置文件中完成数据源和mapper映射文件的配置),最后配置MapperScannerConfigurer,实现对mapper映射器(接口)的扫描(原本需要使用SqlSession的getMapper方法获得)。
1 <!--整合mybatis,配置sqlsession--> 2 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 3 <!--引入数据源--> 4 <property name="dataSource" ref="dataSource"></property> 5 <!--引入mybatis核心配置文件--> 6 <property name="configLocation" value="classpath:sqlMapConfig.xml"></property> 7 <!--引入映射文件--> 8 <property name="mapperLocations" value="classpath:Mapper/UserMapper.xml"></property> 9 </bean> 10 11 <!--配置包mapper扫描,里面放置接口--> 12 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 13 <property name="basePackage" value="com.boe.dao"></property> 14 </bean>
以上就完成了SSM核心文件的配置,跟数据库连接相关的属性文件这里略去不展示,最后配置完成后的项目结构如下图。
启动SSM测试
配置完成后还没有完成,需要启动tomcat服务器查看是否正常启动,这里就可能开始踩坑了。
(1)java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener
启动后发现部署提示OK,但是继续查看Tomcat Localhost Log发现执行报错,提示说找不到这个类,但是实际上配置web.xml中是可以找到这个类,所以说明包是有的(spring-web相关jar包),后面查看发现部署到tomcat后没有lib目录,因此报错。
解决办法最简单粗暴的方式是重新添加Artifacts,先将当前的删除。
然后重新从Module中添加,发现Output Layout里有lib目录,另外tomcat可能需要重新配置一下Deployment,将刚开新的artifacts重新导入一下,重新启动发现不再报错。
(2)无法读取到配置文件信息,如spring-mvc.xml等,这种情况一般就是没有配置sources和resources目录导致,按照上面的方法配置即可,刚开始也采坑多次,才发现IDEA需要配置这个。
最后没问题做测试,可以发送请求正常连接数据库,并返回json数据。
参考博文:
(1)https://www.jianshu.com/p/18d068f47b09
以上是关于IDEA 整合SSM入门的主要内容,如果未能解决你的问题,请参考以下文章
史上最详细的IDEA优雅整合Maven+SSM框架(详细思路+附带源码)
Java之SSM框架整合-案例IDEA版(一篇文章精通系列)Spring+SpringMVC+MyBatis(整合源代码)
Java之SSM框架整合-案例IDEA版(一篇文章精通系列)Spring+SpringMVC+MyBatis(整合源代码)