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>
View Code

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数据。

Maven整合

上面就是普通项目的SSM整合,接下来使用maven来整合,其实整体来说和普通整合区别不大,就是jar包不需要手动导入了,通过pom文件来实现,另外可以使用maven的tomcat插件,无需部署。其他springmvc、spring和mybatis的配置文件基本不用改动。

pom文件内容如下,其他均参考上面配置。

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 
  3 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5   <modelVersion>4.0.0</modelVersion>
  6 
  7   <groupId>com.boe</groupId>
  8   <artifactId>mavenssm</artifactId>
  9   <version>0.0.1-SNAPSHOT</version>
 10   <packaging>war</packaging>
 11 
 12   <name>mavenssm Maven Webapp</name>
 13   <url>http://www.example.com</url>
 14 
 15   <properties>
 16     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 17     <maven.compiler.source>1.7</maven.compiler.source>
 18     <maven.compiler.target>1.7</maven.compiler.target>
 19   </properties>
 20 
 21   <dependencies>
 22     <dependency>
 23       <groupId>junit</groupId>
 24       <artifactId>junit</artifactId>
 25       <version>4.11</version>
 26       <scope>test</scope>
 27     </dependency>
 28     
 29     <!-- springmvc包 -->
 30     <dependency>
 31         <groupId>org.springframework</groupId>
 32         <artifactId>spring-webmvc</artifactId>
 33         <version>4.3.7.RELEASE</version>
 34     </dependency>    
 35     
 36     <!-- spring web包 -->
 37     <dependency>
 38         <groupId>org.springframework</groupId>
 39         <artifactId>spring-web</artifactId>
 40         <version>4.3.7.RELEASE</version>
 41     </dependency>
 42     
 43     <dependency>
 44         <groupId>javax.servlet</groupId>
 45         <artifactId>javax.servlet-api</artifactId>
 46         <version>3.1.0</version>
 47         <!-- 运行期不导入,只作用在编译期防止编译报错 -->
 48         <scope>provided</scope>
 49     </dependency>
 50     
 51     <!-- 导入spring相关包 -->
 52     <dependency>
 53         <groupId>org.springframework</groupId>
 54         <artifactId>spring-context</artifactId>
 55         <version>4.3.7.RELEASE</version>
 56     </dependency>
 57 
 58     <!--mybatis相关-->
 59     
 60     <!-- 引入mysql驱动 -->
 61     <dependency>
 62         <groupId>mysql</groupId>
 63         <artifactId>mysql-connector-java</artifactId>
 64         <version>5.0.8</version>
 65     </dependency>
 66     
 67     <!-- 引入数据源c3p0 -->
 68     <dependency>
 69         <groupId>com.mchange</groupId>
 70         <artifactId>c3p0</artifactId>
 71         <version>0.9.5.2</version>
 72     </dependency>
 73     
 74     <!-- 引入springJDBC -->
 75     <dependency>
 76         <groupId>org.springframework</groupId>
 77         <artifactId>spring-jdbc</artifactId>
 78         <version>4.3.7.RELEASE</version>
 79     </dependency>
 80     
 81     <!-- mybatis的包 -->
 82     <dependency>
 83         <groupId>org.mybatis</groupId>
 84         <artifactId>mybatis</artifactId>
 85         <version>3.4.5</version>
 86     </dependency>
 87 
 88     <!-- mybatis整合spring的包 -->
 89     <dependency>
 90         <groupId>org.mybatis</groupId>
 91         <artifactId>mybatis-spring</artifactId>
 92         <version>1.3.1</version>
 93     </dependency>
 94     
 95     <!-- json相关包 -->
 96     <dependency>
 97         <groupId>com.fasterxml.jackson.core</groupId>
 98         <artifactId>jackson-core</artifactId>
 99         <version>2.8.8</version>
100     </dependency>
101     
102     <dependency>
103         <groupId>com.fasterxml.jackson.core</groupId>
104         <artifactId>jackson-databind</artifactId>
105         <version>2.8.8</version>
106     </dependency>
107     
108     
109        
110   </dependencies>
111 
112   <build>
113     <finalName>mavenssm</finalName>
114     <pluginManagement>
115       <plugins>
116         
117         <!-- 配置插件,指定jdk版本 -->
118         <plugin>
119           <groupId>org.apache.maven.plugins</groupId>
120           <artifactId>maven-compiler-plugin</artifactId>
121           <version>3.8.0</version>
122           <configuration>
123               <source>1.8</source>
124               <target>1.8</target>
125               <encoding>UTF-8</encoding>
126           </configuration>         
127         </plugin>
128 
129           <!-- tomcat插件-->
130         <plugin>
131             <groupId>org.apache.tomcat.maven</groupId>
132             <artifactId>tomcat7-maven-plugin</artifactId>
133             <version>2.2</version>
134             <configuration>
135                 <!-- 端口 -->
136                 <port>8080</port>       
137                 <!-- contextPath -->
138                 <path>/</path>
139                 <!-- receive utf-8 -->
140                 <uriEncoding>UTF-8</uriEncoding>
141             </configuration>
142         </plugin>
143       
144       </plugins>
145     </pluginManagement>
146   </build>
147 </project>

启动tomcat可以使用maven的tomcat插件,配置如下,添加一个maven application,Command line写入命令即可,注意不要添加mvn,直接写命令参数。

启动后访问页面,发现能正常访问。

控制台可以正常获取db数据。

 

参考博文:

(1)https://www.jianshu.com/p/18d068f47b09

posted @ 2019-10-11 00:57  斐波那切  阅读(720)  评论(0编辑  收藏  举报