SSM(spring + spring mvc + mybatis)核心配置

news/2024/7/24 3:55:17

这两天编写了SSM各核心配置文件,真的是踩坑无数。所以写了这个教程,希望能帮大家避免踩雷。如果有错误的地方,希望各位大佬批评指正。
(小声bb:还是springboot好用)

1. 总体框架(项目结构)

在这里插入图片描述

2. 正式开始配置

第一步:配置pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.summerCamp</groupId>
	<artifactId>SSM</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<build>
		<plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    	</plugins>
		<resources>
			<resource>
				<directory>src/main/java</directory>
				<includes>
					<include>**/*.properties</include>
					<include>**/*.xml</include>
				</includes>
				<filtering>false</filtering>
			</resource>
			<resource>
				<directory>src/main/resources</directory>
				<includes>
					<include>**/*.properties</include>
					<include>**/*.xml</include>
				</includes>
				<filtering>false</filtering>
			</resource>
		</resources>
	</build>
	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>4.3.7.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>4.3.7.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aspects</artifactId>
			<version>4.3.7.RELEASE</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.4.2</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.3.1</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/c3p0/c3p0 -->
		<dependency>
			<groupId>c3p0</groupId>
			<artifactId>c3p0</artifactId>
			<version>0.9.1.2</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.21</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
			<scope>provided</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/junit/junit -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
		</dependency>
	</dependencies>
</project>

build中的内容为必写项,否则编译时无法找到mapper.xml,导致报找不到mapper文件的错误

spring等包版本根据需求填写即可。

第二步:编写applicationContext.xml

该文件的默认存放地址应该是/WEB-INF/applicationContext.xml,也可以像我一样自定义目录和名称(我的地址是/WEB-INF/resource/application.xml),当然这需要在web.xml中声明(在后面配置web.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:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
			    http://www.springframework.org/schema/beans/spring-beans.xsd
			    http://www.springframework.org/schema/context
			    http://www.springframework.org/schema/context/spring-context.xsd
			    http://www.springframework.org/schema/aop
			    http://www.springframework.org/schema/aop/spring-aop.xsd
			    http://www.springframework.org/schema/tx
			    http://www.springframework.org/schema/tx/spring-tx.xsd
			    http://www.springframework.org/schema/mvc
			    http://www.springframework.org/schema/mvc/spring-mvc.xsd">
		
		<context:component-scan base-package="com.summerCamp" use-default-filters="false">
        	<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    	</context:component-scan>
    	<context:annotation-config></context:annotation-config>
		<context:property-placeholder location="/WEB-INF/resource/dbconfig.properties"/>
		<bean id="PooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        	<property name="driverClass" value="${jdbc.driverClass}"/>
        	<property name="jdbcUrl" value="${jdbc.jdbcUrl}"/>
        	<property name="user" value="${jdbc.user}"/>
        	<property name="password" value="${jdbc.password}"/>
    	</bean>
    	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        	<property name="dataSource" ref="PooledDataSource"/>
        	<property name="configLocation" value="/WEB-INF/resource/mybatis-config.xml"/>
    	</bean>
    	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        	<property name="basePackage" value="com.summerCamp.dao"/>
    	</bean>
    	<context:component-scan base-package="com.summerCamp.service" use-default-filters="false">
        	<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
    	</context:component-scan>
    	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        	<property name="dataSource" ref="PooledDataSource"/>
    	</bean>
    	<aop:config>
    		<aop:pointcut expression="execution(* com.summerCamp.service..*(..))" id="txPoint"/>
    		<aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint"/>
    	</aop:config>
    	<tx:advice id="txAdvice" transaction-manager="transactionManager">
    		<tx:attributes>
    			<tx:method name="*"/>
    			<tx:method name="get*" read-only="true"/>
    		</tx:attributes>
    	</tx:advice>
</beans>

第三步:编写mybatis的配置文件mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <typeAliases>
        <package name="com.summerCamp.pojo"/>
    </typeAliases>
    <mappers>
    	<mapper resource="../classes/com/summerCamp/mapper/ClassMapper.xml"/>
    	<mapper resource="../classes/com/summerCamp/mapper/goodsMapper.xml"/>
    	<mapper resource="../classes/com/summerCamp/mapper/UserMapper.xml"/>
    </mappers>
	
</configuration>

这里要注意mapper的存放地址,小心填写mapper的相对地址,不然会报找不到mapper文件的错误。

第四步:编写数据库配置文件dbconfig.properties

这个文件可以自主命名,但要注意在applicationContext.xml中做相应的修改。

jdbc.jdbcUrl=jdbc:mysql://localhost:3306/这里填数据库名称?serverTimezone=GMT&useUnicode=true&characterEncoding=UTF-8
jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.user=root
jdbc.password=这里填密码

这里记得mysql8的驱动改成了com.mysql.cj.jdbc.Driver就可以

第五步:编写dispatcherServlet-servlet.xml

这个文件必须放在web.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:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans.xsd
	http://www.springframework.org/schema/context
   	http://www.springframework.org/schema/context/spring-context-3.0.xsd
   	http://www.springframework.org/schema/mvc 
   	http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
   	">
	
	<context:component-scan base-package="com.summerCamp" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
	
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
    <mvc:default-servlet-handler/>
    <mvc:annotation-driven/>
</beans>

prefix属性填以后jsp文件存放的位置

第六步:重头戏:配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.5"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<welcome-file-list>
    	<welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/resource/application.xml</param-value>
	</context-param>
	<listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
	<servlet>
		<servlet-name>dispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>dispatcherServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	<filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceRequestEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>forceResponseEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter>
    	<filter-name>HiddenHttpMethodFilter</filter-name>
    	<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

分析:

  1. listener这一部分必须要写!!!
<listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
  1. contex-param要分情况,如果像我一样把applicationContext.xml进行了自主命名,或者没有放在默认路径,就必须进行这一部分的配置。
<context-param>
   		<param-name>contextConfigLocation</param-name>
   		<param-value>/WEB-INF/resource/application.xml</param-value>
</context-param>

如果applicationContext在默认路径,即/WEB-INF/applicationContext.xml,则无需写这个标签。

有一个BUG分享一下:
如果你发现加上listener监听器页面就报404,但是把listener注释掉页面正常显示,但是会提示找不到某个bean,而这个bean你已经确定注册过了,那么就这样检查:
检查你的applicationContext.xml在不在/WEB-INF/目录下,如果不在默认目录中,一定要检查上面说的context-param有没有配置,相对路径有没有写对。
如果这些都确定没有写错,那么检查tomcat的console提示,一般是mapper的相对路径写错了,或者是其他配置文件的相对路径写错了。一定要检查每一个相对路径书写是否正确!!!

结束

​ 在进行完以上操作后,所有SSM核心配置文件已全部编写完毕。可以编写一个简单的controller进行测试,祝大家都配置顺利。


http://www.niftyadmin.cn/n/642827.html

相关文章

BZOJ2694:Lcm——包看得懂/看不懂题解

http://www.lydsy.com/JudgeOnline/problem.php?id2694Description 对于任意的>1的n gcd(a, b)不是n^2的倍数 也就是说gcd(a, b)没有一个因子的次数>2Input 一个正整数T表示数据组数 接下来T行 每行两个正整数 表示N、MOutput T行 每行一个整数 表示第i组数据的结果Samp…

交换机的级联、堆叠和集群

随着计算机数量的增加、网络规模的扩大&#xff0c;在越来越多的局域网环境中&#xff0c;交换机取代了集线器&#xff0c;多台交换机互连取代了单台交换机。在多交换机的局域网环境中&#xff0c;交换机的级联、堆叠和集群是3种重要的技术。级联技术可以实现多台交换机之间的互…

laravel之Eloquent关联

定义 模型 用对象表示的表实例&#xff0c;负责与数据库的交互逻辑构建关联模型 要连接到的最终模型关联方法 返回一个关联关系的方法 关联属性 $with属性 由关联方法名组成的数组,通常用于渴求式加载 连接表 又称中间表&#xff0c;通常用于多对多关系主键 模型的唯一标识符外…

QT tcpserver启动监听SIGSEGV错误

QT tcpserver启动监听SIGSEGV错误 --------------------------- Signal Received --------------------------- <p>The inferior stopped because it received a signal from the operating system.<p><table><tr><td>Signal name : </td>…

SSM框架报错:元素 ‘annotation-driven‘ 必须不含字符 [子级], 因为该类型的内容类型为“仅元素”。

在SSM框架整合fastjson的时候出了一个莫名其妙的BUG&#xff0c;报错内容为&#xff1a;元素 ‘mvc:annotation-driven’ 必须不含字符 [子级], 因为该类型的内容类型为“仅元素”。 我的mvc:annotation-driven内容为&#xff1a; <mvc:annotation-driven><mvc:mess…

JSON数组去重

/* * JSON数组去重 * param: [array] json Array * param: [string] 唯一的key名&#xff0c;根据此键名进行去重 */function uniqueArray(array, key,mergekey){ var result [array[0]]; for(var i 1; i < array.length; i){ var item array[i]; var repe…

非网管和网管交换机区别

交换机可以分为网管交换机以及非网管交换机&#xff0c;而非网管交换机又称为傻瓜型交换机&#xff0c;不需要任何设置&#xff0c;插上网线即可。 什么叫非网管交换机&#xff1f; 非网管交换机&#xff0c;是相对网管型交换机而言的。网管型交换机的数据&#xff0c;会通过简…

QT error: undefined reference to `__imp__ZN12QSqlDatabase7driversEv‘报错

D:\QT_Project\src17_1\main.cpp:10: error: undefined reference to __imp__ZN12QSqlDatabase7driversEv 可用数据库插件驱动查看 "QSQLITE" "QODBC" "QODBC3" "QPSQL" "QPSQL7" pro文件添加&#xff1a; QTsql