一.Tomcat安装
(1)先安装JDK,并配置环境变量JAVA_HOME。Tomcat服务器的配置需要JDK的JAVA_HOME环境变量。
并在系统path变量添加%JAVA_HOME%/bin。
(2)下载安装Tomcat安装文件,并配置CATALINA_HOME环境变量。
(3)测试是否安装成功,打开tomcat/bin目startup.sh,运行服务器。在浏览器输入http://localhost:8080。出来猫就成功了。
二.Eclipse配置Tomcat
(1)下载Eclipse,解压即可,不需安装。
(2)Eclipse添加Tomcat,打开Eclipse工作界面,选中windows->preferences->
server->runtimr->add添加Toomcat版本,并填写Tomcat路径。
(3)成功。
三.Tomcat基本配置
Tomcat是根据server.xml的配置启动的。根目录下conf/server.xml。
Server.xml标签有:
Server>、<Service>、<Connector>、<Engine>、<Host>、<Context>、<logger>、<Value>、
其中最重要的connector标签,它有以下属性:
<Connector>元素
<Connector>是直接与用户交互的组件,负责接受用户请求和向客户返回响应结果。
在server.xml中的connector标签里可以配置服务器的线程数,最大连接数,等待超时时间等。
属性说明:
属性 |
说明 |
port |
Connector所监听的端口。在浏览器中可以通过输入url:port的方式提交给对应的Connector。因为浏览器的默认端口是80,所以如果把Connector的port设成80的话,可以直接使用url进行访问,不用在后边再跟一个端口号。 |
protocol |
设定Http协议,默认是HTTP/1.1 |
minThreads |
服务器启动时创建的处理用户请求的线程数 |
maxThreads |
可以创建的最大的处理用户请求的线程数 |
minSpareThreads |
最小备用线程数 |
maxSpareThreads |
最大备用线程数 |
acceptCount |
当所有可以使用的处理请求的线程都被用光时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,而返回Connection refused错误。 |
redirectPort |
服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号。(即当请求是https时,将它转发到的端口) |
enableLookups |
如果为true,表示支持域名解析,则可以在web应用中通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名;若为false则不进行DNS 查询,而是返回其ip地址。默认值为true。 |
connectionTimeout |
等待超时的时间数(以毫秒为单位),如果为-1表示不限制客户连接的时间。 |
四.Tomcat服务器虚拟目录映射
Web应用开发好后,若想供外界访问,需要把web应用所在目录交给web服务器管理,这个过程称之为虚似目录的映射。
tomcat服务器会自动管理webapps目录下的所有web应用,并把它映射成虚似目录。
只需要将写好的项目放在tomcat服务器webapps目录下,外界就可以直接访问。
例如:把F盘下的JavaWebDemoProject这个JavaWeb应用直接copy到tomcat服务器webapps目录中,如下图所示:
此时Tomcat服务器就会自动为JavaWebDemoProject这个JavaWeb应用映射一个同名的虚拟目录"/JavaWebDemoProject",然后就可以使用浏览器访问这个JavaWeb应用的资源了,
五.浏览器与服务器的交互过程
(1)浏览器发送http报文:
浏览器将http数据流发送到服务器上,服务器上监听相应端口的软件,得到http请求体(数据流)
http请求报文就是浏览器告诉W服务器要访问服务器里面的哪个Web应用下的Web资源。形式如下:
其中的,http请求体,accept/user-agent/host/connection等属性,是浏览器自动生成的。
换句话说就是,浏览器会自动生成http header。
关于浏览器自动生成http header,可以参考知乎回答http://www.zhihu.com/question/34603729
(2)服务器收到http请求报文,返回http响应报文
服务器接收到浏览器传输的数据后,开始解析接收到的数据,解析"GET /JavaWebDemo1/1.jsp HTTP/1.1"里面的内容,知道客户端浏览器要访问的是JavaWebDemo1应用里面的1.jsp这个Web资源,并读取1.jsp这个Web资源里面的内容,将读到的内容再以Stream(流)的形式传输给浏览器,如下图所示:
(3)浏览器拿到http响应报文后,进行解析。
服务器发送回来的数据:
1HTTP/1.1 200 OK 2Server: Apache-Coyote/1.1 3Content-Type: text/html;charset=ISO-8859-1 4Content-Length: 102 5Date: Mon, 19 May 2014 14:25:14 GMT 6 7<html> 8<head> 9<title>JavaWebDemo1</title>10</head>11<body>12 JavaWebDemo1 1314</body>15</html>
(4)浏览器对静态资源的读取
注意:如果http响应报文中,传回来的html代码包含jpg,css,js等静态资源文件。浏览器这时会一边渲染html代码,同时再次发送http请求来获得这些静态资源。
例如,服务器返回的html代码包括
图片http://static.ak.fbcdn.net/rsrc.php/z12E0/hash/8q2anwu7.gifhttp://static.ak.fbcdn.net/rsrc.php/zBS5C/hash/7hwy7at6.gif…CSS 式样表http://static.ak.fbcdn.net/rsrc.php/z448Z/hash/2plh8s4n.csshttp://static.ak.fbcdn.net/rsrc.php/zANE1/hash/cvtutcee.css…JavaScript 文件http://static.ak.fbcdn.net/rsrc.php/zEMOA/hash/c8yzb6ub.jshttp://static.ak.fbcdn.net/rsrc.php/z6R9L/hash/cq2lgbs8.js
读取这些静态文件,都会经历一个类似读取html代码的过程。
需要记住的是,这些静态资源,浏览器可以对它们进行缓存。服务器的响应报文中包含了静态文件的保存期限。这样,当下次浏览器访问相同网页时就可以在浏览器内存中读取这些静态资源,从而加快了网页读取速度。
概括:服务器先返回html代码,浏览器然后再次请求静态资源。俩步骤。
浏览器与服务器交互过程,具体可考http://www.360doc.com/content/13/0809/16/13264825_305872743.shtml
六.Tomcat jar包
在tomcat的根目录lib文件夹下,所有的jar包以供服务器上所有应用共同使用。
jar包放在WEB-INF下比放在tomcat下有什么好处?
tomcat自动加载WEB-INF/lib下的jar包。
在Tomcat的lib目录下,这些jar都是会被所有的部署应用共享使用到的,而单独应用的WEB-INF下的,是自己独立使用的。如果放到Tomcat下,可能多个应用之间对于某个项目不同版本有依赖,这个时候就比较难处理。毕竟ClassLoader只能加载一份。
七.WEB应用的组成结构
一张图说明解决
图片来自http://www.cnblogs.com/xdp-gacl/p/3734395.html,感谢作者