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
服务器通过以上两个头,也是控制浏览器不要缓存数据