目录
[1.Java WEB前奏](#1.Java WEB前奏)
[1.1. C/S 结构](#1.1. C/S 结构)
[1.2. B/S 结构](#1.2. B/S 结构)
[1.3. 静态网页和动态网页](#1.3. 静态网页和动态网页)
[1.4. 常见的网页](#1.4. 常见的网页)
[1.5. Web 服务器](#1.5. Web 服务器)
[2. Tomcat 安装(熟练)](#2. Tomcat 安装(熟练))
[2.1. Tomcat 概述](#2.1. Tomcat 概述)
[2.2. Tomcat 的作用](#2.2. Tomcat 的作用)
[2.3 Tomcat 安装](#2.3 Tomcat 安装)
[2.4. Tomcat 测试](#2.4. Tomcat 测试)
[3. Tomcat 分析(熟练)](#3. Tomcat 分析(熟练))
[3.1. Tomcat 目录结构](#3.1. Tomcat 目录结构)
[3.2. Tomcat 修改端口号](#3.2. Tomcat 修改端口号)
[3.3. Tomcat 结构重点](#3.3. Tomcat 结构重点)
[4. WEB 项目(精通)](#4. WEB 项目(精通))
[4.1. WEB 项目部署后目录结构](#4.1. WEB 项目部署后目录结构)
[4.2. Tomcat 发布项目](#4.2. Tomcat 发布项目)
[4.2.1. webapps 文件夹下](#4.2.1. webapps 文件夹下)
[4.2.2. 任意目录下](#4.2.2. 任意目录下)
[5. IDEA 整合 Tomcat(精通)](#5. IDEA 整合 Tomcat(精通))
[5.1. IDEA 创建 Java web 项目](#5.1. IDEA 创建 Java web 项目)
[5.2. IDEA 部署 Java web 项目](#5.2. IDEA 部署 Java web 项目)
1.Java WEB前奏
1.1. C/S 结构
C/S 结构即客户端/服务器(Client/Server),例如 QQ 就是 C/S 结构的。我们每个人电脑上都需要安装 QQ 的客户端,客户端软件向服务器端软件发送请求,服务器端给客户端返回响应。
但是,因为客户端需要不断的更新,用户使用起来就比较麻烦。现在的 C/S 结构的客户端已经好多了,可以提示用户更新,用户只需要点击更新就可以了。最早时需要用户自己去官网上下载最新客户端,然后把老版本卸载,再去安装新版本。

1.2. B/S 结构
B/S 结构即浏览器/服务器(Browser/Server),例如网站都是 B/S 结构的。当然,网站也只是 B/S 结构体系软件中的一种而已。网上银行也都是 B/S 结构的!
B/S 结构的好处在于不需要用户更新客户端,客户端只需要有一个浏览器就 OK。当软件需要更新时,开发人员只需要关心服务器端就行。就像你在浏览器中访问百度时,发现百度的主页发生了变化,但你也不需要更新什么。

1.3. 静态网页和动态网页
早期在 Internet 上都是静态网页,即 html 页面。静态网页的数据都是不能自动变化的,例如网页上的当前用户信息:"欢迎 XXX 登录本系统",这说明当前用户名为 XXX。如果有其他用户登录系统就应该显示其他用户的名字,而且无需修改页面!说白一点,用户名应该是变量,而不是常量!这是静态网页做不到的!
动态网页可以中包含变量,数据的变化就不是问题了。但动态网页只能在服务器端使用,客户端浏览器只能识别静态网页。所以,如果用户请求的是动态网页,那么就需要服务器先把动态网页转换成静态网页发送给客户端浏览器!
动态网页必须有服务器来处理。
1.4. 常见的网页
- 静态网页:
htm、html
- 动态网页:
php、asp、aspx
jsp、.do、.action
vue:前后端分离模板引擎, Thymeleaf前后端不分离模版引擎
我们要学习的是 JSP(Java server pages),与其相关的是 do(struts1)、action(struts2)
1.5. Web 服务器
Web 服务器的作用是接收客户端的请求,给客户端作出响应。
知名 Java Web 服务器
Tomcat(Apache):用来开发学习使用;免费,开源
JBoss(Redhat 红帽):;
Weblogic(Orcale):要钱的!使用 Tomcat 开发,项目写完了,放到 Weblogic上运行;
Websphere(IBM):要钱的!与 Weblogic 相似。
2. Tomcat 安装(熟练)
2.1. Tomcat 概述
Tomcat 服务器由 Apache 提供,开源免费。开发学习使用最佳选择。安装 Tomcat之前需要先安装 JDK,其实无论哪一种 JavaWeb 服务器都需要先安装 JDK。我们现在使用的 Tomcat 版本可以是 Tomcat8.5 或 Tomcat9。
Tomcat6 支持 Servlet2.5;
Tomcat7,8,9 支持 Servlet3.0;
2.2. Tomcat 的作用
当用户通过发送过来一个请求后,Tomcat 来接收请求,然后给用户返回响应。通常用户都是通常浏览器发出请求,然后浏览器的响应都是 html 代码。当然,这也不是全部,有时用户可能会通过其他手段向服务器发送请求,而 Tomcat 返回的响应也可能不是 html,也可能是一个文件,一张图片等。
Tomcat部署项目,项目来接受请求。
一些软件直接是一个链接,点击直接到浏览器下载了(.apk包等)。

2.3 Tomcat 安装
解压版 Tomcat 只需要解压就能使用,无需安装,这样一台电脑上可以安装多个Tomcat。
启动解压版的 Tomcat 有点不同,你需要先去配置环境变量:
启动:在 Tomcat 安装目录中的 bin 目录中找到 startup.bat 文件,然后双击之。
停止:在 Tomcat 安装目录中的 bin 目录中找到 shutdown.bat 文件,然后双击之。
强烈建议使用解压版!!!
配置环境变量的意义:
让程序在任何一个目录下任何一个地方都可以找到程序启动,应用。一般情况下,每个软件的安装目录(
都会存在一个bin目录,bin目录里放着所有的可执行程序,其中会有一两个启动这个软件的启动程序。)如果不配置环境变量,就需要找到这个安装目录下的bin目录启动它,如果有了环境变量,就可以在任何地方下启动。也就是把启动程序配置在了系统的环境变量里。
java_HOME的意义:在不改变系统环境变量的前提下,只改变java_HOME,通过引用java_HOME(bin目录的前一层目录),保证了系统环境变量的安全。

Windows系统的启动.bat,Linux系统.sh
2.4. Tomcat 测试
测 试 Tomcat 需 要 在 浏 览 器 中 输 入 : http://localhost:8080 , 或 者 是
http://127.0.0.1:8080。127.0.0.1 表示本机的 IP 地址,localhost 表示本机的主机名。
如果其他机器需要访问,那么要把 localhost 使用本机 IP 地址替换。
假如我的 IP 是 192.168.1.7,你们要访问我机器上的 Tomcat,那么需要在你们的浏览器中访问:http://192.168.1.7:800

项目被访问到的必要条件
3. Tomcat 分析(熟练)
3.1. Tomcat 目录结构

bin:该目录下存放的是可执行文件,有 startup.bat 和 shutdown.bat 文件,startup.bat 用来启动 Tomcat,但需要先配置 JAVA_HOME 和 shutdown.bat用来停止 Tomcat;
conf:这是一个非常非常重要的目录,这个目录下有三个最为重要的文件:
server.xml:配置整个服务器信息。例如修改端口号,下面会详细介绍这个文件;
web.xml:部署描述符文件,这个文件中注册了很多 MIME 类型,即文档类型。这些 MIME 类型是客户端与服务器之间说明文档类型的,如用户请求一个html 网页,那么服务器还会告诉客户端浏览器响应的文档是 text/html 类型的,这就是一个 MIME 类型。客户端浏览器通过这个 MIME 类型就知道如何处理它了。当然是在浏览器中显示这个 html 文件了。但如果服务器响应的是一个 exe 文件,那么浏览器就不可能显示它,而是应该弹出下载窗口才对。MIME 就是用来说明文档的内容是什么类型的!
Tomcat默认情况下部署一个项目,如果有多个项目都要部署,如果不改变,会覆盖(改变端口号)
lib:Tomcat 的类库,里面是一大堆 jar 文件。如果需要添加 Tomcat 依赖的jar 文件,可以把它放到这个目录中,当然也可以把项目依赖的 jar 文件放到这个目录中,这个目录中的 jar 所有项目都可以共享之;
logs:这个目录中都是日志文件,记录了 Tomcat 启动和关闭的信息,如果启动Tomcat 时有错误,那么异常也会记录在日志文件中。
temp:存放 Tomcat 的临时文件,这个目录下的东西可以在停止 Tomcat 后删除!
webapps:存放 web 项目的目录,其中每个文件夹都是一个项目;如果这个目录下已经存在了目录,那么都是 tomcat 自带的。项目。其中 ROOT 是一个特殊的项目,在地址栏中没有给出项目目录时,对应的就是 ROOT 项目(小猫页面)。
work:运行时生成的文件,最终运行的文件都在这里。通过 webapps 中的项目生成的!可以把这个目录下的内容删除,再次运行时会生再次生成 work 目录。当客户端用户访问一个 JSP 文件时,Tomcat 会通过 JSP 生成 Java 文件,然后再编译 Java 文件生成 class 文件,生成的 java 和 class 文件都会存放到这个目录下。 运行时的工作目录。
LICENSE:许可证。
NOTICE:说明文件。
你应该已经发现,访问 ROOT 项目时无需给出项目名,其实 localhost 是一个主机名,每个主机都会对应一个项目空间,localhost 对应的就是 Tomcat 目录下的webapps,每个项目空间都可以有一个名为 ROOT 项目,这个 ROOT 项目被访问时无需给出项目名称。
3.2. Tomcat 修改端口号
打开 conf\server.xml 文件

http 默认端口号为 80,也就是说在 URL 中不给出端口号时就表示使用 80 端口。当然你也可以修改为其它端口号。修改之后必须重新启动服务器
80 端口是默认的端口,如果使用 80 端口访问时就可以省略端口。
本机的IP地址:
终端输入ipconfig即可查看
127.0.1和localhost代表本机,仅限于本机使用,如果想让其他人访问自己的电脑,需要用到IP地址。
如果我们改成 80 端口,访问时就可以不加端口号。http://localhost/

项目提供给其他同学访问得必要条件:
1.和其他同学在同一局域网内或本机在公网上有固定 IP
- Web 项目部署到 tomcat 后,如果使用 80 端口得话,需要进行公安部备案(百度搜索)
3.3. Tomcat 结构重点
bin、conf、webapps、work。
bin目录中东西我们只关心启动和停止 Tomcat,现在大家也应该掌握了!
webapps目录下存放的是项目,每个文件夹都对应一个项目,而且在访问项目时,其中包含了项目名,而项目名往往都对应项目目录名。这个也应该可以掌握了!还有就是JavaEE Web 项目的目录结构,这个必须必须背下来!
work:这个东西有点小难度,现在只需要知道它存放的文件是通过 webapps 目录下的项目在运行时产生的,最终运行的都是 work 目录下的文件。这个目录下的东西可以删除,然后再次运行时还会产生!
4. WEB 项目(精通)
4.1. WEB 项目部署后目录结构
webapps 目录是用来存放 Java 项目的,每个文件夹都是一个项目。默认这个目录下已经有了四个项目,都是 tomcat 自带的。其中 ROOT 就是我们测试 Tomcat 时访问的Tomcat 主项目。
我们要创建自己的项目,需要遵循 JavaEE 目录结构规范,下面是 hello 项目的目录结构
Hello (必须出现的)
|------ 存放 web 资源。(jsp, xml, HTML CSS JS 图片...)
|------ WEB-INF(必须出现的)
|------ web.xml (必须出现的)
|------ classes Java 类的编译路径(Servlet、自定义类 )
|------ lib 需要引入的第三方的 jar 包.
$hello是项目目录,项目目录下必须有一个名为 WEB-INF 的目录(必须大写),在 WEB-INF 目录下必须有一个 web.xml 文件。
$ WEB-INF目录是受保护目录,这下面的东西用户是不能直接访问的,但动态页面是可以访问的。通常 WEB-INF 下还会存在 lib 和 classes,lib 下存放项目所需的 jar 文件,classes 目录下存在项目所需的 class 文件!
Tomcat启动加载web.xml找配置。
如果直接访问 WEB-INF 就会找不到路径,不能直接访问,需要通过内部请求转发到这个位置。
$ web.xml 文件中只需要给出 XML 文档声明,以及根元素。当然,根元素中包含很多与名称空间相关属性,背下来是有难度的,不过我们可以去 webapps 下的其他项目中去"借"。
基础约束: Tomcat启动加载这个配置文件,决定一些初始化的配置。

4.2. Tomcat 发布项目
4.2.1. webapps 文件夹下
就是把项目放到 webapps 目录下,即 localhost 主机名对应的项目空间目录中。 访问http://localhost/hello/hello.html
4.2.2. 任意目录下
可以把项目放到任何目录,然后通过添加<Context>元素来指定项目的真实位置。在 <Host>元素中添加<Context>元素,然后指定<Context>元素的path和docBase属性, 其中 path 指定的是项目虚拟路径,可以随意给出,例如 abc。docBase 指定你的项目的真实存放的路径。
例如,项目的真实目录在 D:\demo\webapp\hello。你找到 server.xml 中的 <Host>元素,给其添加子元素<Context>,内容如下:
注意,一旦给出了 docBase 属性的值后,访问 localhost 的 abc 项目时,就不会再去webapps 目录下去查找项目,而是通过 docBase 的值来锁定项目位置,即 F:\hello1。
注 意 , 访 问 项 目 的 URL : http://localhost/h1/index.jsp , 而 不 是http://localhost/hello1/index.jsp,你可能会说,我们的项目目录名叫 hello1, 但因为指定了<Context>元素的 path 属性,那么访问项目时就不会再使用项目目录名来 作为访问路径了。
5. IDEA 整合 Tomcat(精通)
5.1. IDEA 创建 Java web 项目


5.2. IDEA 部署 Java web 项目
