Spring MVC 开发环境搭建
1.项目创建
首先我们创建一个新项目
选择Maven->Create from archetype ->maven-archetype-webapp
设置groupId,artifactId,默认版本1.0-SNAPSHOT
选择maven目录,我这里用的是idea自带的maven插件,设置maven的setting.xml位置
设置项目名称和项目地址 - 然后点击完成
我们来看下项目初始化的目录结构
2.pom.xml配置
我们打开pom.xml,我们可以看到定义了一些项目的基础配置,以及项目引用了junit依赖
我们继续引入我们需要的依赖,因为我们是一个Spring MVC 的项目,我们要引入Spring的bean,然后我们还要引入Spring 上下文,那么Spring基础的配置就引用完了
<!-- Spring 基础配置 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${springframework.version}</version>
</dependency>
接下来,我们需要引入Spring MVC的配置,同时我们加上Spring Web以及Spring JDBC的配置
<!-- Spring MVC + Spring WEB -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${springframework.version}</version>
</dependency>
至此,我们Spring所需相关依赖就配置完成了,因为Spring的版本统一,所以单独用<properties>标签包围起来
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<springframework.version>4.3.10.RELEASE</springframework.version>
</properties>
Spring MVC的核心依赖配置完了之后呢,我们配置一下数据库相关的一些配置,我们还是使用mybatis处理我们的sql,引入mybatis,因为我们项目里需要打通mybatis和spring 的关联,我们还要需要引入mybatis关联Spring的包
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.0</version>
</dependency>
<!-- mybatis 关联 spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
接下来我们引入druid,用它来做数据源的管理
<!-- druid 数据源管理 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.20</version>
</dependency>
我们的数据库使用的mysql,我们引入mysql的包,然后我们数据库相关的就配置完成了
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version>
</dependency>
接下来,我们引入lombok,开发必备~
<!-- lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.12</version>
</dependency>
接下来,我们继续引入新的依赖,我们的项目里会使用到json,包括我们普通接口的返回,以及我们项目中代码的处理,这里我们json的解析工具使用Jackson,至此,我们基础的maven配置就完成了
<!-- Jackson -->
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-guava</artifactId>
<version>2.5.3</version>
</dependency>
3.web.xml配置
首先我们来看下web.xml的默认配置
首先呢,我们需要为spring环境指定个listener,它负责来监听我们上下文 spring bean的加载
<!-- 监听上下文 spring bean 的加载 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
指定spring 加载所需要的文件,首先在‘src/main/resources/ ’目录下新建resources目录,并设置目录类型为resources,在该目录下新增配置文件
<!-- spring beans 配置文件所在目录,加了classpath路径会在resources目录去找,不加则在WEB-INF目录下去找 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
接下来我们配置spring mvc,然后需要配置spring-servlet.xml, 文件名必须是‘ servlet-name’加‘-servlet’,这样spring会自动读取该文件
<!-- spring mvc 配置 专门处理配发请求,本配置处理所有请求 -->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
配置完spring mvc之后我们要指定我们的项目编码,其实是一个过滤器,对请求进行过滤,设置他们的编码
<!-- 设置项目编码,相当于过滤器,对一些请求做一些过滤 -->
<filter>
<filter-name>encodingFilter</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>encodingFilter</filter-name>
<!-- /* 匹配所有,/ 匹配不带后缀的 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
接下来我们还需要一个配置,当我们什么都不指定的时候,它会返回哪个目录
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
这样,我们的web.xml基本就配置好了,这里呢它指定了我们spring加载的配置文件,以及spring mvc的配置,同时我们配置了项目编码,我们还新增了两个文件 applicationContext.xml和spring-servlet.xml,后续我们需要配置这两个文件
4.spring-servlet.xml配置
配置使上下文的配置能直接被使用
<context:annotation-config/>
启动注解驱动spring mvc功能,有了这个配置,我们Controller注解,Service注解和Component注解都会自动成为spring管理的bean
<!-- 启动注解驱动的spring mvc 功能 -->
<mvc:annotation-driven/>
启动包扫描功能,并新建相应的目录
<!-- 启动包扫描功能 -->
<context:component-scan base-package="com.ryan.controller"/>
<context:component-scan base-package="com.ryan.service"/>
接下来配置视图解析,这样我们spring-servlet.xml就配置好了
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
<bean id="jsonView" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
5.applicationContext.xml配置
首先我对数据源进行配置,同时配置占位符替换功能,新增settings.properties
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<!-- 忽略不能识别的占位 -->
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<!-- 指定配置文件 -->
<property name="locations">
<list>
<value>classpath:settings.properties</value>
</list>
</property>
</bean>
<import resource="redis.xml"/>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="driverClassName" value="${db.driverClassName}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
<property name="initialSize" value="3"/>
<property name="minIdle" value="3"/>
<property name="maxActive" value="20"/>
<property name="maxWait" value="60000"/>
<property name="filters" value="stat,wall"/>
</bean>
接下来定义session factory
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.ryan.dao"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
事物配置
<!-- tx -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
配置stat和wall
<!-- druid -->
<bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
<property name="slowSqlMillis" value="3000"/>
<property name="logSlowSql" value="true"/>
<property name="mergeSql" value="true"/>
</bean>
<bean id="wall-filter" class="com.alibaba.druid.wall.WallFilter">
<property name="dbType" value="mysql"/>
</bean>
6.druid配置
配置druid访问,在web.xml配置
<!-- druid -->
<servlet>
<servlet-name>DruidStatServlet</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatServlet</servlet-name>
<url-pattern>/sys/druid/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>DruidWebStatFilter</filter-name>
<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
<init-param>
<param-name>exclusions</param-name>
<param-value>*.js,*.css,*.jpg,*.png,*.ico,*.gif,/sys/druid/*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>DruidWebStatFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
7.mybatis-config.xml配置
<configuration>
<settings>
<setting name="safeRowBoundsEnabled" value="true"/>
<setting name="cacheEnabled" value="false"/>
<setting name="useGeneratedKeys" value="true"/>
</settings>
<!-- <typeAliases>-->
<!-- <typeAlias type="com.xxx" alias="bb"/>-->
<!-- </typeAliases>-->
<!-- <plugins>-->
<!-- <plugin interceptor=""></plugin>-->
<!-- </plugins>-->
</configuration>
8.logback.xml配置
打开pom.xml,引入logback的依赖,并引入slf4j,结合使用,并新建logback.xml
<!-- logback -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.8</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.8</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.22</version>
</dependency>
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<!--<appender name="permission" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
<!--<file>${catalina.home}/logs/permission.log</file>-->
<!--<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
<!--<FileNamePattern>${catalina.home}/logs/permission.%d{yyyy-MM-dd}.log.gz</FileNamePattern>-->
<!--</rollingPolicy>-->
<!--<layout class="ch.qos.logback.classic.PatternLayout">-->
<!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>-->
<!--</layout>-->
<!--</appender>-->
<!---->
<!--<logger name="xxx" level="INFO">-->
<!--<appender-ref ref="permission"/>-->
<!--</logger>-->
<!-- TRACE < DEBUG < INFO < WARN < ERROR -->
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
9.环境验证
新建TestController,TestDao 和 TestMapper ,并配置tomcat,期间会报错,把spring-servlet RequestMappingHandlerMapping注释掉即可运行,这样一套SpringMVC环境就搭建完成了
public interface TestDao {
}
<?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="com.ryan.dao.TestDao">
</mapper>
下一篇: SDRAM控制器设计(3)初始化操作