Web.xml文件使用总结

作用:存储项目相关的配置信息,保护 Servlet。解耦一些数据对程序的依赖。

使用位置:每个 Web 项目中

Tomcat 服务器中(在服务器目录 conf 目录中)

  • 区别:
    • Web 项目下的 web.xml 文件为局部配置,针对本项目的位置。
    • Tomcat 下的 web.xml 文件为全局配置,配置公共信息。
    • 如果单个servlet的web.xml没有配置相关信息,则按Tomcat下的web.xml使用
  • 内容(核心组件):
    • 全局上下文配置(全局配置参数)
    • Servlet 配置
    • 过滤器配置
    • 监听器配置

加载顺序:Web 容器会按 ServletContext -> context-param -> listener ->filter-> servlet 这个顺序加载组件,这些元素可配置在 web.xml文件中的任意位置。

加载时机:服务器启动时

server.xml 文件

问题:浏览器发起请求后,服务器根据请求在 webapps 目下调用对应的 Servlet 进行请求处理。那么为什么是 webapps 目录难道不能是其他的目录吗?

解决:了解 server.xml 文件的配置信息

image-20200405120307839

Server.xml 文件核心组件:

1
2
3
4
5
6
7
8
9
10
11
<Server> 
<Service>
<Connector/>
<Connector/>
<Engine>
<Host>
<Context/>
</Host>
</Engine>
</Service>
</Server>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<Service name="Catalina">
<Engine name="Catalina" defaultHost="localhost">

<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
</Host>
<!-- 自己配置 -->
<Host name="sso.com" appBase="suibian"
unpackWARs="true" autoDeploy="true">
</Host>
</Engine>

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" useBodyEncodingForURI="true"/>

</Service>

由该xml文件可以看出一个Server容器中包含三个主要部分,其中最核心的为Service部分,当浏览器发送一个请求给服务器时首先会被地址栏后的域名或Ip找到对应的Engine拦截其中关键的几点:

  • Engin会被配置的defaultHost=”localhost”根据地址栏找到,可以是Ip映射也可以是虚拟域名映射。同时根据Host后面指定的appBase寻找相对路径来作为要访问资源的根目录,其该路径是相对于tomcat的根目录即(bin的父目录为该目录)需要注意的是:当不是默认的webapps时里面的资源需要放在一文件夹下
  • Engin会找跟自己名字相同的Service,对应的Service寻找其下配置的Connector根据端口号、以及协议版本来找到对应的Connector