2021-06-02 Spring Web中各类配置文件解析
Posted 涂涂努力ing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-06-02 Spring Web中各类配置文件解析相关的知识,希望对你有一定的参考价值。
Spring Web中各类配置文件解析
在做项目中我们经常会遇到各类配置文件的情况,很多时候是知道怎么用,但不知道为什么用;我最近也在做一个修改类的项目,所以我就想说借用我正在做的项目来详细解析一下各类的配置文件
1. 背景:
通常一个project的机构如下:
Project:
-----src:
----------main:
---------------java
---------------resource
--------------------META-INF
---------------webapp
--------------------META-INF
--------------------WEB-INF
----------test:
-----pom.xml
一般配置文件都会放在resource下面的一个自建config包中,和webapp的WEB-INF中,至于原因是什么,后面我会具体讲到;
2. 配置文件
本文以springboot web项目为例子
2.1 配置文件的作用是什么
- 是用来修改Springboot等框架的默认配置;一般根据自己的需求替换默认配置的话,可以通过配置文件修改。e.g.服务器port/数据库的port
- 是用来导入一些数据常量。e.g.一些template/一些接口信息
SpringBoot默认会从Resources目录下加载application.properties文件 注:配置文件名是固定的吗,可以改成yml/yaml/xml格式!(一般都采用yml/yaml/properties格式,因为较为简单但这些只适用于简单的配置;xml格式较为繁琐,容易出错,但配置文件内容多且复杂的时候用xml更好)
关于配置文件xml和properties的对比详情请参考:https://blog.csdn.net/weixin_44165280/article/details/109371127
2.2 配置文件的额加载顺序是什么
- 启动后:springboot启动会扫描一下位置的application.properties或者application.yml作为默认的配置文件(最先加载的根本原因是web.xml中Context配置通常都会首先配置 application)
- 工程根目录:./config/
- 工程根目录:./
- classpath:/config/
- classpath:/
加载的优先级顺序是从上向下加载,并且所有的文件都会被加载,高优先级的内容会覆盖底优先级的内容,形成互补配置
补充:也可以通过指定配置spring.config.location来改变默认配置,一般在项目已经打包后,我们可以通过指令 java -jar xxxx.jar --spring.config.location=D:/kawa/application.yml来加载外部的配置
优先级排序:
1.当前项目根目录下的config目录下
2.当前项目的根目录下
3.resources目录下的config目录下
4.resources目录下
关于配置文件地址优先级原文请参考:https://www.cnblogs.com/hlkawa/p/9723838.html
2.3 怎么写配置文件
- xml:标准xml格式
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="testBeanService" class="com.liyu.helloworld.service.TestBeanService"></bean>
</beans>
注:xml一般都是采用bean注入
- yml:标准格式
spring:
datasource:
url: jdbc:oracle:thin:@localhost:1521:XE
username: admin
password: admin
driver-class-name: oracle.jdbc.driver.OracleDriver
- properties:标准格式
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
spring.datasource.username=admin
spring.datasource.password=admin
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
2.4配置文件加载流程
web.xml —> applicationContext.properties —> 各种serivice/web服务/业务逻辑
2.5 常见配置文件
- web.xml
- applicationContext.yml
- pom.xml
(主要是依赖管理) - jboss-web.xml
(在JBoss 下web工程,为了使用容器提供的一些特性,需要使用jboss-web.xml进行配置,详情可以参考:https://www.huaweicloud.com/zhishi/JBoss.html
)
3. web.xml
3.1 作用
- 解决字符串编码问题:过滤器 CharacterEncodingFilter(filter-name)
- 配置监听器ContextLoaderListener(listener-class)
(ContextLoaderListener的作用就是启动Web容器时,自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法) - 部署applicationContext的xml文件:contextConfigLocation(context-param下的param-name)
- DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标Controller(我们写的Action)来处理。
DispatcherServlet(servlet-name、servlet-class、init-param、param-name(contextConfigLocation)、param-value)
在DispatcherServlet的初始化过程中,框架会在web应用的 WEB-INF文件夹下寻找名为[servlet-name]-servlet.xml 的配置文件,生成文件中定义的bean
原文请参考:https://blog.csdn.net/u012850192/article/details/100133808
- 启动WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml的两个节点: 和 ;
- 容器创建一个ServletContext(上下文);
- 容器将转化为键值对,并交给ServletContext;
- 容器创建中的类实例,即创建监听;
- 容器初始化,web.xml中可以定义多个 filter,初始化每个 filter 时,是按照 filter 配置节出现的顺序来初始化的,当请求资源匹配多个 filter-mapping 时,filter 拦截资源是按照
filter-mapping 配置节出现的顺序来依次调用 doFilter() 方法的;- 容器初始化, servlet 同 filter 类似。 那么,web项目启动时,可以知道web.xml文件各个节点的加载顺序:context-param -> listener -> filter
-> servlet。
参考: https://www.cnblogs.com/jing99/p/10914953.html
PS: 详解Spring 启动时解析WEB.xml过程请参考:https://blog.csdn.net/hou512504317/article/details/79261342
3.2 常见问题:为什么Springboot中web.xml没有了
servlet3.0
Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布。该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web
应用的开发和部署。其中一项新特性便是提供了无 xml 配置的特性。
servlet3.0 首先提供了 @WebServlet,@WebFilter 等注解,这样便有了抛弃 web.xml
的第一个途径,凭借注解声明 servlet 和 filter 来做到这一点。除了这种方式,servlet3.0 规范还提供了更强大的功能,可以在运行时动态注册 servlet ,filter,listener。
详情参考:https://blog.csdn.net/weixin_34128501/article/details/92424885
关于配置文件,有太多的细节和需要理解的点,我这里就不一一列举了,我也会在以后的工作实践中积累更多关于配置文件的详细信息,希望以后再跟大家分享
继续愉快学习
涂涂努力ing
以上是关于2021-06-02 Spring Web中各类配置文件解析的主要内容,如果未能解决你的问题,请参考以下文章