Tomcat
今日目标
1. web知识概述
2. tomcat【重点】
一 Web知识概述
JavaWeb:将编写好的java代码,发布到互联网,可以让所有用户访问到…
web技术: 开发网站的技术 (website)
javaweb : 用java技术为主体开发网站
1.1 软件架构
- 网络中有很多的计算机,它们直接的信息交流,我们称之为:交互
- 在互联网交互的过程的有两个非常典型的交互方式——B/S 交互模型(架构)和 C/S 交互模型(架构)
C/S架构
Client/Server 客户端/服务器
访问服务器资源必须安装客户端软件
例如: QQ,绝地求生,LOL
B/S架构
Browser/Server 浏览器/服务器
访问服务器资源不需要专门安装客户端软件,而是直接通过浏览器访问服务器资源.
例如: 天猫、京东、知乎网站
# C/S : client to server
0. 端游 : 客户端里有大量的数据
1. 优点: 体验好(制作精美,速度快, 大部分的数据来源于本地)
2. 缺点: 更新慢
# B/S : browser to server
0. 页游 : 大部分数据直接来源于服务器
1. 优点: 更新快
2. 缺点: 体验差(网速)
1.2 Web服务器作用
- 服务器: 提供数据服务的
- 服务端: 开发者可以通过web服务器把本地资源发布到互联网(提供数据服务和支持)
- 客户端: 用户就可以通过浏览器/客户端访问这些资源(消费服务的)
硬件服务器: (企业计算机)
1). 机房 : 一般放在偏僻, 散热好的地方
2). 云服务器
软件服务器:
服务器程序: 停服更新
1.3 资源的分类
资源:计算机中数据文件
静态资源
- 对于同一个页面,不同用户看到的内容是一样的(该资源不会变化)。
- 例如:体育新闻、网站门户等,常见后缀:
*.html、*.js、*.css , 图片,视频...
- 例如:体育新闻、网站门户等,常见后缀:
动态资源
- 对于同一个页面,不同用户看到的内容可能不一样(该资源会变化)。
- 例如:购物车、我的订单等,常见后缀:
*.jsp、*.aspx、*.php
- 例如:购物车、我的订单等,常见后缀:
1.4 常见的Web服务器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tHoPKzdx-1632537643976)(assets/1585887839580.png)]
sun公司: 卖身给oracle
apache 软件基金会: 非盈利技术组织
spring
* Tomcat: Apache软件基金会开源免费的web服务器,支持JavaEE规范(Servlet/Jsp).
* Jetty:Apache组织开源免费的小型web服务器,支持JavaEE规范.
* JBoss: RedHat红帽公司的开源免费的web服务器,支持JavaEE规范.
* Glass Fish:Sun公司开源免费的web服务器,支持JavaEE规范.
---------------------------------------------------------------------
* WebLogic: Oracle公司收费的web服务器,支持JavaEE规范.
* WebSphere:IBM公司收费的web服务器,支持JavaEE规范.
JavaEE规范
在Java中所有的服务器厂商都要实现一组Oracle公司规定的接口,这些接口是称为JavaEE规范。不同厂商的JavaWeb服务器都实现了这些接口,在JavaEE中一共有13种规范。实现的规范越多,功能越强。
(笔记本电脑: 制定usb接口规范, usb设备 键盘 鼠标都要遵循usb接口规范)
二 Tomcat服务器【重点】
2.1 Tomcat使用
2.1.1 下载
Tomcat 官网下载地址:https://tomcat.apache.org/download-80.cgi
)]
2.1.2 安装(强烈建议)
绿色免安装版,解压即用(注意:不要有中文路径)
2.1.3 目录结构
2.1.4 启动和关闭
tomcat/bin 目录下
startup.bat 启动 shutdown.bat 正常关闭
启动之后,不要关闭tomcat的dos窗口
直接关闭dos窗口: 强制关闭(断电) , 不推荐(伤害硬件和数据丢失)
测试tomcat是否启动成功:
http://localhost:8080
2.1.5 启动报错问题【经验值】
① Java环境变量
现象: 闪退, 黑窗口一闪而过(不到半秒)
原因: tomcat软件的大部分代码也是java写的, 运行依赖JDK
解决: 安装JDK8(弹出两次窗口,装在同一路径下),并配置环境
解决:
JDK : Java development kit ( java开发工具包)
a. java开发所运行的工具包(jdk所学到的类)
b. jre : java runtime environment(java 运行环境)
jvm : java virtual machine(java 虚拟机)
配置好Java环境变量
目的: 是为了可以在任意位置,打开cmd都能访问 C:\Program Files\Java\jdk1.8.0_111\bin 下的可执行程序(java.exe...) a. JAVA_HOME : C:\Program Files\Java\jdk1.8.0_111 b. Path : %JAVA_HOME%\bin 3. JDK换成8版本,目前tomcat8和jdk8兼容没问题
② 8080端口被占用
现象:启动时报错(黑框口等了一会就关闭)
(很多同学打开了两次tomcat)
原因: 一个进程占用一个端口port, 一个端口不能被多个进程同时占用
(软件启动至少一个进程)
解决:
- 找出并杀掉占用8080端口的程序
- 修改tomcat自己的端口
暴力:找到占用的端口号的对应进程,杀死进程
cmd命令:netstat -ano | findstr "8080"
进入到任务管理器,找到它,干掉它
温柔:修改Tomcat端口号
进入Tomcat安装目录/conf/server.xml 文件修改 (重启tomcat生效)
③ 访问测试
http://localhost:80
http协议默认端口80(会被隐藏)
https协议默认端口443
在整个web阶段我们使用的就是tomcat默认端口:8080
2.1.6 tomcat 发布项目三种方式 (练习)
前提: url格式规范
# 访问欢迎页原理
-> url(网址) 必须包含网络三要素
1. 操作
1). 启动tomcat
2). 用浏览器访问 http://localhost:8080/ , 看到一个欢迎页
2. 原理
1). 启动tomcat : 服务端程序运行
2). 用浏览器访问 http://localhost:8080/ , 看到一个欢迎页
a. 网络三要素
I. 协议(http): 通讯两端共同遵守一种数据传输规则
浏览器和服务器tomcat都支持http协议
II. ip(localhost -> 127.0.0.1)
ip是计算机在一个网络中唯一标识
III. port (0~65535)
进程(程序) 在一台计算机中的唯一标识
b. 原理 (tomcat/conf/server.xml)
1). tomcat支持http协议,部署本机上,占用8080端口
2). 浏览器通过本网址访问tomcat,tomcat会默认读取欢迎页数据响应给浏览器,浏览器解析这些数据并显示
3. 举例
https://www.baidu.com/
https://www.baidu.com:443/
1). 协议: https
2). ip: www.baidu.com (域名) -> 112.80.248.75
域名就是ip,存在映射关系
流程: 浏览器发起请求 -> DNS域名解析服务器(存储的就是域名和ip映射关系) -> 百度的服务器
www.baidu.com www.baidu.com(112.80.248.75)
3). port
http协议对应端口默认是80(省略不写)
https协议 默认端口443(省略不写) secure 安全
# url格式-> 协议://ip:port/资源位置?参数
数据库例子 jdbc:mysql://localhost:3306/day03?charset=utf-8
0. 基础路径: tomcat/webapps
项目发布路径
1. index资源名比较特殊,可以省略(也可以写)
1). 解释
http://localhost:8080/hello.html-> ROOT/hello.html
http://localhost:8080/ -> 欢迎页(ROOT/index.jsp)
2). index优先级(tomcat/conf/web.xml)
<welcome-file-list> 欢迎文件列表
<welcome-file>index.html</welcome-file> 最高
<welcome-file>index.htm</welcome-file> 次之(兼容dos系统)
<welcome-file>index.jsp</welcome-file> 最次
</welcome-file-list>
2. ROOT目录比较特殊,强制省略
http://localhost:8080/abc/haha.html -> abc/haha.html
http://localhost:8080/hello.html-> ROOT/hello.html
注意: 直接发布webapps下的资源,是访问不到的
① webapps 部署(重点)
直接放置在 webapps 目录下
这种方案(支持热更新),一般在开发完毕后,正式发布项目时使用。。。。
热更新: 边运行边更新
缺点: 在开发时, 项目的路径在 c/test/work, 每更新一次,每次都部署到webapps路径下,好麻烦
② server.xml部署(了解)
#虚拟路径部署方式
1. 通过指定 虚拟路径 和 真实路径, 让这两个路径产生映射关系
2. 浏览器通过访问虚拟路径, tomcat会响应真实路径的资源
# 设置
1. 虚拟路径: myapp
2. 真实路径: c:/test/myproject
String myapp = "c:/test/myproject"
# 效果
浏览器地址栏: http://localhost:8080/myapp/hello.html
访问到服务器中的: c:/test/myproject/hello.html
在tomcat/conf/server.xml中找到标签内,添加标签
<!--
路径映射
虚拟路径 : mypro
真实路径 : 项目真正的路径
String mypro = "C:\Users\spy\Desktop\xx";
-->
<Context path="mypro" docBase="C:\Users\spy\Desktop\xx"/>
</Host>
缺点
1.配置文件修改完毕后,需要重启tomcat生效…
2.server.xml是tomcat的核心配置文件,如果稍有不慎操作失误,整个tomcat启动失败
3.这种方案作为了解即可
③ 独立xml部署( 重点)
虚拟路径部署方式
在tomcat/conf/Catalina/localhost 目录下创建一个xml文件,添加标签
文件名就是虚拟路径
xml文件除了配置啥都不要写 :
不需要重启tomcat
2.2 Web项目结构
1. 前端项目
|-- myapp(项目名称)
|-- css 目录
|-- js 目录
|-- html目录
|-- img 目录
|-- index.html
2. web项目
|-- myapp(项目名称)
|-- 静态资源(html、css、js、img)
|-- WEB-INF 目录(浏览器无法直接访问内部的资源)
|-- classes 目录(java的字节码文件)
|-- lib 目录(当前项目所需要的第三方jar包)
|-- web.xml 文件 (当前项目核心配置文件,servlet3.0可以省略)
|-- index.html or index.jsp
2.3 Idea中使用Tomcat【重点】
tomcat : 生产工具 (作为项目的运行环境的一部分) JDK/mysql
idea : 开发工具 ,提升开发效率 (2018.2)
-
tomcat是可以单独使用的~~~ (要关闭,不然idea中启动tomcat会端口冲突)
-
我们后续要用代码编写动态/静态资源,所以掌握 idea中使用tomat会使得开发更高效
2.3.1 配置Tomcat
(工具栏居中,不然默认显示在右侧)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xbdDPSZO-1632537644065)(assets/1586748223130.png)]
Add Configuration -> Templates -> tomcat -> local
再次点击,确定是否配置成功… (点旁边的configuare -> 看到两个jar包)
2.3.2 创建Web项目
java ee8 也可以
web application 3.0以上皆可
web目录的访问规则
http://localhost:8080/项目虚拟路径/web下的资源
举例 (假设项目虚拟路径是 /day04)
想要访问web/index.jsp -> http://localhost:8080/day04/index.jsp
(index可以省略)
想要访问web/a/hello.html -> http://localhost:8080/day04/a/hello.html
2.3.2 发布Web项目
2.3.4 页面资源热更新
2.3.5 经验值分享(了解)
补充: URL路径访问规则
# url规范格式
协议://ip:port/资源路径?参数
举例 -> jdbc:mysql://localhost:3306/db2
参数: name=value&name=value
1. 网络编程三要素
1). 协议 : 通信规则(内容和格式), 通信双方必须遵循同一套协议
2). ip : 在一个网络中, 定位一台计算机的 (域名)
127.0.0.1 = localhost (本机,本地回环地址)
3). port : 在一台计算机,定位一个程序
2. 举个例子
访问百度服务器的搜索程序
例子: http://www.baidu.com
http://www.baidu.com:80
http://112.80.248.76:80/
http://112.80.248.76/s?ie=utf-8&f=8
/s : 百度搜索程序下的网页搜索资源
http://112.80.248.76/i?ie=utf-8&f=8
/i : 百度搜索程序下的图片搜索资源
分析:
协议: http
ip : www.baidu.com (域名)
DNS 域名服务器(Domain Name System): 存储的是域名和ip的映射关系
用户(访问域名) -> DNS服务器(将域名 转换 ip) -> 百度服务器
www.baidu.com 对应 112.80.248.76
port:
1). http协议对应80端口(端口可以省略不写)
2). https协议对应443端口 (secure 安全,http协议传输数据进行加密)
地址)
3). port : 在一台计算机,定位一个程序
-
举个例子
访问百度服务器的搜索程序
例子: http://www.baidu.com
http://www.baidu.com:80
http://112.80.248.76:80/
http://112.80.248.76/s?ie=utf-8&f=8
/s : 百度搜索程序下的网页搜索资源
http://112.80.248.76/i?ie=utf-8&f=8
/i : 百度搜索程序下的图片搜索资源
分析:
协议: http
ip : www.baidu.com (域名)
DNS 域名服务器(Domain Name System): 存储的是域名和ip的映射关系用户(访问域名) -> DNS服务器(将域名 转换 ip) -> 百度服务器 www.baidu.com 对应 112.80.248.76 port: 1). http协议对应80端口(端口可以省略不写) 2). https协议对应443端口 (secure 安全,http协议传输数据进行加密)