Tomcat&Http协议-授课
1 企业开发简介
1.1 JavaEE规范
- JavaEE(Java Enterprise Edition):Java 企业版
- 它是由 SUN 公司领导、各个厂家共同制定并得到广泛认可的工业标准
- JavaEE 早期叫做 J2EE,但是没有继续采用其命名规则。J2EE 的版本从 1.0 开始到 1.4 结束。而 JavaEE 版本是从JavaEE 5 版本开始,目前最新的版本是 JavaEE 8
- JavaEE 规范是很多 Java 开发技术的总称。这些技术规范都是沿用自 J2EE 的。一共包括了 13 个技术规范
- 包括:JDBC,JNDI,EJB,RMI,IDL/CORBA,JSP,Servlet,XML,JMS,JTA,JTS,JavaMail,JAF
1.2 Web概述和资源分类
1.2.1 Web概述
- WEB 在计算机领域中代表的是网络
- 像我们之前所用的 WWW,它是 World Wide Web 三个单词的缩写,称为:万维网
- 网络相关技术的出现都是为了让我们在网络的世界中获取资源,这些资源的存放之处,我们把它叫做网站
- 我们通过输入网站的地址(网址),就可以访问网站中提供的资源(不区分局域网或广域网)
1.2.2 资源分类
- 静态资源
- 网站中提供给人们展示的资源是一成不变的,也就是说不同人或者在不同时间,看到的内容都是一样的
- 例如:我们看到的新闻,网站的使用手册,网站功能说明文档等等
- 作为开发者来说,我们编写的 HTML、CSS、JavaScript 都属于静态资源
- 注意:这里说的是js文件本身属于静态资源,但是js可以实现界面动态效果
- 动态资源
- 网站中提供给人们展示的资源是由程序产生的,在不同的时间或不同的人由于身份的不同,所看到的内容是不一样的
- 例如:我们在12306上购买火车票,火车票的余票数由于时间的变化,会逐渐的减少,直到最后没有余票。
- 作为开发者来说,我们编写的 JSP、Servlet 等都属于动态资源
1.3 系统结构
1.3.1 系统结构简介
-
在我们前面课程的学习中,开发的都是 Java 工程。这些工程在企业中称之为项目或者产品。它都是有系统架构的
-
基础结构划分:
- CS 结构
- BS 结构
-
技术选型划分:
- Model1 模型
- Model2 模型
- MVC 模型
- 三层架构+ MVC 模型
-
部署方式划分:
- 一体化结构
- 垂直拆分结构
- 分布式结构
- 微服务结构
1.3.2 C/S结构
-
CS 结构:(Client Server) 客户端+服务器的方式
-
C/S结构的系统设计图如下:
1.3.3 B/S结构 ***
- BS 结构:(Browser Server) 浏览器+服务器的方式
- B/S结构的系统设计图如下:
1.3.4 两种结构的区别及优略
两种结构的区别
第一:硬件环境不同,C/S通常是建立在专用的网络或小范围的网络环境上(即局域网),且必须要安装客户端。而B/S是建立在广域网上的,适应范围强,通常有操作系统和浏览器就行。
第二:C/S结构比B/S结构更安全,因为用户群相对固定,对信息的保护更强。
第三:B/S结构维护升级比较简单,而C/S结构维护升级相对困难。
优略
1 C/S:是能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器。对应的优点就是客户端响应速度快。
2 B/S:总体拥有成本低、维护方便、 分布性强、开发简单,可以不用安装任何专门的软件就能 实现在任何地方进行操作,客户端零维护,系统的扩展非常容易,只要有一台能上网的电脑就能使用。
关于课程中结构的选择:我们的课程中涉及的系统结构都是是基于B/S结构。
2 Tomcat服务器
2.1. 服务器介绍
-
服务器是计算机的一种,它比普通计算机运行更快、负载更高、价格更贵。服务器在网络中为其它客户机(如 PC 机、智能设备等)提供计算或者应用服务。服务器具有高速的 CPU 运算能力、长时间的可靠运行、强大的 I/O 外部数据吞吐能力以及更好的扩展性
-
说白了,服务器(硬件)就是更牛逼的电脑
-
而我们这里所说的服务器,其实是 web 服务器,或者应用服务器。它本质就是一个软件,通过和硬件的相结合,从而达到帮助我们来发布应用的功能,让用户通过客户机访问我们的应用
-
图示:
-
服务器的概念非常的广泛,它可以指代一台特殊的计算机(相比普通计算机运行更快、负载更高、价格更贵),也可以指代用于部署网站的应用。
-
我们这里说的服务器,其实是web服务器,或者应用服务器。它本质就是一个软件,一个应用。作用就是发布我们的应用(工程),让用户可以通过浏览器访问我们的应用。
-
常见的应用服务器,请看下表:
服务器名称 | 说明 |
---|---|
weblogic | 实现了javaEE规范,重量级服务器,又称为javaEE容器 |
websphereAS | 实现了javaEE规范,重量级服务器。 |
JBOSSAS | 实现了JavaEE规范,重量级服务器。免费的。 |
Tomcat | 实现了jsp/servlet规范,是一个轻量级服务器,开源免费。 |
- 总结:
- 我们想要将一个项目让广大网民都可以访问,就需要将项目发布到一个web应用服务器中,然后这个web 应用服务器需要安装在一台服务器电脑上
- 就是说我们的项目,需要web应用服务器(软件)和服务器电脑(硬件)结合之后,才可以让广大网民访问
- web应用服务器Tomcat是用来管理项目的,而单单只要这个tomcat是不行的,如果咱们将tomcat装到自己的电脑上,有两个问题,1:性能太差,经不起多人访问;2:互联网用户无法访问咱们的电脑
- 我们需要一台有外网ip地址的,一台真正的服务器电脑
- Tomcat:是一个软件/应用服务器,用于发布项目,应用
- 服务器:是一个硬件服务器,真实的一台电脑
2.2 Tomcat介绍
-
Tomcat 是 Apache 软件基金会的 Jakarta 项目组中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开发而成
-
由于有了 Sun 公司的参与和支持,最新的 Servlet、JSP 规范总是能在 Tomcat 中得到体现
-
因为 Tomcat 技术先进、性能稳定,而且免费,所以深受 Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的 Web 应用服务器
-
Tomcat 官网:https://tomcat.apache.org/
- 这只猫就是tomcat的logo
-
Tomcat各版本所需支持
2.2 Tomcat基本使用
2.2.1 Tomcat下载与安装
2.2.2 Tomcat目录结构详解 ***
- 重要记忆的目录:bin,conf,webapps
2.2.3 Tomcat启动和停止及问题分析解决
1)启动和停止
Tomcat服务器的启动文件在二进制文件目录中:,这两个文件就是Tomcat的启动文件。
Tomcat服务器的停止文件也在二进制文件目录中:,这两个文件就是Tomcat的停止文件。
其中.bat
文件是针对windows
系统的运行程序,.sh
文件是针对linux
系统的运行程序。
启动成功:
2)启动问题
-
第一个问题:启动一闪而过
原因:没有配置环境变量
解决办法:配置上JAVA_HOME环境变量(一定要确保自己的jdk路径是对的,并且路径不要到bin,是到jdk根路径)
如果配置过JAVA_HOME还不行,就配置一个CTATLINE_HOME ,路径为tomcat根路径
-
第二个:Address already in use : JVM_Bind
原因:端口被占用
解决办法:找到占用该端口的应用
使用cmd命令:netstat -a -o 查看pid 在任务管理器中结束占用端口的进程
-
第三个:启动产生很多异常,但能正常启动
原因:Tomcat中部署着很多项目,每次启动这些项目都会启动。而这些项目中有启动报异常的。
解决办法:
能找到报异常的项目,就把它从发布目录(webapps)中移除 不能确定报异常的项目,就重新解压一个新的Tomcat
-
第四个:其它问题
例如:启动产生异常,但是不能正常启动。此时就需要解压一个新的Tomcat启动,来确定是系统问题,还是Tomcat的问题
所以,此时就需要具体问题,具体分析,然后再对症解决
3)访问自己的界面
-
tomcat的项目发布目录:我们可以在webapps目录放入自己的项目,这样tomcat启动之后就可以访问这个项目
-
新建项目:新建hello/hello.html
-
编写内容:这里没写html的声明,html基本的结构标签,但是浏览器也可以解析
-
访问
2.3 Tomcat 乱码问题
-
问题描述:启动tomcat之后,控制台(命令行)出现乱码
-
问题解决:
- 打开tomcat目录下conf/logging.properties文件
- 修改如下:(将UTF-8改为gbk,因为cmd命令行窗口的字符集是gbk,所以要统一)
-
重新启动tomcat
2.4 IDEA集成Tomcat服务器 ***
- 第一步:点击 Run -> Edit Configurations
-
第二步:点击 Templates-> Tomcat Server -> Local(往下拖才能看到Tomcat Server)
-
第三步:点击 Configure -> Tomcat Home -> 选择 tomcat 所在路径
-
通过创建项目,验证Tomcat安装成功
- 创建一个Java Enterprise项目
- 创建一个Java Enterprise项目
-
项目名称
-
选择语言级别
-
最终:能看到下方的Tomcat即可
2.5 Linux系统安装Tomcat
第一步:找到Tomcat
目录:day01_tomcat和http协议\资料\apache-tomcat-9.0.29.tar.gz
第二步:上传到linux
在crt上 使用 alt+p
将windows上的软件拖进去即可(root目录)
第三步:进入/home/
cd /home/
第四步:移动 tomcat…tar.gz 到 /home/
mv apache-tomcat-9.0.29.tar.gz /home/
第五步:解压Tomcat
tar -zxvf apache-tomcat-9.0.29.tar.gz
第六步:进入 apache-tomcat-9.0.29/bin
cd /apache-tomcat-9.0.29/bin
第七步:启动tomcat
方式1:
./startup.sh
方式2:
sh startup.sh
第八步:访问:http://linuxip地址:8080
**第九步:修改防火墙的规则 **(如果访问不了,执行此步)
方式1:service iptables stop 关闭防火墙(不建议); 用到哪一个端口号就放行哪一个(80,8080,3306...)
方式2:放行8080 端口
修改配置文件
cd /etc/sysconfig
vi iptables
复制(yy , p)
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
改成
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
重启加载防火墙或者重启防火墙
service iptables reload
或者
service iptables restart
2.6 JavaWeb项目创建 ***
2.6.1 JavaWeb工程概述
-
JavaWeb
应用是一个全新的应用种类。这类应用程序指供浏览器访问的程序,通常也简称为web应用 -
一个web应用由多个静态web资源和动态web资源组成,例如:html、css、js文件,jsp文件、java程序、支持jar包、工程配置文件、图片、音视频等等。
-
Web应用开发好后,若想供外界访问,需要把web应用所在目录交给Web服务器管理(Tomcat就是Web服务器之一),这个过程称之为虚似目录的映射
-
web工程目录
- lib应该是libs
- classes用于存放编译之后的java文件,此文件夹不需要我们自己创建
- MyAPP.iml是项目的配置文件(idea自动维护,我们不需要管)
2.6.2 JavaWeb应用的创建
-
创建项目(新建一个空项目,然后再新建一个web模块)
-
项目名称
-
选择语言级别
-
目录结构
- src:存放源代码的
- web:存放项目相关资源的(html、css、js、jsp、图片等)
- WEB-INF:存放相关配置的(web.xml等)
2.6.3 JavaWeb应用的部署
- 应用部署,就是项目发布
1)IDEA部署
-
点击 Run -> Edit Configurations
-
点击 Tomcat Server -> Deployment
- Application Context是项目访问路径(项目根路径),/代表默认路径,多个项目中只能有一个默认路径
-
点击 Tomcat Server -> Server
- After launch:启动tomcat自动以谷歌浏览器打开首页:http://localhost:8080/ , 这里的/就是刚刚配置的默认路径
- update resources , 是tomcat启动之后,我们还可能会修改项目,那这时候不用重新启动tomcat,只需要刷新浏览器,就可以看到修改后的内容
-
启动 tomcat 服务
- 放个发布的项目就已经在Tomcat下方了:MyWeb
- 点击 :,启动Tomcat
-
验证结果:能看到Conneted to Server就说明启动成功,并且会自动打开项目首页
- 这里为啥显示的是一个 $END$,这是他默认访问的是index.jsp
- 这里为啥显示的是一个 $END$,这是他默认访问的是index.jsp
-
根路径设置
- 点击
,停止tomcat,然后修改
- 点击
-
修改之后,访问的路径就是/webdemo/
-
改一下首页
-
效果:不用重启tomcat,因为我们已经配置过 update resources,自动更新资源
注意: http://localhost:8080/ 访问项目根路径,相当于访问项目的web目录
如果通过url访问某个目录,默认打开此目录中的index.jsp、index.html、index.htm
可以配置虚拟路径:Application Context (应用上下文/项目根路径) /webdemo 指向的是项目的web目录
2)war包发布 (了解)
-
在项目的 web 路径下打 war 包:jar -cvf myweb.war .
jar -cvf war包名称 空格 .
,最后的一个点代表当前路径- 就是就是将当前路径打包成myweb.war
- 注意:视频中演示的项目名称是webdemo,这里是MyWeb
-
将打好的 war 包剪切到 tomcat 的 webapps 路径下
-
启动 tomcat 服务,自动解压 war 包
-
验证结果
2.7 Tomcat配置
2.7.1 Tomcat配置文件介绍 ***
-
主配置文件 server.xml
- 8080 端口:tomcat 服务默认端口号。访问 url 地址后必须手动写 :8080
- 80 端口:HTTP协议采用的端口号。访问 url 地址后不用写 :80
- 一般我们访问人家的网址都是不用添加8080的,这是因为项目发布之后都会将端口改为80,80端口可以省略
-
可以改为80端口,重启tomcat进行测试,访问http://localhost
- 扩展:在今日资料中有tomcat其他的配置文件,“day01_tomcat和http协议\资料\扩展资料”,感兴趣的可以先自己了解下,我们后边用到的话会详细介绍
-
测试完之后,再改为8080端口
2.7.2 Tomcat配置虚拟目录 (了解)
- 虚拟目录的作用:可以发布任意目录下的项目
- 之前我们以war包形式发布的webdemo项目,是必须放到webapps目录下的,那我们能不能将其他目录的项目也发布到tomcat呢?
- 可以,需要配置虚拟目录
- 步骤:
-
编辑 server.xml 配置文件,找到<Host>标签
-
加入以下内容
- path 属性:访问资源的虚拟目录名称
- docBase属性:项目真实存在的路径
-
将之前发布的webdemo,copy到D盘,改名字为my
-
重启tomcat,访问:http://localhost:8080/my
3 HTTP协议
3.1 HTTP协议概述***
-
HTTP(Hyper Text Transfer Protocol):超文本传输协议
- 其实可以理解为:http是传输html的协议/规定
-
HTTP 协议是基于 TCP/IP 协议的
-
超文本:比普通文本更加强大
-
传输协议:客户端和服务器端的通信规则(握手规则)
-
注意:JavaScript、CSS、图片资源会自动发起请求
-
发现访问百度之后,不仅仅有www.baidu.com一个请求
-
还有图片等很多请求
-
所以在访问一个网址时(默认访问首页),会请求首页所依赖的所有资源(js,css,图片等资源)
-
-
补充:
HTTP协议概念是客户浏览器和服务器一种一问一答的规则,那么必须要有问有答,而且要先问后答。
但是我们使用<script>
,<link>
和<img>
标签,没有手动发起请求,但是仍然能从服务器端拿到数据,原因就是:在浏览器遇到<script>
,<link>
,<img>
标签时会自动发出请求。
3.2 HTTP协议组成 ***
- 由HTTP协议的概念可知,它分为问和答两部分
- 其中问指的就是请求部分
- 而答指的就是响应部分
3.2.1 请求部分
1)介绍
-
请求的组成部分
请求行
请求头
请求空行
请求体 -
请求的方式
GET
POST -
注意:只有 POST 请求方式才有请求体
-
GET请求方式分析
- ?后边的参数,叫做查询字符串
- 注意:请求空行和请求体,其实就是一个换行,啥内容都没有
- 这里老师添加了一个灰色字体,是想让大家知道这是代表啥
- 补充:请求空行是啥?
- 最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头
-
POST请求方式分析
2)操作
接下来,我们来实际操作一下,观察一下请求信息在哪看
-
找到资料,将这三个文件夹copy到webdemo的web目录下
- login目录下提供了一个login.html
-
访问:
-
打开调试工具-Network,然后点击确定发起登陆请求,如下图观看:
-
修改登陆表单的提交方式为POST,然后再次发起请求
-
post请求的URL后就没有拼接参数
-
而是以请求体传递了(上图右框中,滚动条,往下滑看到Form Data)
-
3.2.2 响应部分
-
响应的组成部分
-
响应行
-
响应头
-
响应空行
-
响应体
-
响应信息分析
-
响应头具体在哪看,跟请求头在一起,看上一小节即可
3.3 请求部分详解
3.3.1 请求行详解
请求行:GET /myapp/2.html HTTP/1.1
内容 | 说明 |
---|---|
GET | 请求的方式。(还有POST) |
/myapp/2.html | 请求的资源。 |
HTTP/1.1 | 使用的协议,及协议的版本。 |
3.3.2 请求消息头详解
内容 | 说明 |
---|---|
Accept | 告知服务器,客户浏览器所支持的MIME类型。 |
Accept-Encoding | 告知服务器,客户浏览器所支持的压缩编码格式。最常用的就是gzip压缩。 |
Accept-Language | 告知服务器,客户浏览器所支持的语言。一般都是zh_CN或en_US等。 |
Referer | 告知服务器,当前请求的来源。 只有当前请求有来源的时候,才有这个消息头。从地址栏输入的没有来源。 作用:1 投放广告 2 防盗链 |
Content-Type | 告知服务器,请求正文的MIME类型。 |
Content-Length | 告知服务器,请求正文的长度。 |
User-Agent | 浏览器相关信息 |
Connection: Keep-Alive | 连接的状态:保持连接 |
If-Modified-Since | 告知服务器,客户浏览器缓存文件的最后修改时间。 |
Cookie(*******) | 会话管理相关,非常的重要。 |
3.3.3 请求空行&请求体
-
请求空行
普通换行,用于区分请求头和请求体
-
请求体
只有 POST 提交方式才有请求体,用于显示提交参数
3.4 响应部分详解
3.4.1 响应行详解
响应行:HTTP/1.1 200 OK
内容 | 说明 |
---|---|
HTTP/1.1 | 使用协议的版本。 |
200 | 响应状态码 |
OK | 状态码描述 |
常用状态码介绍:
状态码 | 说明 |
---|---|
200 | 一切都OK> |
302/307 | 请求重定向(客户端行为,两次请求,地址栏发生改变) |
304 | 请求资源未发生变化,使用缓存 |
404 | 请求资源未找到 |
500 | 服务器错误 |
3.4.2 响应消息头详解
消息头 | 说明 |
---|---|
Location | 请求重定向的地址,常与302,307配合使用。 |
Server | 服务器相关信息。 |
Content-Type(*******) | 告知客户浏览器,响应正文的MIME类型。 |
Content-Length | 告知客户浏览器,响应正文的长度。 |
Content-Encoding | 告知客户浏览器,响应正文使用的压缩编码格式。常用的gzip压缩。 |
Content-Language | 告知客户浏览器,响应正文的语言。zh_CN或en_US等等。 |
Content-Disposition | 告知客户浏览器,以下载的方式打开响应正文。 |
Refresh | 定时刷新 |
Last-Modified | 服务器资源的最后修改时间。 |
Set-Cookie(*******) | 会话管理相关,非常的重要 |
Expires:-1 | 服务器资源到客户浏览器后的缓存时间 |
Catch-Control: no-catch | 不要缓存,//针对http协议1.1版本 |
Pragma:no-catch | 不要缓存,//针对http协议1.0版本 |
3.4.3 响应空行&响应体
-
响应空行
普通换行。用于区分响应头和响应体
-
响应体
将资源文件发送给客户端浏览器进行解析
4 综合案例-Tomcat的具体应用
4.1 静态资源案例-门户类网站的部署和访问
4.1.1 案例介绍
- 需求:
在浏览器中输入地址,访问静态HTML页面
-
效果:
-
实现步骤
- 创建一个 JavaWEB 项目
- 将静态页面所需资源导入到项目的 web 目录下
- 修改 web.xml 配置文件,修改默认主页
- 将项目部署到 tomcat 中
- 启动 tomcat 服务
- 打开浏览器测试查看页面
4.1.2 实现步骤
-
创建项目
-
项目名称
-
项目语言级别(以上三步,以后不再赘述,每次创建项目的步骤都一样)
-
复制资源
- 将今日资料“day01_tomcat和http协议\资料\案例一所需资源”,下的所有内容,复制到项目的web目录下
-
修改web.xml,修改默认首页
- 默认主页是index.jsp,我们修改为news/news.html
- 默认主页是index.jsp,我们修改为news/news.html
-
部署项目,启动tomcat
-
访问
- 注意:本项目不能配置Application Context项目根路径,只能默认为/,如果配置news.html的图片将无法显示
- 当访问到news.html,浏览器会检测html中所有的路径(img,link),再次发起请求,而这些路径如果是相对路径,则会参照当前浏览器中的路径来进行查找
4.2 动态资源的案例-学生管理系统的部署和访问
4.2.1 案例介绍
- 需求:
把JavaSE进阶阶段的学生管理系统的服务器改用Tomcat实现。
-
效果:
- 这里我们访问的studentServelt是一个java类
- 可以直接通过路径访问java类的
- 然后在控制台打印一句话:“这是我第一个servlet入门案例”
细节说明:
把学生管理系统涉及的HTML和样式以及图片文件拷贝到JavaWeb工程中,在Tomcat中部署工程,然后启动Tomcat服务器,并使用浏览器访问。
4.2.2 Servlet介绍
-
Servlet 是运行在 Java 服务器端的程序,用于接收和响应来自客户端基于 HTTP 协议的请求
-
如果想实现 Servlet 的功能,可以通过实现 javax.servlet.Servlet 接口或者继承它的实现类
-
核心方法:service(),任何客户端的请求都会经过该方法
4.2.3 实现步骤
- 创建一个 JavaWEB 项目
- 将静态页面所需资源导入到项目的 web 目录下
- 修改 web.xml 配置文件,修改默认主页
- 在项目的 src 路径下编写一个类,实现 Servlet 接口
- 重写 service 方法,输出一句话即可
- 修改 web.xml 配置文件,配置 servlet 相关资源
- 将项目部署到 tomcat 中
- 启动 tomcat 服务
- 打开浏览器测试功能
4.2.4 具体操作
-
创建项目web_test2,设置虚拟路径/crm(项目根路径)
-
copy资源
- 将“day01_tomcat和http协议\资料\案例二所需资源”下的所有内容,copy为项目的web目录下
- 复制的资源中html/frame.html是主页
-
修改主页为frame.html
-
部署项目,启动tomcat,首页iframe自动打开的是crm路径
-
其实复制过来的这个项目,目前没用到,我们主要是要处理下边的逻辑,创建servlet
-
注意:因为frame.html中的路径写死了/crm/xxx,所以我们配置的项目虚拟路径必须是/crm
-
-
新建动态资源:servlet
-
在src目录下新建包:com.itheima.servlet,然后新建StudentServlet类
-
编写代码:继承Servlet,并且实现他的所有方法
-
然后我们只修改service方法,打印一句话
-
-
配置Servlet
- 首先配置servlet节点
- servlet-name给servlet起别名
- servlet-class指定servlet类路径
- 再配置servlet-mapping节点
- servlet-mapping是给servlet配置访问路径
- servlet-name指定要给哪个servlet配置路径
- url-pattern:servlet访问路径
- 首先配置servlet节点
-
访问,界面没有内容,我们看控制台
-
控制台
4.2.5 servlet执行流程
-
流程图
- 访问/studentServlet
- 到web.xml里找url-pattern进行匹配
- 匹配成功之后,找到servlet-name同名的servlet节点
- 然后找到具体的servlet类:StudentServlet
- 然后执行内部的service方法