Tomcat的实现原理

今天我们来介绍一下,tomcat和web项目之间的关系?

 
我们先来介绍一下Tomcat,先提出一个问题,为什么需要tomcat
    在开发java应用程序的时候,我们都要写一个main方法,用于运行开发人员所编写的java代码,这个main方法也称为应用程序的主入口。

    在开发web项目的时候呢,我们并没有类似于main方法的入口,也就是说我们所写的web项目没有办法运行。这时候服务器(tomcat)出现了,开发人员可以将web项目发布在tomcat中,借助tomcat运行。

    这时候又有一个问题,由于web项目和tomcat两者是互相独立的,那么tomcat怎么知道你要访问那些资源?
答案:反射

举个例子:
     tomcat启动的时候,会去扫描WebContent下的所有的资源,当然也包括web.xml文件,开发人员在web.xml文件中配置的servletfilterlistener等一系列组件,都会"告知"Context,包括web项目中整个项目的文件信息,Context都事先"知晓"它们的存在。
     这时候项目已经发布在tomcat中了,一切的准备工作也做好了。当用户在浏览器中输入一个网址。例如:
127.0.0.1:8080/Test/indexServlet?method=add&userName=admin

下面解释一下这个请求:

127.0.0.1:表示我们要访问的主机地址。
8080:我们要访问的端口服务。
Test:访问的项目名。
indexServlet:接受处理的角色。
method=add:要做什么事情。
userName=admin:做这件事情所需要参数,或者说 做事情所需要的"东西"。

    tomcat根据request可以获取到所有和请求有关的信息,根据这个路径就去访问到了这个项目,然后通过你访问处理角色也就是indexServlet,这时候强大的反射就派上用场了,tomcat通过反射工厂模式 根据indexServlet这个名字,去创建servlet处理类这里tomcat是如何找到indexServlet这个类的呢? 前面有提到ContextContext知晓所有的文件是否存在,这时候就可以创建出来indexSerlvet所对应的对象了。既然这个对象有了,该对象中的方法也都可以使用反射的方式去调用了。

    当我们请求完之后,tomcat肯定会给我们一个答复。response将处理的结果返回给用户。整个请求和响应之间的过程,称之为一个会话(session),整个tomcat的运行流程及用户访请求,服务器响应就讲完了。



上面一直有提到tomcat,request,response等。

下面来讲一下这几个组件的实现。
tomcat的实现,这里模拟一下实现原理

服务器端(tomcat):
1、使用SocketServer创建一个套接字连接服务。
2、监听端口号,例如这里的8080端口。
3、通过套接字服务,获取inputStream输入流,可以理解为request。
4、通过输入流(request)获取请求的信息。
5、处理获取出来的输入流信息,使用反射生成访问的处理类对象,用来调用访问的方法。
6、通过套接字得到outputStream输出流,可以理解成response,通过输出流给出响应信息。

以上就是模拟实现获取请求和给出响应的实现原理。


客户端(浏览器访问):
1、使用Socket创建一个连接,访问一个路径和一个端口号,也就是用户在浏览器中输入网址的过程。
2、使用socket获取输出流,这里的输出流可以理解成request对象。
3、如果要获取发服务器响应的内容则通过,socket获取inputStream输入流,读取管道中的数据就可以。


以上就是模拟浏览器发出请求并接受响应的过程。
    实际上在tomcat中,request和response的实现方式也是与上面模拟的十分类似;只是tomcat对其进行了封装,让开发人员可以更友好的使用。







希望以上的内容对你有所帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值