java程序监听一直运行_Java程序是如何能在Tomcat里常驻运行并监听HTTP请求的?

昨晚想到一个问题,服务端程序是如何能在服务器里常驻运行并监听请求的?

比如我们本地运行一个Java程序是通过它的main函数,main执行完就执行完了,执行完Java程序就结束了。但是我们在项目中写的Java程序没有main入口,那么它在服务器上是怎么运行起来的?又如何能够一直保持运行并监听http请求并响应的?

遂看了一些资料和其他人的解释。

回想一下,自从我们学了servlet之后,就再也没有写过main函数了。

接下来简单解释一下,毕竟深入到tcp,http,socket咱也不会。

我们写servlet程序要先写一个servlet类,这个类 implement HttpServlet。HttpServlet又implement 了Servlet。

被实现的Servlet是一个接口,接口是干什么的?规范!Servlet就是一个规范!

里面有5个声明周期方法。其中init, service, distory代表了初始化,处理程序,销毁。

我们写的业务逻辑都写在service方法中,该方法接收request和response。

但是request分为多个类型,get/post/put/delete等等等。虽然我们自己可以区分,但是HttpServlet帮我们做了区分,它实现了Servlet接口,并增加了结果抽象方法:get(), post()等方法,在HttpServlet实现的service方法中根据请求类型分别调用了这几个方法。

这也就是为什么我们implement HttpServlet的时候要实现get和post等方法。

说到这里还是没有说明,Java程序(Servlet)是怎么在服务器中运行并常驻的。

以上的Servlet接口、HTTPServlet抽象类都是定义的一种规范,我们在这个规范上写我们的业务逻辑。

写好了业务逻辑(Servlet)就需要部署了,就是要把我们的Servlet类和URL在web.xml中定义一下。为什么是在web.xml中定义,不能在web2.xml或者web3.xml中定义?又为什么要在xml中定义呢?

又为什么项目还要被放到Tomcat的WEB-INF、lib、classes目录下呢,甚至WEB-INF目录的名字还必须是大写。

因为这都是规范!

Tomcat作为一个服务器容器,它接收、处理、封装http请求,并将其封装成Request对象,然后传给Servlet的service方法。

Tomcat在start的时候会检查web.xml中定义的Servlet的名称,类名,URL。然后使用反射等技术动态加载这些Servlet类到它的容器中。

Tomcat接收到一个请求之后,拿到URL,用URL找到容器中对应的Servlet类,将处理过后的Request对象交给Servlet中的Service方法,然后接下来就是我们的业务逻辑。

以上有两个规范:

1. Servlet的规范:告诉Tomcat,jetty等支持Servlet的服务器,我有5个方法,其中service方法要接收这样的格式的request对象。

2. Tomcat的部署规范:Tomcat启动之后,要从特定名称的文件夹下面,找到特定的文件名,文件又必须是按照某种特定的规则来写的,比如web.xml文件。

所以不是Servlet运行并常驻在服务器,而是Tomcat有一个main方法,是它一直保持运行,并在接收到请求的时候,动态加载并调用我们写好的Servlet实现类。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值