https://www.cnblogs.com/javafucker/p/7566733.html
1)spring核心依赖
spring-core、spring-beans、spring-context
2)spring dao依赖(提供JDBCTemplate)
spring-jdbc、spring-tx
3)spring web依赖
spring-web、spring-webmvc
4)spring test依赖
spring-test
4.0.0
com.tusuzer
springmvc_demo
1.0-SNAPSHOT
war
springmvc_demo Maven Webapp
http://www.example.com
UTF-8
1.8
1.8
4.3.7.RELEASE
junit
junit
4.11
test
org.slf4j
slf4j-api
1.7.21
ch.qos.logback
logback-classic
1.1.7
ch.qos.logback
logback-core
1.1.7
org.mybatis
mybatis
3.3.0
org.mybatis
mybatis-spring
1.3.1
joda-time
joda-time
2.3
c3p0
c3p0
0.9.1.2
mysql
mysql-connector-java
5.1.25
javax.servlet
javax.servlet-api
3.1.0
taglibs
standard
1.1.2
jstl
jstl
1.2
com.fasterxml.jackson.core
jackson-core
2.8.7
com.fasterxml.jackson.core
jackson-databind
2.8.7
commons-fileupload
commons-fileupload
1.3.1
commons-io
commons-io
2.4
org.springframework
spring-core
${spring.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-beans
${spring.version}
org.springframework
spring-tx
${spring.version}
org.springframework
spring-jdbc
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-test
${spring.version}
springmvc_demo
maven-clean-plugin
3.1.0
maven-resources-plugin
3.0.2
maven-compiler-plugin
3.8.0
maven-surefire-plugin
2.22.1
maven-war-plugin
3.2.2
maven-install-plugin
2.5.2
maven-deploy-plugin
2.8.2
1、字符过滤器
web.xml中写法如下
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
CharacterEncodingFilter
/*
2、文件上传的过滤器
web.xml中写法如下
MultipartFilter
org.springframework.web.multipart.support.MultipartFilter
multipartResolverBeanName
multipartResolver
MultipartFilter
/*
3、扩展form所支持的http方法的过滤器
web.xml中写法如下
hiddenHttpMethodFilter
org.springframework.web.filter.HiddenHttpMethodFilter
hiddenHttpMethodFilter
/*
浏览器form表单只支持GET与POST请求,而DELETE、PUT等method并不支持,spring3.0添加了一个过滤器,可以将这些请求转换为标准的http方法,使得支持GET、POST、PUT与DELETE请求,该过滤器为HiddenHttpMethodFilter。
需要注意的是,由于doFilterInternal方法只对method为post的表单进行过滤,所以在页面中必须如下设置:
而不是使用:
HiddenHttpMethodFilter的实现原理其实就是新建了个HttpMethodRequestWrapper类,覆写了getMethod()方法,也就是将原来本身的HTTP请求方式(POST)给隐藏掉了。
DispatcherServlet是前端控制器设计模式的实现,提供SpringWebMVC的集中访问点,而且负责职责的分派,而且与
spring IOC容器无缝集成,从而可以获得Spring的优势。
关于DispatcherServlet的执行原理可以看这篇文章。
https://blog.csdn.net/jinnianshilongnian/article/details/84254470
其主要职责是调度工作,本身用于控制流程,具体为:
1.文件上传解析,如果请求类型是multipart将通过MultipartResolver进行文件上传解析;
2.通过HandlerMapping,将请求映射到处理器(返回一个HandlerExecutionChain,它包括一个处理器、多个HandlerInterceptor拦截器);
3.通过handlerAdapter支持多种类型的处理器(handlerExceptionChain中的处理器);
4.通过ViewResolver解析逻辑视图名到具体视图实现;
5.本地化解析;
6.渲染具体的视图等;
7.如果执行过程中遇到异常将交给handlerExceptionResolver来解析;
spring
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring/applicationContext.xml
1
spring
/
也就是说,web.xml中的加载顺序是:context-param -> listener -> filter > servlet;而同类型之间的加载顺序则是根据配置的顺序来进行加载的。所以我们配置的时候,需要注意下同类型标签的配置顺序;
web.xml的作用解析我参考的是这篇文章:
https://www.jianshu.com/p/c52776217bab
大众点评
index.jsp
contextConfigLocation
classpath:spring/root-context.xml
org.springframework.web.context.ContextLoaderListener
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
CharacterEncodingFilter
/*
MultipartFilter
org.springframework.web.multipart.support.MultipartFilter
multipartResolverBeanName
multipartResolver
MultipartFilter
/*
hiddenHttpMethodFilter
org.springframework.web.filter.HiddenHttpMethodFilter
hiddenHttpMethodFilter
/*
spring
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring/applicationContext.xml
1
spring
/
*.jsp
/WEB-INF/jsp/system/common.jsp
因为spring的配置太多,我们这里分成好几个配置文件来进行配置,他们之间的关系是这样的。
这里的配置文件被加载的流程是这样的。
1、applicationContext被web.xml中的下面代码加载
需要注意的是如果我们不像我这样显示的contextConfigLocation的值为classpath:spring/applicationContext.xml的话,系统是去查找默认值的
spring
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring/applicationContext.xml
1
2、applicationContext中代码如下
再次强调下
加载所有的xml配置文件,大家可以发现我们为了统一xml配置文件都是applicationContext-xxx.xml这样的命名格式,就是为了能在这里用通配符一次匹配到所有的配置文件。
以properties下面的dao.properties
文件为例:
dataSource.url=jdbc:mysql://127.0.0.1:3306/comment?useUnicode=true&characterEncoding=utf8
dataSource.username=root
dataSource.password=123456
很明显,dao.properties
里面配置的是一些变量的值,applicationContext加载这些properties为后缀的配置文件是为了在applicationContext-dao.xml
这些xml文件使用,比如applicationContext-dao.xml
中有设置数据库相关信息的代码如下:
我们可以利用${dataSource.url}
这样的语法引用被加载的dao.properties
中的变量的值。
关于读取properties中的值我参考的这篇文章:
https://blog.csdn.net/HaHa_Sir/article/details/79105951
applicationContext.xml
applicationContext-dao.xml
applicationContext-service.xml
applicationContext-task.xml
applicationContext-web.xml
mybatis.xml
root-context.xml
dao.properties
dataSource.url=jdbc:mysql://127.0.0.1:3306/comment?useUnicode=true&characterEncoding=utf8
dataSource.username=root
dataSource.password=123456
logback.properties
log.base=/Users/tuszer/logs/
log.level=DEBUG
log.appender.ref=stdout
system.properties
# 广告图片保存路径
adImage.savePath=G:/apache-tomcat-7.0.62/webapps/upload/ad/
# 广告图片访问URL
adImage.url=http://127.0.0.1:8081/upload/ad/
# 首页广告列表接口每页条数
ad.number=6
# 商户图片保存路径
businessImage.savePath=G:/apache-tomcat-7.0.62/webapps/upload/business/
# 商户图片访问URL
businessImage.url=http://127.0.0.1:8081/upload/business/
# 首页商户推荐列表每页条数
businessHome.number=5
# 商户搜索列表每页条数
businessSearch.number=7
%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level[%thread]%logger{56}.%method\(\):%L -%msg%n
UTF-8
${log.base}comment.log
${log.base}comment.%d{yyyy-MM-dd}.log.zip
%date|%msg%n
system.properties源代码
# 广告图片保存路径
adImage.savePath=D:\\apache-tomcat-7.0.62\\webapps\\upload\\ad\\
# 广告图片访问URL
adImage.url=http://127.0.0.1:8081/upload/ad/
# 首页广告列表接口每页条数
ad.number=6
# 商户图片保存路径
businessImage.savePath=D:\\apache-tomcat-7.0.62\\webapps\\upload\\business\\
# 商户图片访问URL
businessImage.url=http://127.0.0.1:8081/upload/business/
# 首页商户推荐列表每页条数
businessHome.number=5
# 商户搜索列表每页条数
businessSearch.number