一、Tomcat的配置
1.目录结构
bin:存放启动和关闭tomcat的脚本文件
conf:存放配置文件
lib:存放tomcat服务器的支撑jar包
logs:存放日志文件,一旦服务器启动出现问题,可以查看里面的日志
temp:存放临时文件
webapps:web应用所在目录,即供外界访问的web资源的存放目录
work:工作目录
2.配置
2.1虚拟目录映射配置
修改服务器的端口号是在server.xml(conf文件夹)中进行修改,修改成80之后以后访问服务器的时候就不用添加端口号8080了,如下:
修改之后必须重新启动才能使用。这里注意:修改配置文件之后必须重启才能使用。
2.2虚拟目录的配置
将Tomcat->webapps->ROOT中的WEB-INF目录全部复制到E:\WebWorkspace这个目录中去。复制好之后我们还要让Tomcat知道这个映射,所以在E:\software\tomcat\conf路径中的server.xml文件中进行修改:
注意:是在的上方加上一行,其中path="/web"表示我们以后再浏览器中访问的时候所用的目录,比如使用http://localhost/web进行访问,而docBase="E:\WebWorkspace"表示的是绝对路径,即我们以后放置web程序的目录。同时注意,如果以后想要更改,一定要将WEB-INF目录这个目录放置在这个文件夹的一级目录中,即此时WebWorkspace相当于一个web应用,而不能是多个。配置完之后服务器同样需要重新启动。一般我们不这样配置,后面会讲另外的方式。
我们在web开发中会经常见到两个错误,一个错误是404,这种4开头的一般表示的是客户端的请求错误(路径错误);一个是5开头的(500)表示的都是程序错误。
若到此时输入http://localhost/web访问还是出现404错误,这就需要修改tomcat安装目录(E:\software\tomcat\conf)中conf目录下的web.xml配置文件。在文件中找到listings:
listings
true
保证param-value是true,若不是,改为true。然后重新启动服务器,再次刷新网页即可。
此时会出现一个工作目录列表,比如我将001.xml的文件放在目录E:\WebWorkspace之中,然后这个文件就会在网页上显示出来,我们点击就可以运行此文件了。
注意:对于上述的配置虚拟目录Context这种方式有点麻烦,因为每次都要重启tomcat服务器,于是我们一般在E:\software\tomcat\conf\Catalina\localhost这个目录中进行配置,我们可以在里面随便建立一个.xml的文件,比如web1.xml,然后将Context写入到里面去:
但是这里我们不需要再写path路径,在访问的时候这个.xml文件的名字web1就是path路径,http://localhost/web1/login.html就可以访问了,而且不需要重新启动。如果servlet的工程有多级目录,那我们可以这样起名web1#web.xml,访问的时候就可以这样http://localhost/web1/web/login.html访问了。如果我们将这个配置文件起名为ROOT.xml,那么这就是一个缺省的web应用,那么我们在访问的时候就可以直接这样http://localhost/login.html,即是将我们默认的apache页面更换了,但是注意这种方式下一定要重启tomcat服务器。同时注意,下面讲到的更改首页也首先要配置缺省配置文件。然后在
2.3更改首页
有时候我们不太喜欢这样访问出现的首页,这里我们可以进行更改。这同样是修改tomcat安装目录下的E:\software\tomcat\conf中的web.xml,在最下面我们可以看到我们每次访问的页面就是下面的红色部分的三个文件:
index.html
index.htm
index.jsp
如果想更改最好不要修改公共的配置,而去修改每一个独立的虚拟目录中的配置。将以上部分代码复制到E:\WebWorkspace\WEB-INF中的web.xml中的后面:
index.html
index.htm
index.jsp
然后将不需要的删掉,将第一行中的index.html换成自己的文件,比如main.htm,里面可以写上自己想要显示的内容,注意重启服务器。
注意:在以后的配置中我们不建议直接更改tomcat原先的配置文件,这里我们可以先配置一个缺省的xml配置文件之后,然后新建一个工程(一个文件夹),里面放置一个首页html文件和一个WEB-INF目录,此目录中放置一个web.xml,里面配置首页即可。重启服务器。
当我们写好一个jsp的文件并放在E:\WebWorkspace中之后,在浏览器中访问过这个文件后会在tomcat中的work目录中找到编译的文件。它会编译生成相应的class文件,以后如果需要使用就不用再次编译,可以直接使用。每当我们改变jsp文件是都会重新编译。如果发现不再重新编译,而且很慢,此时可以将work目录中的所有文件全部删除即可。
二、配置虚拟主机
当我们在IE浏览器中访问某个网站时,比如www.baidu.com,浏览器会先将此字符串发给DNS服务器,将此字符串转换成一个IP地址,然后浏览器才通过此IP地址访问到相应的网站。但是我们的IE浏览器在将字符串发给DNS服务器之前还会查找自己的主机,若本机上有这个字符串对应的IP地址的话,则不会去询问DNS了,而是直接通过相应的IP地址访问相应的网站,我们在目录C:\Windows\System32\drivers\etc中会发现一个hosts文件,里面就配置了localhost对应的IP地址。所以如果我们要想配置一个虚拟主机,则可以直接在里面添加,比如127.0.0.1 www.yj.com,然后就可以这样访问了:http://www.yj.com:8080/web1/login.html,当然这里我们已经将端口改为80,所以不需要再加端口了。如果想这样http://www.yj.com访问,则可以配置缺省目录。
三、管理平台
点击Managing Tomcat中的manager webapps,这时需要提供用户名和密码。我们找到conf目录中的tomcat-users.xml中将最后的
这段注释打开。这样就为tomcat配置了三个用户,然后输入用户tomcat和密码tomcat时会出现没有访问权限的错误,这时我们需要在配置文件中配置一个管理者的角色,加上这一行:
然后将tomcat这个用户添加为管理者的角色:将
这一行改为:
重启服务器。这个管理平台是用来管理web应用的。
四、web应用的组成结构
主目录工程下:
html、jsp、js等文件
WEB-INF目录:
classes目录:存放java类
lib目录:java运行依赖的jar包
web.xml:
context元素常用属性
docBase: 指定web应用程序的文档基目录或者war文件的路径名,可以指定目录的或war文件的绝对路径名,也可以指定相对于host元素的appBase目录的路径名。该属性是必须的。
path: 指定web应用程序的上下文路径。在一个特定的虚拟主机中,所有的上下文路径是唯一的。如果指定一个上下文路径为空字符串,则定义了这个虚拟主机的默认web应用程序,负责处理所有的没有分配给其他web应用程序的请求。
reloadable: 如果设置为true,服务器在运行时,会监听WEB-INF/classes和WEB-INF/lib目录下类的改变,如果发现类被更新则会自动重启该web应用。一般我们不建议使用。
unpackWAR: 如果为true,服务器运行web应用前将展开所有压缩的web应用程序。默认是true。
五、HTTP协议:
1.什么是http协议
客户端连上web服务器后,若想获得服务器中的某个web资源,需要遵守一定的通讯格式,http协议是用于定义客户端与web服务器通讯的格式。
使用telnet程序连上web服务器,并使用http协议获取某个页面:
(1)首先我们在命令行窗口中输入:telnet www.baidu.com 80回车,这时我们发现屏幕一片漆黑;
(2)输入ctrl+]回车;
(3)输入GET /a/login.html HTTP/1.1回车
Host:localhost
(4)最后需要连续按两次回车
2.HTTP协议简介
此协议是超文本传输协议的简写,它是TCP/IP协议的一个应用层协议,用于定义web浏览器与web服务器之间交换数据的过程。
在http1.0协议中,客户端与web服务器建立连接后只能获取一个web资源,而1.1版本可以在一个连接上获取多个web资源。
一个问题:
一个web页面中,使用了img标签引用了三幅图片,当客户机访问服务器中的这web页面时,客户端总共会访问几次服务器,即像服务器发送了几次http请求?
假如web页面内容是:
Ghhjlkl
注意:这种情况下,客户端总共像服务器发送了三次请求**。
3.http请求
客户端连上服务器后,向服务器请求某个web资源,称之为客户端像服务器发送了一个http请求。一个完整的http请求包括如下内容:一个请求行、若干消息头(请求头)、以及实体内容。
注意:空行后面还有实体内容
请求行:
请求行中的GET称之为请求方式,请求方式有很多种,常用的也就是get和post两种方式。客户端默认是get方式,若要使用post方式,可以自行定义method属性。
不管是get还是post方式,都用于像服务器请求某个web资源,其主要区别在于:
(1)如果是get方式,则可以在请求的url地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,如:
GET /mail/1.html?name=aaa&password=xxx HTTP/1.1
其特点是在url后面所带的资源是有限的,数据总量不能超过1K。
(2)如果是post方式,可以在请求的实体内容中像服务器发送数据,数据量无限制。
用于http请求中的常用头
Accept:浏览器通过这个头告诉服务器其所支持的数据类型;
Accept-Charset:浏览器通过这个头告诉服务器其所支持的字符集
Accept-Encoding:浏览器通过这个头告诉服务器其所支持的压缩格式
Accept-Language:浏览器通过这个头告诉服务器它的语言环境
Host:浏览器通过这个头告诉服务器其想访问哪台主机
If-Modified-Since:浏览器通过这个头告诉服务器其缓存数据的时间
Referer:浏览器通过这个头告诉服务器,客户端是哪个页面发过来的,用于防盗链
Cookie:以后讲
Connection:览器通过这个头告诉服务器,请求完后是断开连接还是保持连接
Date:请求日期
HTTP响应的细节-状态行
状态行:HTTP版本号 状态码 原因叙述
状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。相应状态码分为5类:
100-199: 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程
200-299: 表示成功接收并已完成整个处理过程,常用的是200
300-399: 为完成请求,客户端需进一步细化请求。例如,请求的资源已经移动到一个新地址,常用302、307和304
400-499: 客户端的请求有误,常见错误404
500-599: 服务器端出现错误,常用500
用于http响应中的常用头
Location:服务器通过这个头,告诉浏览器跳到哪个页面
Server:服务器通过这个头,告诉浏览器当前用的服务器的型号
Content-Encoding:服务器通过这个头,告诉浏览器数据的压缩格式
Content-language:服务器通过这个头,告诉浏览器回送数据的长度
Content-Type:服务器通过这个头,告诉浏览器语言环境
Refresh:服务器通过这个头,告诉浏览器何时刷新
Content-Disposition:服务器通过这个头,告诉浏览器以下载的方式打开数据
Transfer-Encoding:服务器通过这个头,告诉浏览器数据是以分块的方式回送的。
Set-Cookie:服务器通过这个头,向浏览器回送一个Cookie
Expires:服务器通过这个头,告诉浏览器回送的数据不要缓存(指定其值为-1),当然还有其他的格式,如cache-control和Pragma
Connection:服务器通过这个头,告诉浏览器是断开连接还是保持连接
Date:回送的日期
Servlet调用过程:
1.浏览器通过url地址连接web服务器;
2.浏览器像web服务器发送http请求;
3.服务器解析出客户端想访问的主机;
4.服务器解析出客户端想访问的web应用
5.服务器解析出客户端想访问的web资源;
6.如果发现servlet是第一次访问,服务器就会加载servlet,创建servlet对象;如果不是第一次访问那么就会使用以前存在的对象为这次访问服务,同时这样的话这一步和下面第七步都不会存在;
7.调用servlet的init方法;
8.调用servlet的service方法
9.servlet执行service方法,把数据写到response对象中;
10.服务器拿到response对象并将数据发送到浏览器中。
11.如果服务器停止或此web服务关闭,那么就会调用destroy方法销毁servlet对象。