用了好久了,但都是当初大神配置完后直接粘贴复制过来的,一直没仔细看过相关配置,趁此机会对自己也算是一个复习与深入,也希望对初学者有所帮助。本系列均是基于IDEA的教程。在学校时用的Eclipse,刚出校门接触的MyEclipse,一年后接触到IDEA就从此彻底倒戈。
对于IDEA,有条件的推荐购买,没条件的嘛。。。。你懂得,这里暂且免费送个激活传送门:
最初使用的基于c3p0连接池做的该教程,之后由于发现在后期涉及到emoji表情存储时出现了些问题,改成druid连接池及相关配置后达到了期望值。故:本教程中给出了分别基于c3p0和druid的相关配置,带new的为druid相关,带old的为c3p0相关,请自行酌情选取其中之一使用。另,对于两者都不带的则为通用配置。
java1.8
Spring 4.3.7.RELEASE
Spring MVC 4.3.7.RELEASE
MyBatis 3.4.2
若初次使用IDEA,会进入欢迎页面(这里由于已经非初次,所以从网上找了个图用来演示),在欢迎界面点击Create New Project
。
若非第一次,请按如下步骤打开新建项目界面
File -> New Project
以上两种方法均进入如下页面
1.选择使用maven创建项目。
2.选择项目使用的SDK。
3.选中 Create from archetype(选择Maven原型模板),在下面选择maven-archetype-webapp。
之后填入GroupID
和ArtifactID
。这里请尽量按maven命名规范填写(详情可见之后的附录)。
groupId:所述的项目名称,由于有的项目并不是一个jar包构成的,而是由很多的jar包组成的。因此这个groupId就是整个项目的名称。
artifactId:包的名称。
version:版本号。
之后点击下一步,进入一个基础构建配置界面,此处默认直接下一步的情况下,容易导致创建缓慢或长时间停在Generating project in Batch mode不动的情况,在此处配置archetypeCatalog = internal即可解决该问题,如图:
之后点击下一步,填入项目名称,这里建议和之前填写的ArtifactID
名称一样即可(最新版的已经会自动填写ArtifactID
名称),同时自行选择创建路径,亦可用上面显示的默认路径,如图:
点击finish,等待maven创建项目,如下图时创建完成:
首先如图创建java,以及相关目录,用于之后存储java代码。
点击菜单中File --> Project Structure -->Modules,如图进行配置:
java设置为Sources,用于存放java代码
resources设置为Resources,用于存放xml等项目的相关配置文件。
以下为项目的用到的pom.xml。
new--基于druid连接池
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.windCoder</groupId>
<artifactId>SSMDemo</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>SSMDemo Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<java.version>1.8</java.version>
<!-- spring版本号 -->
<spring.version>4.3.7.RELEASE</spring.version>
<!-- mybatis版本号 -->
<mybatis.version>3.4.2</mybatis.version>
<!-- log4j日志文件管理包版本 -->
<slf4j.version>1.7.25</slf4j.version>
<log4j.version>2.8.2</log4j.version>
<!-- 导入MySQL数据库链接jar包 -->
<mysqlJava.version>5.1.41</mysqlJava.version>
<!-- mybatis/spring包 -->
<mybatisSpring.version>1.3.1</mybatisSpring.version>
<!-- druid包 -->
<druid.version>1.1.2</druid.version>
<!-- JSTL标签类 -->
<jstl.version>1.2</jstl.version>
<json.version>20170516</json.version>
</properties>
<dependencies>
<!-- 1. junit 依赖 begin junit3.0使用编程方式运行,junit4.0使用注解方式运行 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- junit 依赖 end -->
<!-- 2. spring依赖 begin-->
<!-- spring核心依赖:这个jar 文件包含Spring 框架基本的核心工具类。Spring 其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- spring aop依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<!--Spring context的扩展支持,用于MVC方面。-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring对于object/xml映射的支持,可以让JAVA与XML之间来回切换-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<!--spring dao层依赖-->
<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>
<!-- spring web相关依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- spring test相关依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- spring依赖 end-->
<!-- 3. mybatis依赖 begin-->
<!-- mybatis核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- mybatis/spring包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatisSpring.version}</version>
</dependency>
<!-- mybatis依赖 end-->
<!--4. 数据库相关依赖 begin-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysqlJava.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- 数据库相关依赖 end-->
<!--5. log日志依赖 begin-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!--log日志依赖 end-->
<!--6. Servlet web相关依赖 begin-->
<!-- JSTL标签类 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<!-- Servlet web相关依赖 end-->
<!-- 7. 其他依赖 begin -->
<!-- Json依赖 -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>${json.version}</version>
</dependency>
<!-- 文件上传依赖 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.2</version>
</dependency>
<!-- 其他依赖 end -->
</dependencies>
<build>
<finalName>SSMDemo</finalName>
<defaultGoal>compile</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
<!--过滤相关配置文件,全部打包到classpath下-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
old--基于c3p0连接池
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.windCoder</groupId>
<artifactId>SSMDemo</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>SSMDemo Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<java.version>1.8</java.version>
<!-- spring版本号 -->
<spring.version>4.3.7.RELEASE</spring.version>
<!-- mybatis版本号 -->
<mybatis.version>3.4.2</mybatis.version>
<!-- log4j日志文件管理包版本 -->
<slf4j.version>1.7.25</slf4j.version>
<log4j.version>2.8.2</log4j.version>
<!-- 导入MySQL数据库链接jar包 -->
<mysqlJava.version>5.1.41</mysqlJava.version>
<!-- mybatis/spring包 -->
<mybatisSpring.version>1.3.1</mybatisSpring.version>
<!-- c3p0包 -->
<c3p0.version>0.9.1.2</c3p0.version>
<!-- JSTL标签类 -->
<jstl.version>1.2</jstl.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- spring核心包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 使用SpringMVC需配置 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- spring核心包 end-->
<!-- mybatis核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- mybatis/spring包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatisSpring.version}</version>
</dependency>
<!-- 导入MySQL数据库链接jar包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysqlJava.version}</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>${c3p0.version}</version>
</dependency>
<!-- mybatis核心包 end-->
<!-- JSTL标签类 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<!-- log start -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- log end -->
</dependencies>
<build>
<finalName>SSMDemo</finalName>
<defaultGoal>compile</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
<!--过滤相关配置文件,全部打包到classpath下-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
maven的东西暂时不再详细展开,以后有兴致再单开一篇。
数据库配置文件。
new--基于druid连接池
此处后面一些配置属性为druid,不一定适用所有连接池,对于使用其他连接池的请酌情使用。
#mysql
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ssmdemo?useUnicode\=true&characterEncoding\=utf8&zeroDateTimeBehavior\=convertToNull&transformedBitIsBoolean\=true
userName=root
password=
#定义初始连接数
initialSize=5
#连接池中保留的最小连接数,默认为:3
minIdle=5
#连接池中保留的最大连接数,默认为:3
maxActive=30
#是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql5.5以下的版本中没有PSCache功能,建议关闭掉。5.5及以上版本有PSCache,建议开启。
poolPreparedStatements=true
#要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
maxOpenPreparedStatements=30
old--基于c3p0连接池
此处后面一些配置属性为c3p0,不一定适用所有连接池,对于使用其他连接池的请酌情使用。
#mysql
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ssmdemo?useUnicode\=true&characterEncoding\=utf8&zeroDateTimeBehavior\=convertToNull&transformedBitIsBoolean\=true
userName=root
password=
#以下为c3p0专属属性
#定义初始连接数
initialPoolSize=5
#连接池中保留的最小连接数,默认为:3
minPoolSize=5
#连接池中保留的最小连接数,默认为:3
maxPoolSize=30
#连接耗尽时一次获取的连接数
acquireIncrement=10
#最大空闲时间
maxIdleTime=30
#连接池为数据源缓存的PreparedStatement的总数
maxStatements=30
本文用的是log4j2,之前的log4j 1的配置请转至附录。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<!-- 输出到控制台 -->
<Console name="Console" target="SYSTEM_OUT">
<!-- 需要记录的级别 -->
<!-- <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY" /> -->
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m%n" />
</Console>
<!-- 输出到文件,按天或者超过80MB分割 -->
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="c:/logs/ssmdemo_news.log">
<!--<BurstFilter level="INFO" rate="16" maxBurst="100"/>-->
<PatternLayout>
<pattern>%d{MM-dd HH/:mm/:ss.SSS} %-5p [%F/:%L]%x %m%n %X{ip}</pattern>
</PatternLayout>
<Policies>
<OnStartupTriggeringPolicy />
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="80 MB" />
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<!-- 全局配置 -->
<Root level="info">
<AppenderRef ref="Console" />
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
用于配置spring以及mybatis的文件。以下两者根据之前的配置选其一即可。
new--基于druid连接池
<?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:tx="http://www.springframework.org/schema/tx"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 设置需要进行Spring注解扫描的类包 -->
<context:component-scan base-package="com.windCoder.SSMDemo.*"/>
<!-- JDBC配置文件 -->
<context:property-placeholder location="classpath:conf/jdbc.properties"/>
<!-- 数据库连接池配置 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<property name="driverClassName" value="${driverClassName}"/>
<property name="url" value="${url}" />
<property name="username" value="${userName}" />
<property name="password" value="${password}" />
<property name="initialSize" value="${initialSize}" />
<property name="minIdle" value="${minIdle}" />
<property name="maxActive" value="${maxActive}" />
<property name="poolPreparedStatements" value="${poolPreparedStatements}" />
<property name="maxOpenPreparedStatements" value="${maxOpenPreparedStatements}" />
<property name="connectionInitSqls" value="set names utf8mb4;"/>
</bean>
<!-- MyBatis 配置-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 显式指定Mapper文件位置 -->
<property name="mapperLocations" value="classpath:com/windCoder/SSMDemo/entity/**/*Mapper.xml" />
<!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 -->
<property name="typeAliasesPackage" value="com/windCoder/SSMDemo/entity" />
</bean>
<!-- 事件管理 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 开启注解方式声明事务 -->
<tx:annotation-driven transaction-manager="transactionManager" />
<!-- 配置类似于jdbcTemplate的SqlSessionFactory模版 -->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate" >
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
<!-- 文件上传 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
p:defaultEncoding="utf-8"
p:maxUploadSize="52428880"
p:uploadTempDir="assets/uploadTmpDir">
</bean>
</beans>
old--基于c3p0连接池
<?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:tx="http://www.springframework.org/schema/tx"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 设置需要进行Spring注解扫描的类包 -->
<context:component-scan base-package="com.windCoder.SSMDemo.*"/>
<!-- JDBC配置文件 -->
<context:property-placeholder location="classpath:conf/jdbc.properties"/>
<!-- c3p0连接池配置 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${driverClassName}"/>
<property name="jdbcUrl" value="${url}" />
<property name="user" value="${userName}" />
<property name="password" value="${password}" />
<property name="initialPoolSize" value="${initialPoolSize}" />
<property name="minPoolSize" value="${minPoolSize}" />
<property name="maxPoolSize" value="${maxPoolSize}" />
<property name="acquireIncrement" value="${acquireIncrement}" />
<property name="maxIdleTime" value="${maxIdleTime}" />
<property name="maxStatements" value="${maxStatements}" />
</bean>
<!-- MyBatis 配置-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 显式指定Mapper文件位置 -->
<!--<property name="configLocation" value="classpath:conf/SqlMapConfig.xml"/>-->
<!--<property name="mapperLocations" value="classpath:cn/zhonya/authPlat/entity/*Mapper.xml" />-->
<property name="mapperLocations" value="classpath:com/windCoder/SSMDemo/entity/**/*Mapper.xml" />
<!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 -->
<property name="typeAliasesPackage" value="cn/zhonya/SSMDemo/entity" />
</bean>
<!-- 事件管理 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 开启注解方式声明事务 -->
<tx:annotation-driven transaction-manager="transactionManager" />
<!-- 配置类似于jdbcTemplate的SqlSessionFactory模版 -->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate" >
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
<!-- 文件上传 -->
<!--<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"-->
<!--p:defaultEncoding="utf-8"-->
<!--p:maxUploadSize="52428880"-->
<!--p:uploadTempDir="uploadTmpDir">-->
<!--</bean>-->
</beans>
上面将文件上传部分的配置去掉了,若放开,需在前面的pom.xml引入上传用的jar包,如下:
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.2</version>
</dependency>
这个配置文件是springMVC的配置文件:
<?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:p="http://www.springframework.org/schema/p"
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.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->
<context:component-scan base-package="com.windCoder.SSMDemo.controller">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 定义跳转的文件的前后缀 ,视图模式配置-->
<!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个可用的url地址-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />
<!-- springmvc传json值时的乱码解决 -->
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<constructor-arg value="UTF-8" />
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<!-- 控制器异常处理 -->
<bean id="exceptionHandlerExceptionResolver" class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver">
</bean>
</beans>
<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>Archetype Created Web Application</display-name>
<!-- 读取spring配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:conf/spring.xml</param-value>
</context-param>
<!-- 设计路径变量值 -->
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>SSMDemo.root</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:conf/log4j.xml</param-value>
</context-param>
<!-- Spring字符集过滤器 -->
<filter>
<filter-name>SpringEncodingFilter</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>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SpringEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- springMVC核心配置 -->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:conf/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>home.do</welcome-file>
</welcome-file-list>
</web-app>
此处不再说如何安装tomcat,仅以idea中如何配置为主。若仅是在idea中使用,开发环境下可以从官网下载压缩包解压出来就好,不需要做任何环境变量上的配置。
从图中所在位置进入设置页面:
如图点击1处加号,在列表中找到tomcat,选择本地Local:
若里面没有tomcat配置,如下进入配置页:
点击如下图选择tomcat所在文件夹后,自动出现相关配置,之后
配置好tomcat本身后,会看到右下角依旧有个fix的警告,点击该警告,选择里面带explorer即可,之后就可ok配置完成:
在未配置前HttpServletRequest将被提示未找到。
点击菜单中File --> Project Structure -->Modules,(亦可用快捷键Ctrl+Alt+Shift+S)如图点击右侧加号选中library:
在弹出框中选择tomcat即可,如图:
最终ok保存即可。
根据需要点击run菜单中的Run
和Debug
即可运行,或者运行下图中的快捷按键1-run,2-Debug:
此时若直接启动由于没有mapper.xml文件导致spring.xml中的 MyBatis 配置部分找不到*Mapper.xml文件,从而报错。此处临时建一个user类以及对应的mapper.xml用于测试。
创建一个user类。
**
* Description:
* User: windCoder
* Date: 2017-08-01
* Time: 18:13 下午
*/
public class User {
private Integer id;
private String uname;
private String createtime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getCreatetime() {
return createtime;
}
public void setCreatetime(String createtime) {
this.createtime = createtime;
}
}
User类对应的Mapper.xml,里面包含一个User模型,一个插入和一个查询语句。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="User">
<!-- 用户模型 -->
<resultMap type="com.windCoder.SSMDemo.entity.User" id="user">
<id column="id" property="id"/>
<result column="uname" property="uname"/>
<result column="createtime" property="createtime"/>
</resultMap>
<insert id="addUser">
INSERT INTO `user`(uname,createtime)
SELECT #{uname},#{createtime}
FROM dual
WHERE NOT EXISTS(
SELECT id
FROM `user`
WHERE uname = #{uname}
AND createtime = #{createtime}
);
</insert>
<select id="findAllUser" resultMap="user">
SELECT id,uname,createtime
FROM `user`;
</select>
</mapper>
这个是用来测试的类
/**
* Description:
* User: windCoder
* Date: 2017-08-11
* Time: 16:53 下午
*/
@Controller
@RequestMapping("/*")
public class HomeController {
@RequestMapping("home.do")
public String home(HttpServletRequest request) {
return "home";
}
}
这是将要跳转的到的一个简单home.jsp前端文件。
<%--
Created by IntelliJ IDEA.
User: WindCoder
Date: 2017/8/11
Time: 17:12 下午
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>Hello WindCoder</h1>
</body>
</html>
之后再运行,将会出现如图Hello WindCoder的字样,则说明成功了(前提是记得):
groupId:这是工程组的标识。它在一个组织或者项目中通常是唯一的。例如,一个银行组织 com.company.bank 拥有所有的和银行相关的项目。又如: 本站的可以命名为com.windcoder。
artifactId:这是工程的标识。它通常是工程的名称。例如,消费者银行。groupId 和 artifactId 一起定义了 artifact 在仓库中的位置。
version:这是工程的版本号。在 artifact 的仓库中,它用来区分不同的版本。例如:
com.company.bank:consumer-banking:1.0
com.company.bank:consumer-banking:1.1.
此处仅是log4j 相关配置,其他配置相同。
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:conf/log4j.properties</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
log4j.rootCategory=info,stdout,fileout,error
log4j.appender.debug=org.apache.log4j.ConsoleAppender
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{MM-dd HH/:mm/:ss.SSS} %-5p [%F/:%L]%x %m%n %X{ip}
log4j.appender.fileout=org.apache.log4j.RollingFileAppender
log4j.appender.fileout.File=c:/logs/ssmdemo.log
log4j.appender.fileout.MaxFileSize=5000KB
log4j.appender.fileout.MaxBackupIndex=10
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout
log4j.appender.fileout.layout.ConversionPattern=%d{MM-dd HH:mm:ss.SSS}[%24F:%-3L:%-5p]%x %m%n %X{ip}
####显示SQL语句部分
#log4j.logger.com.ibatis=debug
#log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug
#log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug
#log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug
#log4j.logger.java.sql.Connection=debug
#log4j.logger.java.sql.Statement=debug
#log4j.logger.java.sql.PreparedStatement=debug