Servlet—TomCat、HTTP协议

本文详细介绍了如何在虚拟机中安装并配置TomCat服务器,包括目录结构、虚拟目录映射、web应用组织结构、web.xml文件作用、HTTP协议详解、加密会话配置以及HTTP请求和响应细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.  TomCat

1.1 安装TomCat服务器

这里就不详细叙述怎么安装和配置TomCat服务器了,不会的可以去百度,我这里是在一台虚拟机(ip为192.168.80.101)中装的TomCat,这里我先启动TomCat,

./startup.sh 
Using CATALINA_BASE:   /usr/tomcat/apache-tomcat-6.0.45
Using CATALINA_HOME:   /usr/tomcat/apache-tomcat-6.0.45
Using CATALINA_TMPDIR: /usr/tomcat/apache-tomcat-6.0.45/temp
Using JRE_HOME:        /usr/java/jdk1.7.0_67
Using CLASSPATH:       /usr/tomcat/apache-tomcat-6.0.45/bin/bootstrap.jar

然后再浏览器中输入192.168.80.101:8080,得到一个TomCat界面,说明启动成功。


1.2 TomCat目录结构

[hadoop@H01 apache-tomcat-6.0.45]$ ll
total 116
drwxr-xr-x 2 hadoop hadoop  4096 Feb 18 19:29 bin
drwxr-xr-x 3 hadoop hadoop  4096 Feb 18 19:44 conf
drwxr-xr-x 2 hadoop hadoop  4096 Feb 18 19:29 lib
-rw-r--r-- 1 hadoop hadoop 56685 Feb  2 02:09 LICENSE
drwxr-xr-x 2 hadoop hadoop  4096 Feb 18 19:30 logs
-rw-r--r-- 1 hadoop hadoop   807 Feb  2 02:09 NOTICE
-rw-r--r-- 1 hadoop hadoop  9124 Feb  2 02:08 RELEASE-NOTES
-rw-r--r-- 1 hadoop hadoop 16220 Feb  2 02:09 RUNNING.txt
drwxr-xr-x 2 hadoop hadoop  4096 Feb 18 19:29 temp
drwxr-xr-x 7 hadoop hadoop  4096 Feb  2 02:08 webapps
drwxr-xr-x 3 hadoop hadoop  4096 Feb 18 19:30 work

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

2. Web应用程序

Web应用程序指供浏览器访问的程序,通常也简称为web应用。一个web应用由多个静态web资源和动态web资源组成,如:html、css、js文件、Jsp文件、java程序、支持jar包、配置文件等等。假设现在有一个web应用olds,里面包含两个html文件(a.html和b.html)。

[hadoop@H01 olds]$ pwd
/home/hadoop/web/olds
[hadoop@H01 olds]$ ls
a.html  b.html


2.1 虚拟目录的映射

Web应用开发好后,若想供外界访问,需要把web应用所在目录交给web服务器管理,这个过程称之为虚似目录的映射。虚拟目录的映射配置有很多方式。比如想要对olds这个web应用进行虚拟目录映射。

一种方式是在conf/server.xml文件中的host元素中配置,例如:



使用这种方式需要重启TomCat服务器,然后在浏览器中输入:http://192.168.80.101:8080/oner/a.html就可以访问到服务器中的olds这个web应用,但是访问方式是通过它的虚拟虚拟目录oner进行访问的。




在Tomcat6中,不再建议在server.xml文件中配置context元素,细节查看tomcat服务器关于context元素的说明。
另一种方式是在conf/Catalina/localhost的目录下建立xml文件(名字可以任意起),例如建立一个page1.xml文件,里面内容为:

<Context docBase="/home/hadoop/web/olds"/>

这样,olds这个web应用的虚拟目录就为page1,可以通过浏览器来验证下:


如果xml文件命名方式为foo#bar.xml,则映射成的虚拟目录为多级目录foo/bar,例如,将page1.xml文件拷贝一份,命名为page2#page3.xml。

[hadoop@H01 localhost]$ more page2#page3.xml 
<Context docBase="/home/hadoop/web/olds"/>

这时在浏览器中输入http://192.168.80.101:8080/page2/page3/a.html地址仍然可以访问到a.html这个文件。


这种方式的好处是无需重启TomCat服务器。

如果将该xml文件命名为ROOT.xml,则会将ROOT.xml中的web应用配置为缺省Web应用。

[hadoop@H01 localhost]$ more ROOT.xml 
<Context docBase="/home/hadoop/web/olds"/>



除此之外,还可以让TomCat自动映射web应用,这种方式该怎么实现呢?tomcat服务器会自动管理webapps目录下的所有web应用,并把它映射成虚似目录。换句话说,tomcat服务器webapps目录中的web应用,外界可以直接访问。

2.2 web应用组织结构

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



2.3 web.xml文件的作用

web应用中,web.xml文件是其中最重要的一个文件,它用于对web应用中的web资源进行配置。通过web.xml文件,可以将web应用中的:某个web资源配置为网站首页、将servlet程序映射到某个url地址上....等等。但凡涉及到对web资源进行配置,都需要通过web.xml文件。

举例,通过web.xml文件配置网站首页。

[hadoop@H01 mail]$ more hello.html 
Hello Java!
Hello Web!

[hadoop@H01 WEB-INF]$ ls
classes  lib  web.xml
[hadoop@H01 WEB-INF]$ more 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_2_5.xsd"
    version="2.5">

    <welcome-file-list>
        <welcome-file>hello.html</welcome-file>
    </welcome-file-list>

</web-app>

打开浏览器进行验证



注意:Web.xml文件必须放在web应用\WEB-INF目录下

2.4 Web资源访问图




TomCat的体系结构:


2.5 配置TomCat服务器的加密会话

1. 使用如下命令生成服务器证书:

[hadoop@H01 ~]$ keytool -genkey -alias tomcat -keyalg RSA
Enter keystore password:  
Re-enter new password: 
What is your first and last name?
  [Unknown]:  192.168.80.101
What is the name of your organizational unit?
  [Unknown]:  
What is the name of your organization?
  [Unknown]:  
What is the name of your City or Locality?
  [Unknown]:  
What is the name of your State or Province?
  [Unknown]:  
What is the two-letter country code for this unit?
  [Unknown]:  
Is CN=192.168.80.101, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct?
  [no]:  y

Enter key password for <tomcat>
	(RETURN if same as keystore password):  
[hadoop@H01 ~]$ 

将生成的.keystore文件复制到TomCat服务器的conf目录下:


[hadoop@H01 ~]$ cp .keystore /usr/tomcat/apache-tomcat-6.0.45/conf/

在server.xml文件中配置加密连接器,并指定加密连接器从哪个密钥库中获取数字证书



3. 使用浏览器访问:https://192.168.80.101:8443。注意是htts



点击继续浏览此网站




3. HTTP协议

3.1 HTTP协议简介

HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。

HTTP协议是学习JavaWEB开发的基石,不深入了解HTTP协议,就不能说掌握了WEB开发,更无法管理和维护一些复杂的WEB站点。

HTTP协议的版本:HTTP/1.0、HTTP/1.1。在HTTP1.0协议中,客户端与web服务器建立连接后,只能获得一个web资源;HTTP1.1协议,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源。

思考:一个web页面中,使用img标签引用了三幅图片,当客户端访问服务器中的这个web页面时,客户端总共会访问几次服务器,即向服务器发送了几次HTTP请求。

总共是4次,因为打开web页面时是一次请求,浏览器解析img标签后再次向服务器发送3次请求。

3.2 HTTP请求

客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求。一个完整的HTTP请求包括如下内容:一个请求行、若干消息头、以及实体内容,如下所示 :


3.2.1 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

GET方式的特点:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1K。

如请求方式为POST方式,则可以在请求的实体内容中向服务器发送数据,Post方式的特点:传送的数据量无限制。

3.2.2 HTTP请求细节——请求头

请求头实例:

Accept: text/html,image/*    
Accept-Charset: ISO-8859-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 (compatible; MSIE 5.5; Windows NT 5.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: 浏览器通过这个头告诉服务器,缓存数据的时间
If-None-Match:缓存相关的头
Referer:浏览器通过这个头告诉服务器,客户机是哪个页面来的(防盗链)
User-Agent:浏览器通过这个头告诉服务器,客户机的软件环境(比如浏览器类型及版本、操作系统类型及版本)
Cookie:浏览器通过这个头可以向服务器带数据
Connection:浏览器通过这个头告诉服务器,请求完后是断开链接还是何持链接


3.3 HTTP响应

一个HTTP响应代表服务器向客户端回送的数据,它包括:HTTP请求中的常用头:一个状态行、若干消息头、以及实体内容 ,如下所示:


3.3.1 HTTP响应的细节——状态行

格式: HTTP版本号 状态码 原因叙述<CRLF>。

举例:HTTP/1.1 200 OK

状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类,如下所示:


3.3.2 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
Transfer-Encoding: chunked  
Set-Cookie:SS=Q0=5Lb_nQ; path=/search
Expires: -1
Cache-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-Language: 服务器通过这个头,告诉浏览器语言环境
Content-Type:服务器通过这个头,告诉浏览器回送数据的类型
Last-Modified:服务器通过这个头,告诉浏览器当前资源缓存时间
Refresh:服务器通过这个头,告诉浏览器多长时间刷新一次,也可以指定刷新后指向新的页面
Content-Disposition: 服务器通过这个头,告诉浏览器以下载方式打开数据
Transfer-Encoding:服务器通过这个头,告诉浏览器数据是以分块方式回送的
ETag:缓存相关的头
Expires: 服务器通过这个头,告诉浏览器把回送的资源缓存多长时间,-1或0表示不缓存
Cache-Control: no-cache  
Pragma: no-cache   
服务器通过以上两个头,也是控制浏览器不要缓存数据


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值