[01]Tomcat和HTTP协议

来源:互联网 发布:sqlserver卸载不干净 编辑:程序博客网 时间:2024/05/16 10:55

1 Tomcat服务器

1.1 Web开发概述

静态资源和动态资源

WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源。

Internet上供外界访问的Web资源分为:
静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变。
动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同。

静态Web资源 动态Web资源 可以与创建的(pre-created)并且保存在服务器上 通过部署在服务器上的程序产生的 对于任何的客户端都是相同的 可以解释客户端的参数 / 不同的客户端,产生的动态内容是不同的

静态web资源开发技术
Html
常用动态web资源开发技术
JSP/Servlet、ASP、PHP等

在Java中,动态web资源开发技术统称为Javaweb,重点也是Java技术开发动态的web资源,即动态web页面。

1.2手动编写简单静态Web服务器

Web应用要运行起来,提供给外部用户通过浏览器访问,需要有一个Web服务器软件(程序)来解析。下面手动来写一个简单的Web服务器程序。

import java.io.*;import java.net.*;//手动编写简单静态Web服务器public class Server {    public static void main(String[] args) throws Exception {        ServerSocket server=new ServerSocket(8080);        Socket sock=server.accept();        FileInputStream in=new FileInputStream("d:\\baidu\\1.html");        OutputStream out=sock.getOutputStream();        int len=0;        byte buffer[]=new byte[1024];        while((len=in.read(buffer))>0){            out.write(buffer,0,len);        }        in.close();        out.close();        sock.close();        server.close();    }}

1.3常见Web服务器介绍

WebLogic
WebLogic是BEA公司的产品,是目前应用最广泛的Web服务器,支持J2EE规范,而且不断的完善以适应新的开发要求;

WebSphere
另一个常用的Web服务器是IBM公司的WebSphere,支持J2EE规范;

Apache Tomcat
在小型的应用系统或者有特殊需要的系统中,可以使用一个免费的Web服务器:Tomcat,该服务器支持全部JSP以及Servlet规范;

1.4 Tomcat基本使用

tomcat的启动与关闭

获得安装包
到Tomcat官方站点:http://jakarta.apache.org获取安装程序包,有三种版本的安装程序包,分别为:

tar.gz 文件是Linux操作系统下的安装版本(Linux版本)
exe 文件是Windows系统下的安装版本(傻瓜式操作)
zip 文件是Windows系统下的压缩版本(配置更加灵活)

安装Tomcat
这里我们以zip压缩版的tomcat为例:

1)下载apache-tomcat-7.0.22压缩文件夹。
2)解压apache-tomcat-7.0.22到指定目录,解压后看到tomcat的目录;
3)打开bin目录,双击startup.bat文件
4)打开浏览器输入:http://localhost:8080,显示tomcat欢迎页代表安装成功!

Tomcat启动常见问题
点击startup.bat后迅速闪退问题
这个问题是因为Tomcat没有找到java的运行环境。解决办法是在环境变量里新建JAVA_HOME(不区分大小写),指向JDK安装目录。

2)端口占用的问题

端口占用一般是因为其他应用程序在运行占用了Tomcat运行所需的端口,这是可以使用cports.exe程序查看端口占用情况,然后在“任务管理器”里面把占用端口的程序进程杀死。

3)CATALINA_HOME环境变量设置问题

CATALINA_HOME这个环境是表示Tomcat所在目录,如果设置了在环境变量里加上了这个变量,则所有startup.bat命令都会去启动同一个Tomcat目录的程序,导致启动的不是我们想要的tomcat。一般不要配置CATALINA_HOME。

1.5 Tomcat目录结构

Tomcat的目录层次结构

目录 说明 bin 存放启动和关闭 Tomcat 的脚本文件 conf 存放 Tomcat 服务器的各种配置文件 lib 存放 Tomcat 服务器的支撑jar 包 logs 存放 Tomcat 的日志文件 temp 存放 Tomcat 运行时产生的临时文件 webapps web应用所在目录,即供外界访问的web资源的存放目录 work Tomcat 的工作目录

1.6 Web应用结构

Tomcat的体系简介
通过 Tomcat\conf\server.xml 配置进行配置(Tomcat的核心配置文件

这里写图片描述

web应用组成结构
这里写图片描述


应用的根(web root)
 其名字可以是自定义的
公共目录(public)
 其名字也是可以自定义的
 在公共目录下的内容都是可以供客户端访问的
WEB-INF
 供容器使用,客户端不能直接访问的
web.xml
 应用的部署描述符
 应用中的servlet、filter、listener等都可以通过此文件部署
classess目录
 编译后的类
lib目录
 web应用需要的类库
 这也作为web应用的类路径的一部分

开发web应用时,不同类型的文件有严格的存放规则,否则不仅可能会使web应用无法访问,还会导致web服务器启动报错。

通过修改web.xml文件,配置web应用首页:

 <web-app version="2.5"     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_2_5.xsd">  <welcome-file-list>    <welcome-file>pay.html</welcome-file>  </welcome-file-list></web-app>

通过以上配置就将pay.html设置成web应用的首页

1.7 部署web应用的方式

Web应用程序:
WEB应用程序指供浏览器访问的程序,通常也简称为web应用。

一个web应用由多个静态web资源和动态web资源组成,如:
html、css、js文件
Jsp文件、java程序、支持jar包、
配置文件
……

Web应用开发好后,若想供外界访问,需要把web应用所在目录交给web服务器管理,这个过程称之为虚似目录的映射。比如有a.html、b.html。。。多个web资源,这个多个web资源用于对外提供支付服务,此时应该把多个web资源放在同一个目录下,组成web应用(或web应用程序)。
直接拷贝到webapps目录下

第一种方法:tomcat自动映射,直接放在tomcat/webapps下
tomcat服务器会自动管理webapps目录下的所有web应用,并把它映射成虚拟目录。换句话说,tomcat服务器webapps目录中的web应用,外界可以直接访问。

用jar -war命令可以打包web应用,直接拷贝到webapps下可自动部署!

注意:如果将Web应用目录名称改为“ROOT”,则该项目为tomcat默认应用。(访问默认应用无需路径名)。

设置虚拟目录

为了让开发好的Web应用在web服务器(tomcat)中能被用户用浏览器访问到,可以为web应用映射虚拟目录。

第一种方式:配置server.xml文件

在Tomcat/conf目录的server.xml文件的host元素中配置,例如:

  <Host name="localhost"  appBase="webapps"        unpackWARs="true" autoDeploy="true"        xmlValidation="false" xmlNamespaceAware="false">    <Context path="/baidu" docBase="c:\app"/>  </Host>

path :表示在浏览器中输入http://localhost:8080/虚拟目录名
docBase :表示你的Web应用包的物理绝对路径。
reloadable:如果这个属性设为true,tomcat服务器在运行状态下会监视在WEB-INF/classes和WEB-INF/lib目录下class文件的改动,如果监测到有class文件被更新的,服务器会自动重新加载Web应用。

第二种方法:配置单独的xml文件

在tomcat/conf/Catalina/localhost下面建立xml文件(例如abc.xml),内容如下:

 <?xml version="1.0"?><Context docBase="d:/baidu" />

docBase:表示web应用程序所在的实际路径
文件名:表示在访问本应用时加上的路径

1.8 配置虚拟主机

Tomcat的虚拟主机的配置:WEB浏览器与WEB服务器建立连接后,除了将请求URL中的资源路径发送给WEB服务器外,还会将URL中的主机名部分作为HTTP请求消息的Host头发送给WEB服务器。

Tomcat的虚拟主机的配置主要的用途是在一个tomcat服务器中可以放置多个网站,所谓配置虚似主机,就是在tomcat服务器中配置一个网站。如需在WEB服务器中配置一个网站,需使用Host元素进行配置,例:<Host name=”site1” appBase=”c:\app”></Host>配置的主机(网站)要想被外部访问,必须在DNS服务器或windows系统中注册。

需求:
本地有一个web应用,需要把它发布到tomcat中,通过浏览器输入http://www.baidu.cn可以访问到你自己的web应用。(“做一回黑客”)

具体步骤:

1)在tomcat/conf目录下的server.xml文件中把其中的端口号8080改成本机的80
<Connector port="80" protocol="HTTP/1.1"                connectionTimeout="20000"                redirectPort="8443" />
2)在server.xml文件中新建一个<host>标签其中写上目录名字,地址。例如:
  <Host name="www.baidu.com" appBase="c:\app">         <Context path="" docBase="c:\baidu\pay"/>       </Host>
3)找到hosts(C:\Windows\System32\drivers\etc)文件,在文件最后加上一行:
 127.0.0.1  www.baidu.cn
4)这样,你的浏览器上输入http://www.baidu.cn就不会进入百度的官网,而是进入你设置的网页。

1.9 利用MyEcplise开发并部署web应用

1)在MyEclipse中配置Tomcat
2)开发目录结构和运行目录结构

2 Http协议

2.1 什么是Http协议?

1)客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式

2)使用telnet程序连上web服务器,并使用HTTP协议获取某个页面,以快速了解 HTTP协议的作用。

3)安装Firefox(火狐)浏览器插件firebug,查看火狐浏览器通过HTTP协议获取某个页面。

安装FireBug插件并通过firebug来观察Http协议信息;

HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。
HTTP协议是学习JavaWEB开发的基石,不深入了解HTTP协议,就不能说掌握了WEB开发,更无法管理和维护一些复杂的WEB站点。
HTTP协议的版本:HTTP/1.0、HTTP/1.1

2.2 Http1.0和Http1.1

在HTTP1.0协议中,客户端与web服务器建立连接后,只能获得一个web资源。
HTTP1.1协议,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源

一个web页面中,使用img标签引用了三幅图片,当客户端访问服务器中的这个web页面时,客户端总共会访问几次服务器,即向服务器发送了几次HTTP请求。
答案是4次。请求这个页面资源1次,然后每张图片各请求1次,共4次。

2.3 Http请求

客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求。一个完整的HTTP请求包括如下内容:
一个请求行、若干消息头、以及实体内容,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。如下所示:

请求行
请求方式有:
POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT
常用的有:POST、GET

不管POST或GET,都用于向服务器请求某个WEB资源,这两种方式的区别主要表现在数据传递上,客户端通过这两种方式都可以带一些数据给服务器:
1)如请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,例如:

GET /mail/1.html?name=abc&password=xyz HTTP/1.1

GET方式的特点:在URL地址后附带的参数是有限制的,其数据容量不能超过1K。另一方面,一些用户密码等保密数据不适合以GET方式提交。

2)如请求方式为POST方式,则可以在请求的实体内容中向服务器发送数据,例如:

POST /servlet/ParamsServlet HTTP/1.1    Host:    Content-Type: application/x-www-form-urlencoded    Content-Length: 28
name=abc&password=xyz

Post方式的特点:传送的数据量无限制。

用于HTTP请求中的常用头

请求头 常用请求头详解 Accept 用于告诉服务器,客户支持的数据类型。 Accept-Charset 用于告诉服务器,客户采用的编码。 Accept-Encoding 用于告诉服务器,客户支持的数据压缩格式。 Host 客户机通过这个头告诉服务器,想访问的主机名。 If-Modified-Since 用于告诉服务器,资源缓存的时间。 Referer 用于告诉服务器,它是从哪个资源来访问服务器的(防盗链)。 Content-Type 告知服务器,请求正文的MIME类型,默认类型:application/x-www-form-urlencoded(表单enctype属性的默认取值),具体体现:username=abc&password=123,其他类型:multipart/form-data(文件上传时用的) User-Agent 用于告诉服务器,客户机使用的软件环境。 Cookie 客户带过来的cookie信息。 Connection 表示是否持续连接。如果想本次请求后关闭连接,使用close;如果想持续连接,使用keep-Alive。 Date 发送请求时间。

2.4 Http响应

一个HTTP响应代表服务器向客户端回送的数据,它包括:
一个状态行、若干消息头、以及实体内容 ,其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。

状态行

状态行
格式: HTTP版本号 状态码 原因叙述<CRLF>
举例:HTTP/1.1 200 OK
状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类,如下所示:

状态码 含义 100~199 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程 200~299 表示成功接收请求并已完成整个处理过程,常用200 300~399 为完成请求,客户需进一步细化请求。例如,请求的资源已经移动一个新地址,常用302、307和304 400~499 客户端的请求有错误,常用404 500~599 服务器端出现错误,常用 500
常用响应头

HTTP请求中的常用响应头:

Location: http://www.it315.org/index.jsp Server:apache tomcatContent-Encoding: gzip Content-Length: 80 Content-Language: zh-cn Content-Type: text/html; charset=GB2312 Last-Modified: Tue, 11 Jul 2000 18:23:51 GMTRefresh: 1;url=http://www.it315.orgContent-Disposition: attachment; filename=aaa.zipSet-Cookie:SS=Q0=5Lb_nQ; path=/searchExpires: -1Cache-Control: no-cache  Pragma: no-cache   Connection: close/Keep-Alive   Date: Tue, 11 Jul 2000 18:23:51 GMT
常用响应头详解:

Location:这个头配合302状态码使用,用于告诉客户找谁。
Server:服务器通过这个头,告诉浏览器服务器的类型。
Content-Encoding:服务器数据压缩格式。
Content-Length:告诉浏览器回送数据的长度。
Content-Type:告诉浏览器客户端,响应文正的MIME类型。默认text/html
Last-Modified:告诉浏览器当前资源缓存的时间。
Refresh:告诉浏览器多长时间刷新一次。
Content-Disposition:告诉浏览器以下载方式打开数据。
Expires: 告诉浏览器把回送的资源缓存多长时间。-1或0则表示不缓存。
Cache-Control: 通过这个头也是告诉浏览器不要缓存数据。http1.1有效
Pragma: 通过这个头也是告诉浏览器不要缓存数据。http1.0有效

0 0
原创粉丝点击