前言
因为我们在idea中创建了一个maven项目,因为是ssm框架,所以最好在项目开始前在pom.xml中导入需要的jar包,
1.测试jar包,2.日志jar包 3.spring所需的jar包 4.mybatis的jar包 5.jdbc(数据库连接的jar包)6.mybatis和sprig的整合jar包
7.连接池jar包
<!--测试相关的jar包工具--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!--提供log相关的工具日志,实现slf4j接口并整合--> <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> <!--如果想要线上环境也有log就把scope去掉,默认是compile的scope--> </dependency> <!--引入spring的相关jar包--> <!--spring的核心,spring框架其他组件都要使用这个包里面的类,是其它组件的核心--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <!--这个jar文件是所有运用都要用到的,它包含大量访问配置文件,创建和管理bean以及进行(IOC/dI)操作相关类 可以动态的创建一些我们需要的类类似反射--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <!--这个jar文件为spring核心提供大量扩展,可以找到spring ApplicationContext所需的全部类,instumenttation组件以及校验validation方面的类--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!-- 2)Spring DAO层 --> <!--这个jar文件包含对spring对JDBC数据访问进行封装的所有类--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <!--为项目提供一致的声明和编程式事物管理--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <!-- 3)Spring web --> <!--spring web应用开发,大量工具辅助类--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <!--包含SpringMvc框架所有类--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- 4)Spring test 测试的时候用到的,对junlt等测试框架的简单封装 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> <scope>test</scope> </dependency> <!--提供servlet服务--> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <!--解析json--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.7</version> </dependency> <!--map工具类,对标准java collection的扩展 spring—core.jar需commons—colletions.jar--> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2</version> </dependency> <!-- DAO: MyBatis 主类--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.2</version> </dependency> <!--跟spring整合--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.1</version> </dependency> <!-- 2.数据库支持jdbc和mybatis的交互 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.37</version> <scope>runtime</scope> </dependency> <!--连接池--> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency>
<properties> <spring.version>4.3.7.RELEASE</spring.version><!--下面定义了spring的版本,可以在这里定义-->统一管理jar包版本 </properties> 注意:我们在idea当中新建一个properties时,就要新建一个ResourceBundle类型的文件 创建一个jdbc.properties文件
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/wenweno2o?useUnicode=ture&characterEncoding=utf8 jdbc.username=root jdbc.password=ROOT2.创建mybtis—config.xml文件配置全局属性,对mybatis做一个配置
3.创建spring-dao.xml配置文件,将jdbc,mybatis所有的都加载进来,创建datesuce连接池,并且创建好mybatis和数据库交互的方式,单例实现
sqlsessionFactory,
4.定义spring-service.xml这个配置文件,管理事物,注入数据库连接池,扫描注解声明事物
5.定义spring-web.xml,主要定义dispatchsevlet对映射器,适配器,视图解析器的控制,和响应url请求,定义conllor的一些行为
6.在web.xml中吧dispatcherservlet当做一个请求注册到服务器,让所有请求通过dispatcherservlet。并且初始化spring下的所有文件配置
logback日志配置
1.做故障定位 2.显示程序运行状态,
logback的主要模块
logback-access 通过http来访问日志的功能,(第三方可以访问)
logback-classic logforg的改良版本,兼容不同系统,优化了很多
logback-core 为前面两个服务提供了基础
主要标签
logger:主要存放日志对象,管理日志类型级别
appender:输出的目的地
layout:格式化日志输出
在文件中建立一个logback.xml文件
<?xml version="1.0" encoding="utf-8" ?> <!--配置 scan表示配置文件改变从新加载 scanPeriod表示检测检测的时间间隔,自动感知,60秒 debug为true会时时打印logback内部信息我们不需要--> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <!--定义参数常量--> <!--日志分级别显示,trace<DEBUGE<INFO<WARN<ERROR--> <!--logger.trace("...')比如我们定义的是INFO,则日志中只会显示WARN和ERROR的日志信息--> <!--在实际的一般只用debug info error存在不同的三个文件中--> <property name="log.level" value ="debug"/> <!--文件存在的最大时间--> <property name="log.maxHistory" value="30"/> <!--文件存储的路径catalina.base存储tomcat根目录实例 在tomcat的根目录的子目录里面--> <property name="log.filePath" value="${catalina.base}/logs/webapps"/> <!--时间格式,标识那个线程执行 级别 那个类下面的那个类 msg显示相关的日志信息 %n换行显示--> <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS}[%thread]%-5level %logger{50}- %msg%n"/> <!--告诉输出介质,输出在哪,程序日志信息--><!--控制台设置--> <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"> <!--encoder相当于layout:日志输出,把事件转化成字符串数组的功能还会把日志输出到响应的文件中--> <encoder> <!--定义输出格式 就会按照这个格式输出了--> <patten>${log.pattern}</patten> </encoder> </appender> <!--DEBUG--><!--rolling:滚动 随着文件的增大会滚出新的日志文件来或者随着时间的推移按天滚出新的日志文件--> <appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--文件路径--> <file>${log.filePath}/debug.log</file> <!--滚动策略--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--文件名称--> <fileNamePattern> ${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz </fileNamePattern> <!--文件最大的保存时间历史数量,最大30天--> <maxHistory>${log.maxHistory}</maxHistory> </rollingPolicy> <encoder> <!--定义输出格式 就会按照这个格式输出了--> <patten>${log.pattern}</patten> </encoder> <!--过滤器 过滤掉不是debug的日志 只记录debug.log.gz的记录--> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>DEBUG</level> <!--如果符合就加入--> <onMismatch>ACCEPT</onMismatch> <!--否则的话就否定--> <onMismatch>DENY</onMismatch> </filter> </appender> <!--INFO--> <appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--日志记录路径--> <file>${log.filePath}/info.log</file> <!--滚动策略--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--文件名称--> <fileNamePattern> ${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz </fileNamePattern> <!--文件最大的保存时间历史数量,最大30天--> <maxHistory>${log.maxHistory}</maxHistory> </rollingPolicy> <encoder> <!--定义输出格式 就会按照这个格式输出了--> <patten>${log.pattern}</patten> </encoder> <!--过滤器 过滤掉不是debug的日志 只记录debug.log.gz的记录--> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <!--如果符合就加入--> <onMismatch>ACCEPT</onMismatch> <!--否则的话就否定--> <onMismatch>DENY</onMismatch> </filter> </appender> <!--ERROR--> <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--文件路径--> <file>${log.filePath}/error.log</file> <!--滚动策略--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--文件名称--> <fileNamePattern> ${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz </fileNamePattern> <!--文件最大的保存时间历史数量,最大30天--> <maxHistory>${log.maxHistory}</maxHistory> </rollingPolicy> <encoder> <!--定义输出格式 就会按照这个格式输出了--> <patten>${log.pattern}</patten> </encoder> <!--过滤器 过滤掉不是debug的日志 只记录debug.log.gz的记录--> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <!--如果符合就加入--> <onMismatch>ACCEPT</onMismatch> <!--否则的话就否定--> <onMismatch>DENY</onMismatch> </filter> </appender> <!--存放日志对象 告诉logback 你是要关注哪里的信息 告诉legback只需要记录哪个等级之上的记录 additivity="true"表示继承了root--> <logger name="com.jxut.o2o" level="${log.level}" additivity="true"> <appender-ref ref="debugAppender"/> <appender-ref ref="infoAppender"/> <appender-ref ref="errorAppender"/> </logger> <!--其实是特殊的根log 父log--> <root level="info"> <!--s输出到控制台--> <appender-ref ref="consoleAppender"/> </root> </configuration> <!--一个类只能对应一个logger,要不在logger内,要不就在root里面写-->