学习目标: tomcat 服务器的配置以及 HTTP 协议.
1.web的相关介绍
web表示网页的意思, 指internet上供外界访问的页面.
静态的页面: html+ css + js (cascading style sheet) (java script) , 任何时间点你去访问内容动态的页面: 都是由程序产生. 不同时间点去访问这个页面,产生数据都是不一样.
web1.0: 这个数据都是让用户来浏览的. 主要是用来传播信息的
web2.0: 页面都是用来进行交互的. 微博.
============web 开发 主流三种技术===========
a.jsp/servlet 技术 : 网页开发. sun(standford university network) 公司的解决方案
jsp 收费的.
企业的前端开发
(OA office automation, CRM client relationship management,ERP enterprise resource planing)
b) asp -微软的解决方案. .net (c#.net, asp.net, vb.net...) 收费的.
c) php -- 开源组织的. android, ruby, python, hadoop .
lamp (linux + apache + mysql + php)
2.web服务器的模型
B/S 交互模型
1、基于请求-响应交互模型
客户端浏览器 向 服务器 发送一个 请求
web服务器 向 客户端浏览器回送 一个响应
2、必须先有请求 再有响应
3、请求和响应成对出现
C/S client -- service ------------->> B/S
3.常见的web服务器
j2ee --- javaee ---- >> 一些技术规范的集合. 总共有 13 种技术 (jsp/servlet)
weblogic: Bea 公司的产品, javaee 规范, 全面 支持 这13种技术. BEA 被oracle公司收购了
这个服务器 网络上的资料 比较 多(全部 都是 英文的)
websphere: 收费的(非常贵) 网络上资料非常少. 全面支持 javaee规范.
Jboss: 免费的, 网络资料比较多, 开源的. 全面支持 javaee规范 . redhat
=========
tomcat 服务器 : apache 基金会的产品. 小型的web 服务器.
jsp/servlet. 免费的.
resin: jsp/servlet. 免费的
4.tomcat服务器
tomcat 是apache jarkata 项目的一个子项目.
针对不同平台有不同版本.
exe 和 zip 是针对window平台, tar.gz就是针对linux平台的
5.tomcat服务器启动时一些问题. (重点 )
a) java_home环境变量没有设置:
指向的是 jdk的安装目录.
C:\Program Files\Java\jdk1.6.0_31 , 千万不要指向 bin目录. 配置环境变量时
java_home中间不能是-, 指向的jdk的目录不能够再最后加 ;
b) tomcat 端口被占用. tomcat启动时默认的是占用 8080 端口.如果8080 端口已经被其他的应用程序占用
那么tomcat就启动不了了, 这时候.
一: cmd 进入 dos 命令行. netstat -ano 可以查看到 所有的进程 运行在哪个端口上
然后找到占用了8080 端口的程序.
二: 进入到windows的 任务管理器, 找到 pid (第二个选项卡-进程- 勾选pid这个显示框.)
然后就可以看到所有的进程pid了.
三:结束占用了8080 端口的应用程序.
直接启动tomcat.
进入到 conf/server.xml , 将 connector 元素中的port 属性 更改为 80 端口,然后重启
就将tomcat启动的时候的端口更改为 80 了
c) 如果把tomcat启动时的端口 改成80 之后 可能 重启服务器又 启动不了了, 怎么办?
重复 b) 操作,找到 占用80 端口的应用程序, 然后把它干掉.
如果 b)操作不好使,那么可能就是windows的IIS 占用了80 端口(系统级的服务.干不掉)
进到windows的 服务列表中将其 干掉了.
=====
catalina_home环境变量: 用来指明tomcat 服务器 安装的目录. 但是呢, 一般都不会配置该环境变量.
因为配置正确了没有关系.但是一旦配置错误,那么tomcat就启动不了了.
6.tomcat服务器与Servlet版本的对应关系
Tomcat版本 Servlet/JSP版本 JavaEE版本 运行环境
4.1 2.3/1.2 1.3 JDK1.3
5.0 2.4/2.0 1.4 JDK1.4
5.5/6.0 2.5/2.1 5.0 JDK5.0
7.0 3.0/2.2 6.0 JDK6.0
7.tomcat的目录组织结构
tomcat
-bin 存放命令
-conf 存放tomcat启动的配置信息
-lib tomcat运行时一些依赖的jar包
-log tomcat运行的日志文件夹
-temp 运行时临时文件夹
-webapps web应用存放的目录
-work 工作目录, jsp 被翻译成的servlet就放在这个目录.
8.虚拟目录映射的三种方式 (虚拟目录映射 就是配置 <Context> 元素)
a) 方式一:
在conf/server.xml中,在其host元素下配置一个 Context 元素.
<Context path="/itheima" docBase="d:\mail"/>
配置好了之后,由于改动了server.xml,所以呢需要重新启动 tomcat 服务器.
b) 方式二:
进到 D:\tomcat\apache-tomcat-7.0.40\conf\Catalina\localhost 目录下.
然后建一个xml文件. aa.xml
然后在xml 中写 :
<?xml version="1.0"?>
<Context docBase="d:\mail"/>
紧接着就可以访问了:
http://localhost/aa/1.html
这种方式的好处是, 配置完成后不需要重启服务器.
c)方式三: (**********重要)
直接将 开发好的web应用 放到 webapps目录下就可以了, tomcat 服务器会自动 管理 web应用.
web应用的对外访问路径也就是 文件夹的名称.
直接访问: http://localhost/mail/1.html
================如何将自己的web应用弄成缺省的呢? ===========
两种方式:
方式一: 直接在 server.xml中 的host元素里 配置 :
<Context path="" docBase="d:\mail"/>
这里不配置对外访问路径就表示把自己的web应用弄成缺省的了.
方式二: 在 D:\tomcat\apache-tomcat-7.0.40\conf\Catalina\localhost .
建一个 ROOT.xml文件 那么也可以弄成缺省的。
如果是多级访问 目录, 可以 建一个 foo#bar.xml
=====================如何给自己的web应用配置一个欢迎页面呢?=====================
在自己的web应用文件夹下 建一个 WEB-INF 目录.
然后在这个目录下建一个 web.xml文件.
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<!--这是配置一个欢迎页面.-->
<welcome-file-list>
<welcome-file>1.html</welcome-file>
</welcome-file-list>
</web-app>
访问 tomcat 刚刚配置好的欢迎页面. 需要 重启服务器
http://localhost/
9.war包的制作与tomcat Manager的使用
war包的制作:
方式一: 使用rar压缩 工具 , 将web 应用压缩成 一个zip 包, 然后 更改扩展名为.war
方式二: 进入dos 命令行. 然后使用jar命令, 首先将web应用打成一个jar包.
jar cvf news.jar news
生成了一个jar包,但是要改成 扩展名为.war
tomcat manager 的使用:
打开conf/tomcat-users.xml ,然后添加 , 还要重启服务器.
<role rolename="admin-gui"/>
<role rolename="manager-gui"/>
<user username="tomcat" password="123" roles="admin-gui,manager-gui"/>
10.配置虚拟主机
a)进入到 C:\Windows\System32\drivers\etc ,
b) 打开 hosts文件,在末尾添加 :
192.168.1.100 www.google.com
192.168.1.100 www.sina.com
c)在 server.xml中添加一个host元素.
<Host name="www.google.com" appBase="d:\google">
<Context path="/mail" docBase="d:\google\mail"/>
<Context path="/news" docBase="d:\google\news"/>
</Host>
<Host name="www.sina.com" appBase="d:\sina">
<Context path="/mail" docBase="d:\sina\mail"/>
<Context path="/news" docBase="d:\sina\news"/>
</Host>
d)重启服务器,然后访问: http://www.google.com/mail/1.html
================================如何配置缺省的虚拟主机呢? ========================
<Engine name="Catalina" defaultHost="www.sina.com">
花生壳(可以找到免费域名)
11.web资源访问流程
12.web应用的目录组织结构(*重点)
-- .html ,.js, .css
-- WEB-INF
--classes java程序
--lib 存放jar包
--web.xml 用来做配置
web应用如何发布到服务器
上午内容回顾:
1、web资源分为两类: 静态web资源,动态web资源
2、B/S 请求-响应交互模型 :先产生请求,再产生响应,请求和响应成对出现
3、weblogic 、websphere、 apache tomcat
4、动手练习:tomcat安装配置 (解压安装、配置JAVA_HOME[JDK安装目录]) ----- 双击bin/startup.bat ----- http://localhost:8080
**** 修改tomcat默认端口为80 (conf/server.xml)
**** 端口占用问题解决 netstat -ano 查看占用端口进程id ,通过任务管理器根据id 结束进程 (有些进程由服务控制 services.msc 进入服务管理界面 停止服务)
5、JavaEE版本和Tomcat版本对应关系表
6、Tomcat目录结构
7、网站标准目录结构 (重点)
8、动手练习:虚拟目录三种映射方式 第一种 配置server.xml 第二种 配置独立xml 第 三种 将网站复制webapps
(war包制作和tomcat manager使用)
访问网站全过程分析
1、在浏览器输入url地址
2、访问本机域名解析文件 hosts ======= c:\windows\system32\drivers\etc\
3、如果本机没有查找到域名,查找网络上DNS服务器
4、域名解析后,获得域名对应ip地址。根据ip和port访问网络上指定主机和服务
真实开发网站过程
1、开发网站
2、将网站发布web服务器上 (公网ip)
3、在DNS域名解析服务器上注册域名,和服务器ip绑定
实验:在本机上搭建百度虚拟主机 =========== 注意:默认端口必须设置80
1、抓取baidu主页
2、在c盘 新建虚拟主机目录 c:\baidu
3、在c:\baidu下新建 百度网站目录 website (复制网站页面到 website目录)
4、在conf/server.xml 配置虚拟主机
<Host name="www.baidu.com" appBase="C:\baidu"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
</Host>
5、在本机 hosts文件添加
192.168.1.250 www.baidu.com
*** 测试 cmd中 ping www.baidu.com 测试hosts是否配置成功
6、将website配置 缺省网站 在<Host> 元素内部添加<Context> 元素
<Context path="" docBase="website" />
7、将baidu.htm 配置默认欢迎页面 conf/web.xml
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>baidu.htm</welcome-file>
</welcome-file-list>
********************* 一个tomcat服务器中可以配置很多个<Host>元素(虚拟主机) ,只有一个虚拟主机可以直接通过ip地址访问
缺省虚拟主机 (直接通过ip地址访问虚拟主机)
<Engine name="Catalina" defaultHost="localhost">
如果访问不是缺省虚拟主机,必须修改客户端hosts文件,或者在DNS注册
=================
HTTP 协议:
1.什么是协议?
网络通信中数据格式
URl详解
2.HTTP协议.
Http协议是用来定义 web浏览器与web服务器之间交换数据的格式的专用的.
特点
1、基于TCP
2、默认端口80 (:80可以省略)
3、请求-响应模型
实验一:通过telnet 连接程序 ----- 感受HTTP协议
* xp自带,win7需要安装
在cmd下 通过telnet -? 检验是否安装 telnet
1、启动tomcat
2、在cmd中输入 telnet localhost 80
ctrl+] 回车
3、输入HTTP协议请求
GET /index.html HTTP/1.1
host:localhost
连续回车两次
4、接收HTTP响应内容
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
ETag: W/"7347-1184876416000"
Last-Modified: Thu, 19 Jul 2007 20:20:16 GMT
Content-Type: text/html
Content-Length: 7347
Date: Mon, 15 May 2013 08:30:06 GMT
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
...
实验二:在IE安装Httpwatch插件(firefox中也有firedebug)
IE6 查看 ---- 浏览器栏 打开Httpwatch
IE8 以上 工具中存在HttpWatch
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
ETag: W/"7347-1184876416000"
Last-Modified: Thu, 19 Jul 2007 20:20:16 GMT
Content-Type: text/html
Content-Length: 7347
Date: Mon, 15 Oct 2012 08:34:34 GMT
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
...
HTTP1.0 一次连接一个web资源
HTTP1.1 一次连接多个web资源
一、HTTP请求协议格式
GET /day4/img.html HTTP/1.1
Accept: */*
Accept-Language: zh
Accept-Encoding: gzip, deflate
If-Modified-Since: Mon, 15 Oct 2012 09:06:00 GMT
If-None-Match: W/"319-1350291960578"
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET4.0C)
Host: localhost
Connection: Keep-Alive
HTTP请求由三大部分组成:请求行、头信息、请求体(只有post方式才有)
1、请求行
GET /day4/img.html HTTP/1.1 分为三个部分:请求方式、资源路径、协议版本
HTTP请求方式定义8种,常用GET和POST两种
2、头信息(消息头)
Accept: text/html,image/* 客户端识别文件类型
Accept-Charset: ISO-8859-1 客户端字符集
Accept-Encoding: gzip 客户端支持编码类型 gzip 压缩格式
Accept-Language:zh-cn 客户端语言
Host: www.itcast.com:80 访问服务器地址
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT (重要) 和Last-Modified 一起使用 控制缓存
Referer: http://www.itcast.com/index.jsp (重要) 防止盗链
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 请求时间
重点:If-Modified-Since、referer、User-Agent
盗链:A网站直接通过链接,访问B网站资源
防盗链原理,判断请求中referer信息
****** 使用URL 和 URLConnection 伪造客户端
3、请求体
多个数据之间用&分隔
name=value&name=value&name=value...
=========get方式的请求与post方式的请求的区别===================
a) get方式的请求 : GET /day02/1.html HTTP/1.1
post方式的请求: POST /day02/1.html HTTP/1.1
b)数据的提交方式也不同: get的请求数据会跟在url地址后面
get: http://localhost:8080/day02/1.html?username=lijianqun&age=19
post: http://localhost:8080/day02/1.html ,那么post方式的数据是放在了请求体中
c) get方式木有 请求体. 而 post方式有.
一般都采用 get方式的请求. 如果表单提交就采用 post.
除了表单提交的时候可以设置成post方式外,其他的请求都是get方式.
d) 实际开发过程中,如果给用户一个超链接, 而用户点击的时候,又希望用户可以带一些数据过来.
<a href="/day02/img.html?name=wangpan">小样儿,来点我啊</a>
注意: GET方式的特点:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1K。
post方式请求的数据由于跟在请求体中的, 所以请求的数据就没有大小限制了.
5.HTTP响应
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Thu, 13 Jul 2000 05:46:53 GMT
Content-Length: 2291
Content-Type: text/html
Cache-control: private
<HTML>
<BODY>
HTTP响应由三个部分组成 :状态行、头信息、响应体 (响应体和头信息直接存在空行)
1、状态行
HTTP/1.1 200 OK 协议版本、状态码、描述信息
Informational 1xx 信息不足,请求无法处理
Successful 2xx 请求成功处理
Redirection 3xx 请求已经处理 ,还需要客户端有进一步操作
Client Error 4xx 客户端错误
Server Error 5xx 服务器端错误
200 :请求成功处理,一切OK
302 :请求重定向 (A 找 B 借钱,B 通知 A 找C 借钱 ,A找C 借钱)
A 客户端 B、C服务器
304 :服务器端资源没有改动,通知客户端查找本地缓存
404 :客户端访问资源不存在
500 :服务器内存出错
6.常用的响应状态码
1xx: 请求信息不完整. informational
2xx: success , 成功处理请求
3XX: redirection. 请求"重定向".
4xx: client error , 客户端出现错误,资源不存在
5xx: 服务器端内部错误. server error
200 , 302 ,304,404,500
200 : 表示一切OK, 服务器完美的完成了整个响应.
302 : 一般会与location响应头一起实现请求重定向, (重点)
304 :请求的资源未改变,通知客户端直接到本地拿缓存.
404 :请求的资源不存在, 一般 表示 请求的路径有问题. 401 ,403
500 : 请求的时候服务器端出现了错误.
7. 常用的响应头详解:
响应头:
Location: http://www.it315.org/index.jsp 与302 一起实现请求重定向,
Server:apache tomcat 告诉客户端,服务器的类型.
Content-Encoding: gzip 服务器给客户机回写数据时采用的压缩格式 gzip
Content-Length: 80 服务器给客户机回写数据的大小
Content-Language: zh-cn 服务器给客户机回写数据采用的是什么语言.
Content-Type: text/html; charset=GB2312 服务器给客户机回写数据采用的是什么字符集
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT 重点 : If-Modified-Since , 304 一起实现缓存
Refresh: 1;url=http://www.it315.org 通知客户端 定时刷新到某个页面.
Content-Disposition: attachment; filename=aaa.zip 文件下载的,(重要)
实现客户端禁用缓存.
Expires: -1
Cache-Control: no-cache
Pragma: no-cache
Connection: close/Keep-Alive 继续保持连接还是断开
Date: Tue, 11 Jul 2000 18:23:51 GMT 服务器回写数据的时间.
=======================重点======================================
1) 302 + Location 完成请求重定向
2) refresh 自动刷新
3) gzip压缩
a) 用程序代码实现压缩.
b) 通过配置tomcat 服务器来实现压缩.
在server.xml中的connector中配置
compressableMimeType="text/html,text/xml,text/plain" compression="on"
压缩前: 00:00:00.000 1.163 11599 GET 200 text/html;charset=ISO-8859-1 http://localhost:8080/
压缩后: 00:00:00.000 1.150 2296 GET 200 text/html;charset=ISO-8859-1 http://localhost:8080/
4) Tomcat默认缓存策略 If-Modified-Since Last-Modified 结合304 实现
http://localhost:8080/tomcat.css
第一次访问: Last-Modified: Sun, 05 May 2013 00:55:08 GMT
第二次访问: If-Modified-Since: Sun, 05 May 2013 00:55:08 GMT
5) 禁用缓存
Expires: -1
Cache-Control: no-cache
Pragma: no-cache
防止浏览器不兼容,如果网页禁用缓存后,不会在 工具-- internet选项 --- 设置 --查看文件 产生缓存文件
======================================================================内容小结:
1、tomcat安装配置 修改端口80
2、三种虚拟目录映射方式
3、虚拟主机配置
4、myeclipse集成tomcat 开发web工程
5、HTTP请求方式几种?GET和POST区别?
6、HTTP响应常见状态码 200 302 304 404 500 作用
7、HTTP 请求 Referer防盗链 (URL编写客户端程序)
8、HTTP 响应
302 + Location重定向
refresh 自动刷新
gzip 配置压缩
tomcat 缓存策略
禁用浏览器缓存三个头字段