1、WEB开发的相关知识
(1)WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问资源
(2)Internet上供外界访问的Web资源分为:
静态web资源(如html界面):指web页面供人们浏览的数据始终不变
动态webz资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容是不一样的
(3)静态web资源开发技术:Html
(4)常用动态web资源开发技术:JSP/Servlet 、ASP、PHP等,在Java中,动态web资源开发技术统称为JavaWeb。
Web1.0:这个数据是让用户浏览的,主要用来传播信息
Web2.0:页面是用来交互的
JSP/Servlet优势:企业的前端开发
Asp-微软的解决方案 ——>.net(C#.net /asp.net/ vb.net)
Php——开源组织的 android、ruby、python,hadoop
Lamp(Linux+apache+mysql+php)
2、常见Web服务器
(1)web服务器的模型
遵守请求-- 响应的模型
a) 请求与响应必须成对的出现.
b)必须先有请求,后有响应.
(2)常见的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. 免费的
大名鼎鼎的红帽的产品,原来属于开源组织JbossAS,后被红帽收购。支持JavaEE规范, 免费。
补充:Tomcat服务器
Tomcat官方站点:http://tomcat.apache.org/
获取Tomcat安装程序包
tar.gz文件是Linux操作系统下的安装版本
exe文件是Windows系统下的安装版本
zip文件是Windows系统下的压缩版本
安装Tomcat ==> 配置JAVA_HOME
我们后面的JavaWeb学习都是基于Tomcat服务器的
3、常见启动问题
(1)Java_home环境变量
在windows中设置java_home环境变量
只要在setclasspath.bat批处理文件第一次使用JAVA_HOME环境变量之前的任何地方,将JAVA_HOME环境变量设置为JDK的主目录,就可以使用startup.bat文件启动Tomcat了。
(2)端口占用问题
WindoxXP 使用Fport工具 或 netstat –ano
Win7 使用DOS命令 netstat –ano
services.msc( windows IIS 服务)
(3)Catalina_home环境变量的设置问题
解决方案:
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.
c) 如果把tomcat启动时的端口 改成80 之后 可能 重启服务器又 启动不了了, 怎么办?
重复 b) 操作,找到 占用80 端口的应用程序, 然后把它干掉.
如果 b)操作不好使,那么可能就是windows的IIS 占用了80 端口(系统级的服务.干不掉)
进到windows的 服务列表中将其 干掉了.
Catalina_home环境变量的设置问题
用来指明tomcat 服务器 安装的目录. 但是呢, 一般都不会配置该环境变量.
因为配置正确了没有关系.但是一旦配置错误,那么tomcat就启动不了了.
4、Tomcat目录结构
bin——存放启动和关闭Tomcat的脚本文件
conf——存放Tomcat的各种配置文件
lib——存放Tomcat服务器支撑的jar包
logs——存放Tomcat的日志文件
temp——存放Tomcat运行时产生的临时文件
webapps——web应用所在目录,即供外界访问的web资源的存放目录
work——Tomcat的工作目录
Tomcat服务器与Servlet版本关系
5、WEB应用程序
(1) WEB应用程序指供浏览器访问的程序,通常也简称为web应用
(2) 一个web应用由多个静态web资源和动态web资源组成
如:html、css、js文件
Jsp文件、Java程序、支持jar包
配置文件等等。。。
组成web应用的这些文件通常我们会使用一个目录组织,这个目录称之为web应用所在目录
(3)Web应用开发好后,若想供外界访问,需要把Web应用所在目录交给web服务器管理,这个过程称之为虚拟目录的映射
6、WEB应用组织结构
开发web应用时,不同类型的文件有严格的存放规则,否则不仅可能会使web应用无法访问,还会导致web服务器启动报错
Mail(web应用所在目录)
|-----html 、jsp、css、js文件等【这些文件一般都存在web应用根目录下,根目录下的文件外界可以直接访问】
|-----WEB-INF目录【javal类,jar包、web应用的配置文件存在这个目录下,该目录文件外界无法非法直接访问,由web服务器负责调用】
|----classes目录——(java类)
|----lib目录------(Java运行时所需的jar包)
|-----web.xml——(web应用的配置文件)
虚似目录的映射方式
2、从tomcat6开始,apache 不再建议在server.xml文件中配置context元素,细节查看tomcat服务器关于context元素的说明
在conf/Catalina/localhost/bb.xml
3、让tomcat自动映射: tomcat服务器会自动管理webapps目录下的所有web应用,并把它映射成虚拟目录。换句话说,tomcat服务器webapps目录中的web应用,外界可以直接访问
详细做法:
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 刚刚配置好的欢迎页面. 需要 重启服务器
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"/>
7、配置虚拟主机
(1)在一个Tomcat服务器中可以放置多个网站,所谓配置虚拟主机,就是在Tomcat服务器中配置一个网站
(2)如需在WEB服务器中配置一个网站,需要使用Host元素进行配置,
例如:<Host name=”site1” appBase=”c:\app”></Host>
(3)配置的虚拟主机(网站)要想被外部访问,必须在DNS服务器或windows系统中注册
详细方法:
a)进入到 C:\Windows\System32\drivers\etc ,
b) 打开 hosts文件,在末尾添加 :
192.168.1.100 (这是本机IP,之前一定要把localhost端口改为80,默认是8080) 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
补充:使用Eclipse开发动态web程序
8、web资源访问流程
1、 查询windows,获取主机名对应ip
2、 查询DNS,获取主机名对应ip
3、 用查询的ip连上服务器
4、 发送http请求
5、 从请求信息中获取客户机想访问的主机名
6、 从请求信息中获取客户机想访问的web资源
7、 从请求信息中获得客户机想访问的web应用
8、 读取相应主机下的,web应用下的web资源
9、 用读取到的web资源数据,创建出一个http响应
10、服务器回送http响应
11、浏览器收到http响应,解析出资源数据显示
9、什么是HTTP协议
(1)客户机连上web服务器后,若想得到web服务器中的某个web资源,需要遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器的通讯格式
(2)使用Telnet程序连上web服务器,并使用HTTP协议获取某个页面。快速了解HTTP协议的作用
(3)安装IE浏览器插件HttpWatch,查看IE浏览器通过HTTP协议获取某个页面
10、HTTP协议简介
(1)HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程
(2)HTTP协议是学习JavaWeb开发的基石,不深入了解HTTP协议,就不能说掌握WEB开发,更无法管理和维护一些复杂的WEB站点
(3)HTTP协议版本:HTTP/1.0 、HTTP/1.1
(4)基于TCP连接的传输协议
(5)默认端口是80
(6)基于请求-响应模式的协议
实验一:通过telnet 连接程序
a)打开dos命令行窗口 : telnet localhost 8080
b) 解决乱码 :
ctrl + ]
c) 乱码解决后,去访问tomcat首页.
去按回车,
GET / HTTP/1.1
Host:
GET / HTTP/1.0
Host:
后面连续按两次回车
出结果~~~
实验二:在IE安装Httpwatch插件
重启 ie, 然后点击 查看 -- 浏览器栏, 就可以找到安装的HTTP watch插件了.
11、HTTP1.0和HTTP1.1的区别
在HTTP1.0协议中,客户端与web服务器建立连接后,只能获得一个web资源,没有状态的.
HTTP1.1协议,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源。
使用telnet举例说明。
一个好多同学搞不清楚的问题:
一个web页面中,使用img标签引用了三幅图片,当客户端访问服务器中的这个web页面时,客户端总共会访问几次服务器,即向服务器发送了几次HTTP请求。 答案:4次请求
Web 开发优化 原则 : 尽量减少 web 请求 次数
12、HTTP请求
客户机连接上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个http请求,一个完整的HTTP请求包括如下内容:一个请求行,若干请求头,以及实体内容
举例:
GET/books/java/html HTTP/1.1(请求行)
Accept:*/*
Accept-language:en-us
Connection:Keep-Alive
Host:localhost
Referer:http://localhost/links.app
User-Agent:Mozilla/4.0
Accept-Encoding:gzip,deflate
(一个空行)
Xxxxxxxxxx
请求行:用于描述客户端的请求方式、请求资源名称,以及使用HTTP协议的版本号
消息头:用于描述客户端请求哪台主机,以及客户端的一些环境信息等
13、HTTP请求的细节——请求行
请求行中的GET称之为请求方式,请求方式有:POST、GET、HEAD、OPTIONS、DELETE
TRACE、PUT
常用的有:GET、POST
用户如果没有设置,默认情况下浏览器向服务器发送的都是get请求,例如浏览器直接输入地址访问,点链接访问等都是get,用户想把请求方式改为post,可通过更改表单的提交方式实现。
不管POST或GET,都用于向服务器请求某个WEB资源,这两种方式的区别主要表现在数据传递上
GET:可以在请求的URL地址后以?的形式带上交给服务器的数据。多个数据以&进行分隔
例如:GET/mail/1.html?name=abc&password=xyz HTTP/1.1
POST:可以在请求的实体中向服务器发送数据,传送的数据量无限制
14、HTTP请求的细节——消息头
用于http请求中的常用头
Accept:text/html,image/*
Accept-CharSet:ISO8859-1
Accept-Encoding:gzip.compress
Accept-Language:en-us,zh-cn
Host:www.it315.org:80
If—Modified-Since:Tue,11 Jul 2000 18:23:51 GMT
Referer:http://www.it315.org/index.jsp
User-Agent:Mozilla/4.0(compatiable;MSIE 5.5;Windows NT5.0)
Cookie
Connection:close/Keep-alive
Date:Tue,11 jul 2000 18:23:51 GMT
Accept:用于告诉服务器,客户机支持的数据类型
Accept-CharSet:用于告诉服务器,客户机采用的编码
Accept-Encoding:用于告诉服务器,客户机支持的数据压缩格式
Accept-Language:客户机的语言环境
Host:客户机通过这个头告诉服务器,想访问的主机名
If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间
Referer:客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的(防盗链)
15、GET和POST的区别
请求行中的GET称之为请求方式,请求方式有:
POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT
常用的有: GET、 POST
用户如没有设置,默认情况下浏览器向服务器发送的都是get请求,例如在浏览器直接输地址访问,点超链接访问等都是get,用户如想把请求方式改为post,可通过更改表单的提交方式实现。
不管POST或GET,都用于向服务器请求某个WEB资源,这两种方式的区别主要表现在数据传递上:
如请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,例如:
GET /mail/1.html?name=abc&password=xyz HTTP/1.1
GET方式的特点:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1K。
如请求方式为POST方式,则可以在请求的实体内容中向服务器发送数据,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方式有.
一般都采用 post方式的请求. 如果表单提交就采用 post.
除了表单提交的时候可以设置成post方式外,其他的请求都是get方式.
d) 实际开发过程中,如果给用户一个超链接, 而用户点击的时候,又希望用户可以带一些数据过来.
<a href="/day02/img.html?name=wangpan">小样儿,来点我啊</a>
注意: GET方式的特点:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1K。
post方式请求的数据由于跟在请求体中的, 所以请求的数据就没有大小限制了.
16、HTTP响应
17、HTTP响应行中的状态行
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 : 请求的时候服务器端出现了错误.
18、HTTP常用响应头
HTTP请求中的常用响应头
Location: http://www.it315.org/index.jsp
Server:apache tomcat
Content-Encoding: gzip
Content-Length: 80
Content-Language: zh-cn
Content-Type: text/html; charset=GB2312
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT
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
响应头解析:
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 文件下载的,(重要)
19、HTTP响应头应用
1) 302 + Location 完成请求重定向
// 302 + location 实现请求重定向
response.setStatus(302);
response.setHeader("location", "/day02/1.html");
2) refresh 自动刷新
response.setHeader("refresh", "3;url=/day02/img.html");
//response.setHeader("refresh", "3");
//response.getOutputStream().write("shit, so fuck hot!".getBytes());
3) gzip压缩
a) 用程序代码实现压缩.
b) 通过配置tomcat 服务器来实现压缩.
在server.xml中的connector中配置
compressableMimeType="text/html,text/xml,text/plain" compression="on"
压缩前: 00:00:00.0001.16311599GET200text/html;charset=ISO-8859-1http://localhost:8080/
压缩后: 00:00:00.0001.1502296GET200text/html;charset=ISO-8859-1http://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
20、HTTP实用头字段
(1)HTTP请求头字段
Range头指示服务器只传输一部分Web资源,这个头可以实现断点续传功能,Range字段可以通过三种方式设置传输的字节范围
Range:bytes=1000-2000
传输范围从1000到2000字节
Range:byte=1000-
传输Web资源从1000个字节以后的所有内容
Range:bytes=1000
传输最后1000个字节
(2)HTTP响应消息头字段
Accept-Ranges:这个字段说明Web服务器是否支持Range支持,则返回bytes,,如果不支持,则返回Accept-Ranges:none
Content-Range:指定了返回Web资源的字节范围,这个字段的格式是:
例子:Cotent-Range:1000-3000/5000