依赖
搭建ssm框架的第一步必须是依赖,很多新手在搭建ssm的时候最头疼应该就是这了,一个是依赖多,另一个就是因为依赖版本不统一而产生的错误,所以我整理好了ssm整合过程中的需要的所有依赖,每一个都是必须的 spring-aop spring-beans spring-context spring-expression spring-web spring-webmvc spring-context-support freemarker-gae commons-pool javax.annotation-api servlet-api mybatis mybatis-spring c3p0/dbcp/druid(连接池)mysql-connector-java Spring-JDBC web.xml配置
<!-- 配置SpringMVC核心控制器 --> <servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 配置初始配置化文件,前面contextConfigLocation看情况二选一 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring-mvc.xml</param-value> </init-param> </servlet> <!--为DispatcherServlet建立映射 --> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!--加载Spring配置文件 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:application.xml</param-value> </context-param> <!--监听器--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>我这里没配置log4j的配置和监听器 log4j的配置跟application.xml一样都要配置在context-param标签里 log4j的监听器和spring的context一样就是导的包不一样 ssm在启动的时候会先去加载context-param的标签的配置,去完成数据库的加载配置等操作 这里可以配置一个过滤器,用来处理中文乱码,但是因为只对post请求有效,所以我就在spring-mvc.xml配置了另一种处理乱码的方式,就没在这配置过滤器,具体大家可以在下边看到
application.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" 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/tx"> <!-- 配置c3p0连接池--> <!-- 1.加载数据库配置文件--> <context:property-placeholder location="classpath:database.properties"/> <!-- 2.设置连接属性--> <bean class="com.mchange.v2.c3p0.ComboPooledDataSource" id="dataSource"> <property name="jdbcUrl" value="${jdbcUrl}"/> <property name="driverClass" value="${driverClass}"/> <property name="user" value="${user}"/> <property name="password" value="${password}"/> </bean> <!-- 配置sqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <!-- 加载mybatis的配置文件 --> <property name="configLocation" value="classpath:mybatis-config.xml"/> <!-- 自动扫描mapping.xml文件 --> <property name="mapperLocations" value="classpath:mapper/*.xml"/> </bean> <!-- 启动注解 --> <context:annotation-config/> <!-- 扫描Mapper --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 扫描me.gacl.dao这个包以及它的子包下的所有映射接口类 --> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> <property name="basePackage" value="com.spring.ladon.mapper"/> </bean> <!-- 扫描service包下所有使用注解的类型 --> <context:component-scan base-package="com.spring.ladon.service"/> </beans>这里没有配置事务等,只是最简单的一个空的SSM框架,在项目启动初期,web.xml会首先加载这个配置文件,大家可以通过看这个配置可以看到,这一步是加载数据源,创建sqlsessionfactory,加载mybatis的核心配置,扫描mybatis映射文件以及service层 设置连接属性时,name的值根据连接池来写,value的值是数据源配置文件的属性名字,当然了,这里可以写死,就不需要去加载数据源的配置文件了,把加载数据源的那行代码一定要注释掉,不然会报错
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" 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/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 开启注解 --> <mvc:annotation-driven/> <!-- 处理全局乱码 --> <mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>application/json;charset=UTF-8</value> </list> </property> </bean> <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> <value>application/json</value> </list> </property> <property name="features"> <list> <!-- Date的日期转换器 --> <value>WriteDateUseDateFormat</value> </list> </property> </bean> </mvc:message-converters> </mvc:annotation-driven> <!-- 使用注解方式完成映射 --> <!-- 让扫描spring扫描这个包下所有的类,让标注spring注解的类生效 --> <context:component-scan base-package="com.spring.ladon.controller"/> <!-- 视图解析器 --> <!-- 配置静态资源--> <mvc:default-servlet-handler/> <!--jsp--> <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView"/> <property name="prefix" value="/jsp/"/> <property name="suffix" value=".jsp"/> <property name="order" value="1"/> </bean> <!--html--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/html/"/> <property name="suffix" value=".html"/> <property name="order" value="0"/> </bean> <!--拦截器--> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/mvc/*"/> <bean class="com.spring.ladon.config.Interceptor"/> </mvc:interceptor> </mvc:interceptors> </beans>spring-mvc.xml这里有一个解决乱码的配置和视图解析器以及拦截器,解决乱码的配置就不说了,先说视图解析器吧,jsp的视图解析器没什么需要讲的,就说一下html的吧,之前在网上搜html的视图解析器,各种各样的配置,试了得有8-10种,反正就是怎么配的都有,但到我这就不行,不知道是真的别人的配置有问题,还是我自己少依赖啥的,后来偶然间看到一个帖子就解决了,其实jsp和html的配置都一样,访问不到html是因为tomcat没识别html是静态资源,那么我们让tomcat识别html为静态资源就好了,加个mvc:default-servlet-handler这个标签就好了,至于这标签干嘛的,大哥们自己百度吧,我也没深入研究 视图解析器中name有个值是order这个是优先级的意思,数值越小,优先级越大,在同一路径下,有两个相同名字的文件,一个是html,一个是jsp,会跳转那个优先级大的那个文件,比如index.html和index.jsp,html的优先级是0,jsp的优先级是1,就会先跳转html,如果在同一目录下不会同时出现index.html和index.jsp的话,就不用加这个order了
拦截器在自定义拦截器的时候要实现HandlerInterceptor接口,里边有三个方法 1.preHandler(进入方法前拦截。返回false直接结束方法并返回,true继续执行拦截器和方法) 2.postHandler(方法中拦截) 3.afterHandler(结束时拦截)
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> <settings> <!-- 本地(一级)缓存作用域,默认 SESSION,会缓存一个会话(SqlSession)中执行的所有查询。 设置为 STATEMENT,会话仅作用在语句执行上,对 SqlSession 的调用将不会共享数据,可认为是禁用一级缓存 --> <setting name="localCacheScope" value="SESSION"/> <!-- 控制台打印SQL --> <setting name="logImpl" value="STDOUT_LOGGING"/> <!-- 是否可以使用列的别名 (取决于驱动的兼容性) default:true --> <setting name="useColumnLabel" value="true"/> <!-- 指定 MyBatis 如何自动映射 数据基表的列 NONE:不隐射 PARTIAL:部分 FULL:全部 --> <setting name="autoMappingBehavior" value="PARTIAL"/> <!-- 这是默认的执行类型 (SIMPLE: 简单; REUSE: 执行器可能重复使用prepared statements语句;BATCH: 执行器可以重复执行语句和批量更新) --> <setting name="defaultExecutorType" value="SIMPLE"/> <!-- 使用驼峰命名法转换字段。 --> <setting name="mapUnderscoreToCamelCase" value="true"/> <!-- 设置但JDBC类型为空时,某些驱动程序 要指定值,default:OTHER,插入空值时不需要指定类型 --> <setting name="jdbcTypeForNull" value="NULL"/> <!-- 是否允许单条sql 返回多个数据集 (取决于驱动的兼容性) default:true --> <setting name="multipleResultSetsEnabled" value="true"/> <!-- 允许JDBC 生成主键。需要驱动器支持。如果设为了true,这个设置将强制使用被生成的主键,有一些驱动器不兼容不过仍然可以执行。 default:false --> <setting name="useGeneratedKeys" value="false"/> </settings> <!-- 设置别名 --> <typeAliases> <typeAlias type="com.spring.ladon.entity.UserEntity" alias="user"/> </typeAliases> <!--映射该包下的所有映射文件--> <mappers> <package name="com.spring.ladon.mapper"/> </mappers> </configuration>这个mybatis的配置文件就不用过多解释了,没什么难理解的
database.properties
driverClass=com.mysql.cj.jdbc.Driver jdbcUrl=jdbc:mysql://localhost:3306/demo_insql user=root password=password这里的名字可以任意起,但是推荐使用和选择的连接池使用一样的,这里的名字是在application.xml配置数据源的时候会用到,每个连接池的统一属性名字都不一样