Tomcat
Tomcat的目录结构
- bin:存放启动和关闭Tomcat的脚本文件
- conf:存放Tomcat服务器的各种配置文件
- lib:存放Tomcat服务器的支撑jar包(JavaEE的Servlet包放在这里)
- logs:存放日志文件
- temp:存放运行时产生的临时文件
- webapps:web应用所在目录,即供外界访问的web资源的存放目录
- work:Tomcat的工作目录
Tomcat的context元素的属性
- path:指定该web应用的url入口
- docbase:指定web应用的绝对路径
- reloadable:true时,tomcat服务器在运行状态下会监视在web-inf/classes、web-inf/lib目录下class文件的改动,以及监视web应用的WEB-INF/web.xml文件的改动,如果检测到有更新,服务器会自动冲洗加载web应用。其默认值是false。web应用在开放和吊事阶段将其改为true,可以方便对web的调试,在正式发布阶段将其改为false,可以降低tomcat的运行负荷,提高tomcat的运行性能
- className:指定实现context组件的java类的名字,这个类必须实现org.apache.catalina
tomcat提供的配置context元素的途径
- (低版本)到Tomcat安装目录/conf/[enginename]/[hostname]/[contextpath].xml文件中查找元素==web应用
- 到Tomcat安装目录/conf/server.xml文件中查找元素。只适用于单个Web应用
- [contextpath]:表示单个Web应用的URL入口。如果修改为ROOT,则该应用就是默认访问的应用
IDEA中的update功能
- update resourse:更新静态资源
- update classes and resourse:更新字节码文件以及静态资源
- Redeploy:重新部署
- Restart server:重启服务器
软件开发架构
- c/s(client/server)
- b/s(brower/server)
一些问题
手工写一个web应用并布署到Tomcat
conf-server.xml中的
写一个文件夹里边放网页和WEB-INF放在webapps下就OK通过配置文件修改端口号
conf-server.xml中的
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
手工写的应用放在E:\mywebapp\下,设置虚拟目录,实现访问
ip/myvirtruepath/name.html
在conf-server.xml中增加context元素,并且设置好url入口(path)和绝对路径(docBase:E:\mywebapp\)将个人主页(简易版)放在 E:\mywebsite\下,实现通过ip地址访问
HTTP协议
- http默认的端口是80端口,为了方便起见,我们将自己的tomcat的端口号设置为80,
- 域名解析(DNS服务器)(域名解析只解析域名,不管端口)
搜索浏览器自身的DNS缓存-搜索操作系统自身的DNS缓存-读取Host文件(system32/drivers/etc/hosts)-向本地配置的首选DNS服务器发起域名解析请求 - 某些木马会篡改host文件导致访问目的网站时自动跳转至别的网站(域名劫持)
- tcp三次握手
三次握手:
“喂,你听得到吗?”
“我听得到呀,你听得到我吗?”
“我能听到你,今天balabala……” - 304表示使用了浏览器缓存 200表示服务器返回成功
抓包
- 用Chrome自带的开发者工具
- 用Progress Telerik Fiddler Web Debugger(Inspector-Raw)
HTTP请求报文的格式
请求行: 请求方法 请求URL 版本
请求首部:名: 值
名: 值
(空行)
请求正文:(HTTP要传输的内容)
GET http://fiddler2.com/r/?Win8EL HTTP/1.1
Host: fiddler2.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
- GET 方式
如请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据;多个数据之间以&进行分隔,例如:
GET/mail/1.html?name=abc&password=xyz HTTP/1.1
GET方式的特点:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1K。 - POST方式
如请求方式为POST方式,则可以在请求的正文内容中向服务器发送数据,Post方式的特点:传送的数据量无限制。 - 请求头:
Accept:浏览器可接受的 (文件)MIME类型 / (大类型)/(小类型)
Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集
Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip
Accept-Language: 浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。 可以在浏览器中进行设置。
Host:初始URL中的主机和端口
Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面 (防盗链)
Content-Type:内容类型
If-Modified-Since: Wed, 02 Feb 2011 12:04:56 GMT 服务器利用这个头与服务器的文件进行比对,如果一致,则告诉浏览器从缓存中直接读取文件。
User-Agent:浏览器类型.
Content-Length:表示请求消息正文的长度
Connection:表示是否需要持久连接。如果服务器看到这里的值为“Keep -Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接 )
Cookie:这是最重要的请求头信息之一
Date:Date: Mon, 22 Aug 2011 01:55:39 GMT请求时间GMT - HTTP消息头
使用消息头,可以实现HTTP客户机与服务器之间的条件请求和应答,消息头相当于服务器和浏览器之间的一些暗号指令。
每个消息头包含一个头字段名称,然后依次是冒号、空格、值、回车和换行符
如: Accept-Encoding: gzip, deflate
消息头字段名是不区分大小写的,但习惯上讲每个单词的第一个字母大写。
整个消息头部分中的各行消息头可按任何顺序排列。
消息头又可分为通用信息头、请求头、响应头、实体头等四类
许多请求头字段都允许客户端在值部分指定多个可接受的选项,多个选项之间以逗号分隔。
有些头字段可以出现多次 . - HTTP响应
一个HTTP响应代表服务器向客户端回送的数据。
一个完整的HTTP响应包括如下内容:
一个状态行、若干消息头、以及响应正文,其中的一些消息头和正文都是可选的,消息头和正文内容之间要用空行隔开。 - HTTP响应的细节
100~199 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程
200~299 表示成功接收请求并已完成整个处理过程
300~399 (重定向)为完成请求,客户需进一步细化请求。例如,请求的资源已经移动一个新地址
400~499 客户端的请求有错误
500~599 服务器端出现错误
重定向:两次发出http请求,地址栏的地址会改变 - 常用状态码
200(正常)
表示一切正常,返回的是正常请求结果
206 表示分段的请求OK
301、302/307(临时重定向)
指出被请求的文档已被临时移动到别处,此文档的新的URL在Location响应头中给出。
304(未修改)
表示客户机缓存的版本是最新的,客户机可以继续使用它,无需到服务器请求。
404(找不到)
服务器上不存在客户机所请求的资源。
500(服务器内部错误)
服务器端的程序发生错误 - 常用响应头
Location: http://www.cskaoyan.com/指示新的资源的位置
Server: apache tomcat 指示服务器的类型
Content-Encoding: gzip 服务器发送的数据采用的编码类型
Content-Length: 80 告诉浏览器正文的长度
Content-Language: zh-cn服务发送的文本的语言
Content-Type: text/html; 服务器发送的内容的MIME类型
Last-Modified: Sat, 24 Feb 2018 20:17:28 GMT 文件的最后修改时间
Refresh: 指示客户端刷新频率,单位是秒
Content-Disposition: attachment; filename=haha.zip指示客户端保存文件
Set-Cookie: SS=Q0=5Lb_nQ; path=/search服务器端发送的Cookie
Expires: 过期时间
Cache-Control: no-cache (1.1)
Connection: close/Keep-Alive
Date: Sat, 24 Feb 2018 20:17:28 GMT
HTTP1.0和HTTP1.1的区别
- http 1.0:每一次请求都会重新建立连接;无状态,不关心是和哪个服务器创建的(每个连接只处理一个请求和响应)
- http 1.1:有状态,每创建一个连接,记录一下这个连接是连接到谁的,省去的每次请求重新建立连接的时间(一次连接可以处理多个请求和响应)