tomcat的三种配置方式、http协议的请求与响应、三个响应头等
1、web内容的概述
* web:网页。javaweb:使用java开发网站(动态网站)
* 动态网站:指的是数据的变化
* 使用java开发动态网站
* 静态网站:使用技术 html css JavaScript
* 动态网站:使用的技术
** sun公司提供了用于开发动态网站的技术:servlet jsp
** php:模板 phpcms
** asp
...............
* 如果单纯的开发网站,java没有任何优势
* java一般开发企业级的应用,比如 网银系统 企业管理系统oa erp
* 两种架构
** cs:客户端-服务器
* qq,迅雷.....
* 优点:
需要本地电脑安装软件,减轻服务器的一些压力
* 缺点:
如果服务器升级软件,客户端也需要升级
** bs:浏览器-服务器
* 网银,支付宝....
** 缺点:
** 都需要在服务器端运行,服务器端压力会很大
* 优点:
** 服务器如果升级软件,不需要升级
* AJAX技术:实现局部的刷新,本身就是js代码,js运行在浏览器里面,也可以减轻服务器端的压力
2、web服务器的通信和常见的web服务器
* 比如在浏览器的地址栏输入
** 如何进行通信的?
** 访问到百度的服务器,把百度的页面显示到浏览器中
** 把域名进行解析成ip地址,通过ip地址+端口号进行访问
** 默认的80端口,这个端口可以省略
* 想让在浏览器地址栏输入一个地址,可以直接访问我本地的电脑文件
** 使用什么技术:网络编程
* 服务器:
** 硬件:一台电脑
** 软件:安装服务器软件的电脑,称为一台服务器
* ip地址
** 静态ip(公共ip):只有可以上网,都可以直接通过这个ip进行访问
* 常见的web服务器
** tomcat服务器:是apache组织,免费、开源的服务器
** weblogic服务器:bea公司,服务器是收费的服务器
** websphere服务器:ibm公司,服务器是收费的服务器
3、tomcat服务器的安装
* 版本,jdk使用1.7版本
* 前提条件:安装tomcat之前,必须安装jdk,必须配置环境变量 JAVA_HOME
* tomcat默认的端口号: 8080
** 两种方式
** 第一种方式:使用exe文件进行安装
** 第二种方式:使用压缩文件进行安装(一般使用这种方式)
* 解压到没有中文和空格的文件夹下面
* 如果检验是否安装成功
** 是否可以正常启动
*** 找到tomcat目录 bin ,找到一个文件 ,执行这个文件就可以启动tomcat服务器
**** 出现一个黑色的框,里面如果没有异常,同时下面出现ms,表示启动成功了
** 在tomcat里面放入一个html页面,是否可以访问这个页面
*** 找到tomcat目录 webapps,创建文件夹bb,在文件夹里面创建一个html文件
*** 可以使用ip+端口号进行访问 ,现在访问本地电脑 本地的ip可以 localhost 或者 127.0.0.1
** 通过ip地址+端口号进行访问,出现一个猫的页面
** 关闭tomcat服务器
*** 可以直接把窗口关闭
*** 到tomcat的bin目录里面执行文本
4、tomcat常见的问题的解决
(1)配置环境变量 JAVA_HOME,出现效果就是一闪就消失了
** 查看错误的方式:启动cmd窗口,进入到bin目录下面,执行
出现错误的提示
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program
(2)端口冲突
* 到tomcat的logs目录里面找文件 :
** : Address already in use: JVM_Bind <null>:8080
* 两种解决方式:
** 第一种方式:结束到占用的那个端口
** 使用doc命令 netstat -ano 找到当前占用的端口的pid的值
** 启动任务管理器 找到进程,在进程里面找到pid的值 结束
** 第二种方式:修改启动的端口
** 找到tomcat里面conf目录,找到一个文件
** <Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
** 可以修改为 80 端口,直接通过本地的ip进行访问了
5、tomcat的目录结构
* bin目录:启动和关闭tomcat服务器
* conf目录(***):放置的是tomcat配置文件
* lib目录:放置tomcat的一些jar包(支持tomcat运行的jar包;tomcat支持的其他的功能的jar包)
* logs目录:放置tomcat的日志文件
* temp目录:放置临时文件
* webapps目录(***):如果项目想要在tomcat里面运行,这个项目必须要放到webapps下面
* work目录:sun公司提供servlet jsp,jsp编译成servlet放到这个目录里面
6、动态网站的目录结构
* 使用java开发动态网站项目
* 如果想要在tomcat里面运行动态网站的项目,必须要满足一定目录结构,才可以运行
* website
* WEB-INF(这个目录是必须要有的)
** 在WEB-INF下面必须要有一个文件 (必须有)
- 将example中复制粘贴到WEB-INF中里
** 在WEB-INF下面有两个文件夹可选的
1. classes: 放的是java文件编译成class文件
2. lib :项目的jar包
*** classes和lib可以不写,但是如果写必须是这个名称
7、使用myeclipse集成tomcat
* 版本
* 集成步骤:
** 选择window-- 属性 --- myeclipse --- servers ---- tomcat ---- 选择相应的版本
* 在myeclipse中启动tomcat:找到tomcat,右键点击run server 可以启动tomcat服务器
* 在myeclipse中关闭tomcat:
** 直接点击红色按钮(相当于直接关闭电源)
** 找到tomcat右键点击stop server(正常关闭)
8、使用myeclipse向tomcat中部署项目
* 从现在创建项目就不是java project,而是web project
* 部署方式 右键点击tomcat -- add dep...--- 选择要部署项目
** 部署的目录结构:会把web项目里面 webroot下面的内容都放到tomcat里面去,webroot变成项目名称
*** 访问方式 http://169.254.145.18/项目名称/
* 名称问题
** 上面的名称 项目显示的名称
** 下面的名称 部署到tomcat里面名称:要通过下面的名称进行访问
9、tomcat的manager配置(了解)
* 管理tomcat的项目(运行,关闭)
* 启动tomcat,进入到猫的页面,点击manager app->取消
* 打开文件conf/
* 配置管理员的用户名和密码
10、tomcat的虚拟路径的配置
* 虚拟路径:把本地文件夹里面的项目,配置到tomcat里
** 比如在c盘上面有一个项目 ,如果这个项目很大,可以通过虚拟路径配置此项目,不需要复制。
* 配置有两种方式
** 第一种方式:找到conf下面,做配置
<Context docBase="本地项目路径" path="通过浏览器访问路径"></Context>
* 这个配置需要写在 </Host>之前
** <Context docBase="I:\itcast" path="/demo"></Context>
** 访问: http://127.0.0.1/demo/1.html
** 第二种方式:找到conf文件夹 Catalina下面的localhost
*** 在localhost里面创建xml文件 比如
*** 在这个xml文件中做配置 <Context docBase="i:\itcast"></Context>,但是不需要有path属性
*** 访问:通过xml的文件名称进行访问
*** 访问: http://127.0.0.1/a/1.html
*** 在tomcat里面如何部署项目(三种方式)
**** 直接在tomcat的webapps下面创建目录(动态网站的结构)
**** 使用myeclipse中集成tomcat,直接部署项目
**** 通过虚拟路径进行部署项目(有两种配置方式)
11、访问网站的全过程
* 比如在地址栏输入地址
** 这个地址如何进行访问?
** 这个地址域名,这个首先会到本地电脑去找一个文件 hosts文件,文件里面使用有这个域名对应的ip。
** 如果找到了ip,直接返回ip进行访问
** 如果找不到ip,到网络上去找一个域名解析服务器,服务器里面是否有域名对应的ip地址,
** 如果找到了ip,直接返回ip进行访问
** 操作host文件,当前登录用户必须有管理员权限
12、配置tomcat的虚拟主机
* 找到conf下面,可以配置虚拟主机
* 在tomcat里面默认的虚拟主机 ,可以配置多个虚拟主机
13、仿百度页面的效果
* 首先修改host文件 127.0.0.1
* 配置虚拟主机
<Host name="" appBase="I:\baidu"
unpackWARs="true" autoDeploy="true">
<Context docBase="\website" path="/"></Context>
</Host>
* 在tomcat的conf的中,<welcome-file></welcome-file>
14、http协议的简介
* 协议:双方达成共同的目标
* 请求:在浏览器的地址栏输入一个地址,点击回车,这个地址到访问的服务器,这个过程称为请求
* 响应:服务器接受到发出的请求,根据请求返回数据到浏览器里面进行显示,这个过程响应
* http协议:请求和响应的过程中,遵循一定的数据格式
* 特点:
** 请求和响应同时存在,先有请求之后有响应
** http协议基于tcp协议,默认端口是80
* 使用命令 telnet 模拟http协议
** 首先连接tomcat服务器 telnet localhost 80
*** 不能输入的问题使用解决问题 在键盘上 ctrl 加 ]
*** 请求的数据格式:
GET /bb/ HTTP/1.1
host:localhost
*** 响应的数据格式
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Accept-Ranges: bytes
ETag: W/"27-1432777730225"
Last-Modified: Thu, 28 May 2015 01:48:50 GMT
Content-Type: text/html
Content-Length: 27
Date: Thu, 28 May 2015 07:03:37 GMT
<h1>AAAAAAAAAAAAAAAAAA</h1>
* 在win7系统里面,默认情况下不是直接是telnet命令,需要打开这个命令
** 如果安装系统使用ghost安装
* 一个软件的介绍 httpwatch(只能在ie上使用)
** 当安装之后,打开ie浏览器,可以使用这个软件
*** 在ie浏览器工具里面自动添加 httpwatch p...
**** 如果在工具里面找不到,使用快捷键 shift f2
** 使用这个软件,必须要点击 record(红色按钮)
** 在地址栏输入一个地址,点击回车,在下面出现请求地址,点击这个地址
**在最下面点击 stream,在stream下面有左右两部分,左边的部分是请求的数据格式,右边的部分是响应的数据格式
* 因为httpwatch只能在ie下使用,在火狐或者谷歌浏览器里面可以使用自带的调试工具
** 都是使用f12打开调试工具
*** 在火狐里面,点击网络,就可以查看到当前请求和响应的数据
*** 在谷歌里面,点击NetWork,查看到当前请求和响应的数据
* HTTP/1.0 和 HTTP/1.1区别
** 使用telnet命令,分别 操作这两个版本的HTTP
*** 使用HTTP/1.0,如果做出响应立刻断开连接
*** 使用HTTP/1.1,做出了响应之后不会立刻断开
15、http协议的请求
* 分别是 get 和 post 提交表单,查看请求的数据格式
** get提交:在地址栏会携带请求的数据,
** post提交:在地址栏不会携带数据,数据在请求体里面
** 创建一个页面,创建一个表单,使用get方式进行提交
*** 使用get提交之后,请求的数据格式
**
GET /day07/request/?username=zhangsan HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Referer: http://127.0.0.1/day07/request/
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MAAU)
Accept-Encoding: gzip, deflate
Host: 127.0.0.1
If-Modified-Since: Thu, 28 May 2015 07:27:11 GMT
If-None-Match: W/"591-1432798031872"
Connection: Keep-Alive
* http协议的请求三部分组成:
** 第一部分:请求行
** 请求行里面包含:请求方式、请求地址、http版本
** 第二部分:请求头
** 类似key-value形式,一个key可以对应一个value,也可以对应多个value
** 三个重要的请求头
*** Referer:防盗链,得到当前请求的地址
**** 创建两个文件夹 my 和 other
**** 分别创建两个页面
***** 只能是my文件夹里面的文件才可以访问
***** 只有my文件夹里面的文件才可以访问servlet
*** User-Agent:获取当前请求的浏览器的信息
*** If-Modified-Since:经常和响应里面Last-Modified一起使用,用于查询本地缓存
** 第三部分:请求体
** 通过post提交的数据 user=lisi
** 表单提交的方式有很多种,常用的两种 get和post
** Accept: text/html,image/* 客户端识别文件类型
Accept-Charset: ISO-8859-1 客户端字符集
Accept-Encoding: gzip 客户端支持编码类型 gzip 压缩格式
Accept-Language:zh-cn 客户端语言
Host: :80 访问服务器地址
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT (重要) 和Last-Modified 一起使用 控制缓存
Referer: / (重要) 防止盗链
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) 浏览器类型(文件下载时,不同浏览器进行不同处理)
Connection: close/Keep-Alive 请求后连接是关闭还是保持
Date: Tue, 11 Jul 2000 18:23:51 GMT 请求时间
16、http协议的响应
* HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Accept-Ranges: bytes
ETag: W/"578-1432798092723"
Last-Modified: Thu, 28 May 2015 07:28:12 GMT
Content-Type: text/html
Content-Length: 578
Date: Thu, 28 May 2015 07:49:29 GMT
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
.......................
* http协议的响应有三部分组成:
** 第一部分:响应行
** 结构:http版本、状态码 、状态码描述
** 状态码:当前的响应的状态
*** 常见的状态码
* 200:成功 ok
* 302:重定向
* 304:查找本地缓存
* 404:资源找不到
* 500:服务器内部错误(代码写错了)
* 503:服务器挂了
** 第二部分:响应头
** 类似key value形式,一个key可以有一个或者多个value
*** 三个重要的响应头信息
* Location
** 经常和302一起实现重定向的操作
* 代码
//重定向使用状态码 302
(302);
//设置头信息 Location 完成重定向的操作
("Location", "/day07/my/");
* Refresh
** 在页面的定时跳转
** 代码
().write("页面将在3秒之后跳转..");
//使用Refresh头信息实现定时跳转
("Refresh", "3;url=/day07/other/");
* Last-Modified:
** 经常请求里面If-Modified-Since一起使用查找本地缓存
* Content-Disposition:做文件下载时候
*** 禁用浏览器缓存
* Expires: -1
Cache-Control: no-cache
Pragma: no-cache
** 第三部分:响应体
** 显示到页面上的内容
** 重定向和转发区别
*** 在一个请求里面,又做了一次请求
** 重定向:比如找小文借钱10万,小文没有钱,告诉我小温有钱,我再去找小温,把钱拿到
*** 请求两次,响应两次
** 转发:比如找张三借钱,但是张三没有钱,张三去帮我找李四借钱,最终把钱给我
*** 请求一次,响应一次
17、If-Modified-Since和Last-Modified查找本地缓存
* 画图分析执行的过程
* 比如访问图片,第一次访问时候,在服务器端产生访问时间 使用头信息存储 Last-Modified
* 给一个响应:首先把图片显示到页面上,携带第一次产生的时间,把时间存到浏览器中 使用 If-Modified-Since
* 第二次访问图片,请求时候携带第一次这个时间发送请求,到了服务器,拿着请求的时间和服务器上面的时间进行比较,
如果有相同的时间,返回状态码 304,让找本地缓存;如果没有相同的时间,重新请求新的数据
18、web开发中缓存处理
* 使用快捷键 ctrl f5:表示无缓存刷新
* 移除项目重新部署,或者找到tomcat的work目录,把work里面内容都删除
* 直接使用浏览器清除缓存
* 请求的地址后面加一个随机数 http://127.0.0./day/1.html?id=随机数