目录
- B/S的交互模型
- Tomcat的组成结构
B/S的交互模型
比如说:客户像服务器请求一个页面,希望页面返回他传入数字的平方。当客户端把数据(那个数字)和请求提交给Web服务器后,服务器会把该请求,分配到Web应用中的某一个Java程序去处理,然后该程序会返回给服务器一个页面,该页面上会显示进行了处理后的数据(让客户端传过来的数进行平方运算),最后服务器把页面发送给客户端。
我们来看图中三种对象,都分别做了什么事情
客户端:①发送请求。②接受响应。
Web服务器:①把请求交给具体的程序去处理。②得到程序处理后的结果。
Web应用:①接受原始数据。②处理数据并返回给服务器。
那么这么对象在使用中的真实实例有哪些?
首先客户端,在B/S架构中无疑就是浏览器。
Web服务器专门用来处理HTTP请求,常见的就是我们说的Tomcat,Apache和Nginx。
Web应用就是我们用来处理数据的Java程序。
服务器和应用之间,往往是不同是人去开发,为了让这2个系统协作运转,就需要制定一个标准。而这个标准,就是SUN公司的Servlet接口,同时SUN公司也规定了其它一些制约,合称为Servlet规范。有了这个标准,我们的web应用只需要去实现Servlet接口,而服务器只需要调用实现Servlet接口的类,就可以完成交互了。
这就是为什么我们把处理数据的程序,也叫Servlet程序,就是因为他们都需要实现Servlet接口。而这个Java项目(web应用)存放的地方,也可以被称为Servlet容器。
而Tomcat,既有Web服务器组件,又有Servlet组件,所以上面的图可以画成这个样子:
Tomcat的组成结构
从客户端过来的请求,首先要和Tomcat做一个连接,这就是由我们的连接器——Connector去做的。获得连接后,服务器得到的是HTTP格式的请求对象,还将被适配器转换成servletRequest对象,继而能够交给我们的容器去进行处理。
也就是说我们把整个Tomcat都看成一个server(服务器+javaweb应用),连接器的部分负责进行HTTP连接,而容器部分进行对servlet的管理。通过查看Tomcat中conf目录下的server.xml。也可以看出其组成结构。
我们通过一个例子来看一下一个请求是如何被执行的。假设客户端请求了
http://127.0.0.1:8080/
,他之所以能访问到是因为:
1.我们在<Connector>
中设置了Tomcat服务的监听端口为8080,并且该服务位于127.0.0.1这台计算机上,且使用的协议是HTTP
2.我们的<Engine>
会去找一个主机来执行这个操作
可以看出,他默认找是名字叫"localhost"的主机:
也就是说,如果我们直接访问8080端口,不指定项目目录,如:http://127.0.0.1:8080/
就会自动使用默认主机,而默认访问的页面则是Host标签appBase属性中写的目录(webapps)下ROOT项目中的index页面。