Java web项目创建笔记2 之《springmvc基础配置》

spring4框架:
参考文档:https://docs.spring.io/spring/docs/4.3.22.RELEASE/spring-framework-reference/htmlsingle/#spring-introduction
API文档:https://docs.spring.io/spring/docs/4.3.22.RELEASE/javadoc-api/

spring5框架:
参考文档:https://docs.spring.io/spring/docs/5.1.5.RELEASE/spring-framework-reference/
API文档:https://docs.spring.io/spring/docs/5.1.5.RELEASE/javadoc-api/

1、引入spring框架jar包
那些包需要引入呢?
根据功能区分:
1)Core Container
引入spring-core, spring-beans, spring-context, spring-context-support, spring-expression
2)AOP and Instrumentation
引入spring-aop, aspectjweaver(使用@Aspect注解)
PS:不需要aspectjrt包,因为weaver包已经包含了rt包的内容
3)Messaging
不用显示引入,有依赖会自动拉下来
4)Data Access/Integration
引入spring-jdbc, spring-tx, spring-orm, spring-oxm, spring-jms
5)Web
引入spring-web, spring-webmvc, spring-websocket, spring-webmvc-portlet
6)Test
引入spring-test

2、引入其他工具包
1)Apache Commons
搜索相关工具包:https://mvnrepository.com/search?q=Apache+Commons
按需要引入commons-io, commons-lang3, commons-codec, commons-pool2等
2)Java Servlet API
引入javax.servlet-api
3)日志相关slf4j + logback
引入slf4j-api, jcl-over-slf4j, logback-core, logback-classic, logback-ext-spring

3、项目父pom文件

<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.my.maven</groupId>
	<artifactId>webapp</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>webapp Maven Webapp</name>
	<url>http://maven.apache.org</url>

	<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.22.RELEASE</springframework.version>
		<aspectj.version>1.8.13</aspectj.version>
		<commons-io.version>2.6</commons-io.version>
		<commons-codec.version>1.12</commons-codec.version>
		<commons-lang3.version>3.8.1</commons-lang3.version>
		<commons-pool2.version>2.6.1</commons-pool2.version>
		<servlet.version>3.1.0</servlet.version>
		<slf4j.version>1.7.26</slf4j.version>
		<logback.version>1.2.3</logback.version>
		<logback-ext-spring.version>0.1.5</logback-ext-spring.version>
		<jcl.version>1.7.26</jcl.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
		<!-- springmvc框架 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<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>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-expression</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>${aspectj.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jms</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-oxm</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<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-websocket</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc-portlet</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${springframework.version}</version>
			<scope>test</scope>
		</dependency>
		<!-- 其他工具包 -->
		<!-- apache commons -->
		<dependency>
			<groupId>commons-codec</groupId>
			<artifactId>commons-codec</artifactId>
			<version>${commons-codec.version}</version>
		</dependency>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>${commons-io.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>${commons-lang3.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-pool2</artifactId>
			<version>${commons-pool2.version}</version>
		</dependency>
		<!-- servlet -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>${servlet.version}</version>
			<scope>provided</scope>
		</dependency>
		<!-- slf4j + logback -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${slf4j.version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>${jcl.version}</version>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-core</artifactId>
			<version>${logback.version}</version>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>${logback.version}</version>
		</dependency>
		<dependency>
			<groupId>org.logback-extensions</groupId>
			<artifactId>logback-ext-spring</artifactId>
			<version>${logback-ext-spring.version}</version>
		</dependency>
	</dependencies>
	<build>
		<finalName>webapp</finalName>
	</build>
</project>

4、jar包说明
Java web项目创建笔记2 之《springmvc基础配置》

名称 功能
spring-core 和spring-beans提供基本的IoC和依赖注入功能
spring-beans 和spring-core提供基本的IoC和依赖注入功能
spring-context

提供spring运行时环境,ApplicationContext接口是context模块的焦点

spring-context-support 将公共第三方库集成到Spring应用程序上下文中提供支持,用于缓存(ehcache、guava、jcache)、邮件(javamail)、调度(commonj、quartz)和模板引擎(freemaker、jasperReports、velocity)
spring-expression 提供了一个功能强大的表达式语言SpEL
spring-aop spring-aop模块提供了一个AOP联盟兼容的面向切面的编程实现,允许您定义方法拦截器和切入点,以清晰地分离实现应该分离的功能的代码
aspectjweaver 使用AspectJ切面需要的jar包
spring-jdbc spring-jdbc模块提供了一个JDBC抽象层,消除了对数据库供应商特定错误代码进行冗长的JDBC编码和解析的需要
spring-tx spring-tx模块支持为实现特殊接口的类和所有POJOs(普通的Java对象)的编程和声明式事务管理
spring-orm spring-orm模块为流行的对象关系映射API(包括JPA、JDO和Hibernate)提供集成层。使用spring-orm模块,您可以将所有这些O/R映射框架与Spring提供的所有其他特性(如前面提到的简单声明性事务管理特性)结合使用
spring-oxm spring-oxm模块提供了一个抽象层,支持对象/XML映射实现,如JAXB、Castor、XMLBeans、JiBX和Xstream
spring-jms spring-jms模块(Java消息服务)包含用于生产和消费消息的特征。从SpringFramework4.1开始,它提供了与spring-messaging模块的集成
spring-web spring-web提供了基本的面向Web的集成功能,例如多文件上传功能、使用servlet监听器和面向Web的应用程序上下文初始化IOC容器。它还包含一个HTTP客户端和Spring远程支持与Web相关的部分
spring-webmvc spring-webmvc(也称为Web-Servlet)包含Spring的模型视图控制器(MVC)和用于Web应用程序的REST Web Services实现。Spring的MVC框架在域模型代码和Web表单之间提供了一个清晰的分离,并与Spring框架的所有其他功能集成
spring-websocket 支持websocket功能
spring-webmvc-portlet spring-webmvc-portlet(也称为Web-Portlet)提供了要在portlet环境中使用的MVC实现,并镜像了基于servlet的spring-webmvc功能
spring-test spring-test支持使用JUnit或TestNG对spring组件进行单元测试和集成测试。它提供了Spring ApplicationContexts的一致加载和缓存。它还提供mock objects,您可以使用这些对象单独测试代码
commons-io commons-io是一款处理io流的工具,封装了很多处理io流和文件的方法
commons-lang3 commons-lang3提供了最常用的工具包,例如ArrayUtils、ClassUtils、EnumUtils、SystemUtils、StringUtils
commons-codec commons-codec是Apache开源组织提供的用于摘要运算、编码解码的包。常见的编码解码工具Base64、MD5、Hex、SHA1、DES等
commons-pool2 commons-pool2包提供了一个通用的对象池技术的实现。可以很方便的基于它来实现自己的对象池
javax.servlet-api 提供Servlet常用接口
slf4j-api slf4j日志框架,门面模式
jcl-over-slf4j 是用来把Spring源代码中大量使用到的commons-logging替换成slf4j,只有在添加了这个依赖之后才能看到Spring框架本身打印的日志,否则只能看到开发者自己打印的日志(adapter commons-logging)
logback-core logback核心包
logback-classic logback对slf4j的实现
logback-ext-spring

spring集成logback包

 参考资料:
1)Spring入门(这一节是包的导入,主要是自己对各个包的理解)
http://www.cnblogs.com/zilincom/articles/6007969.html

2)Spring官方文档
https://docs.spring.io/spring/docs/4.3.22.RELEASE/spring-framework-reference/htmlsingle/#overview-modules

3)spring核心框架体系结构(各个jar包作用)
https://blog.****.net/sunchen2012/article/details/53939253

4)Spring+Logback的集成总结
https://www.cnblogs.com/OnlyCT/p/7762134.html

5)Chapter 8: Mapped Diagnostic Context
https://logback.qos.ch/manual/mdc.html