动态 Web 执行流程
直接用图片展示动态 Web 程序的执行流程,如下图所示:

自己对这个执行流程很熟悉了啊,感觉这张图都是白画了。以 Tomcat 为例讲解下 web 项目执行流程,URL 为http://localhost:8080/weba/hello.html
,通过 localhost 找到服务器主机,8080 找到对应的 tomcat 容器,然后 tomcat 会去它的 webapps 目录下找对应的项目 weba ,然后再找到项目根目录下的 hello.html 。最后将其返回给客户端浏览器,浏览器再将 html 代码渲染成可视化界面展示出来。
Tomcat 容器
Tomcat 集成了上面的动态Web执行流程图中的 WEB 服务器插件、WEB 服务器和 WEB 容器 的功能。Tomcat 是纯 java 编写的一个中间件程序,大胆猜测下,里面肯定用到了网络、线程、I/O 等等知识,不晓得什么时候会需要研究这个,不知道那一天会有多久哦。所谓中间价就是能够自动执行一组程序的程序,以后提到中间件就想想 Tomcat 就可以了。
学习启示:现在到了学习 web 的阶段后,不能像以前一样纠结的太深入了,因为这块知识太复杂,自己懂得也不是很多,根本就没有时间去深入学习,还不是怪自己之前不一直懒得学?暂时停留在一个抽象的层次去学习。
Tomcat 因为是用 java 写的,它管理的项目也是 java 写的,所以一定要有 JDK 的支持才能够运行。它默认的端口号是 8080 ,而且它管理的是一个个 web 项目,web 项目在 Tomcat 中是以目录的形式存在的。
Tomcat 目录结构
-
bin
所有可执行命令都在这个文件夹内,包括启动和关闭 Tomcat 的命令 -
conf
Tomcat 的配置文件都在这里,包括常用的 server.xml 和 web.xml- 每个 web 应用的 WEB-INF 目录下都有一个 web.xml 文件,用来描述该 web 应用相关信息,比如 servlet 类的配置、欢迎页面的配置和设置全局上下文参数等。 但是这和 conf/web.xml 文件有什么关系呢?conf/web.xml 文件中的描述信息对 Tomcat 所管理的所有 web 应用都有效。比如,JSP 本质上是 Servlet ,所以在 conf/web.xml 中对 JSP 完全进行了和 Servlet 一样的配置,这才使得所有的 web 应用可以直接访问 JSP 页面啊。你看,技术本质上都是一样的!也就是说任何一个 web 应用都有两个 web.xml 文件在对它在起作用。
-
lib
存放了 Tomcat 容器所需要的各个库文件 -
logs
保存了 Tomcat 容器的日志信息 -
webapps
默认存放 web 项目的目录,但是也可以通过指定虚目录,将 web 项目放在其他位置 -
work
程序运行过程中,临时文件都是放在这个位置
Tomcat 配置虚目录
如果不配置虚拟目录,使用原始的访问方法,那就直接在请求头中就暴露了项目的信息了,造成极大的不安全。所以配置虚目录就是为了保证项目的名字安全性、存储安全性和位置安全性。
Tomcat 找项目的执行流程,首先在 webapps 目录下找指定的项目,如果不存在就会去 conf/server.xml 文件中寻找 <Context/>
标签中是否有对应的虚目录。
在</host>
标签之前,添加例如<Contxt path="/hidn" docBase="/opt/apache-tomcat-9.0.0.M26/webapps/weba/WEB-INF">
的配置信息。其中 path 后跟的是虚目录,必须加上/
, docBase 表示文档库的意思,后面跟的是项目在文件系统中的真实物理路径。
同一个项目可以配置多个虚路径,虚路径和真实项目的关系是多对一。
此处还可以添加reloadable
属性,用于自动监视字节码改动,一旦有改动就会立即将其加载到内存中去。关于 realoadable 属性详情参见这里
Web 项目
Web 项目相关记录在此处
Web 项目的目录结构
项目名为 weba 的基本目录结构如下:
<weba>
|—— WEB-INF
| |—— classes
| |—— lib
| |—— web.xml
|—— index.html
WEB-INF 目录下的所有内容,客户端都是无法访问的,这是表面现象。本质上就是 Tomcat 不允许它被客户端浏览器访问,所以这个目录下的 Servlet 类字节码文件不可以直接被客户端访问,所以才需要在 WEB-INF/web.xml 文件中进行 Servlet 访问 url 的配置。
其中 WEB-INF/classes 目录用于存放项目的 .java 源文件编译后的 .class 文件(一般都是自己编写的 Java 类)。Tomcat 只负责运行 web 应用,自然是没有能力去编译源码的,它又不是 IDE 工具。所以如果是手工开发的话,需要自行将编译好的 .class 文件按照包名组织好,放到此目录下。如果是使用 IDE 工具进行开发的话,指定项目编译后的字节码文件输出到此目录下即可,这在新建项目的引导界面会有选项供选择。
lib 用于存放项目需要的多个 .class 字节码打包后的 jar 包,一般都是项目中需要利用到的其他标准类库,web.xml 中存放的是项目的配置信息。
Web 应用的配置描述符 web.xml
- 在 web.xml 中配置应用的首页列表,列表元素从上之下,优先级逐级降低。
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
浏览器提交请求到服务器的方式
以下三种方式都会在浏览器的帮助下,自动生成 HTTP 请求。
- 使用表单
- 能和用户进行交互,而且只有表单能够发送 post 请求,适合发送大量数据。
- 使用超链接
- 不需要和用户进行交互,只能是 get 请求
- 通过浏览器的地址栏输入地址
网友评论