Servlet是一个Java应用程序,运行在服务器端,用来处理客户端请求并作出响应的程序。
Servlet多线程体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器负责的。
Servlet运行原理
当客户端第一次请求某个Servlet时,Servlet容器将会根据web.xml配置文件实例化这个Servlet类,此时它贮存于内存中。。当有新的客户端请求该Servlet时,一般不会再实例化该Servlet类,也就是有多个线程在使用这个实例。
①客户端向服务器端发出请求;
②这个过程比较重要,这时Tomcat会创建两个对象:HttpServletResponse和HttpServletRequest。并将它们的引用(注意是引用)传给刚分配的线程;
③线程开始着手接洽servlet;
④servlet根据传来的是GET和POST,分别调用doGet()和doPost()方法进行处理;
⑤和⑥servlet将处理后的结果通过线程传回Tomcat,并在之后将这个线程销毁或者送还线程池;
⑦Tomcat将处理后的结果变成一个HTTP响应发送回客户端,这样,客户端就可以接受到处理后的结果了。
tomcat解析URL
当我们在客户端向后台服务器发出请求时:URL中会包含我们要访问的页面
a) 首先来看URL中包含的信息:”协议” + “端口号” + “路径(项目名称+文件路径)”
Tomcat启动后,监听我们的8080端口,当有Url请求发过来之后,解析出项目名称 abingtest,然后到webapps目录下搜索到该项目文件夹。
b) 项目文件找到后,开始寻找类文件。
这个时候Tomcat去Web.xml文件中寻找<servlet-mapping> 配置节中包含”servlet/FirstServlet”字符串,进而找到该类文件所在的位置。
请求进入servlet类
我们需要重写doGet或doPost方法,用request对象接收参数,在我们的业务逻辑处理完毕后用response对象返回到前台,这个时候servlet线程就完成了任务
Servlet生命周期
servlet类的初始化由tomcat容器来管理,servlet容器的三种方法,init、service、destroy方法
当前端能接受请求,tomcat通过解析URL地址来初始化tomcat容器,调用init实例化一个servlet线程,在通过参数的传递方式调用dopost和doget方法处理请求,把处理完毕的数据通过httpservletresponse对象返回前台,这个时候servlet线程任务完成,线程销毁,servlet容器调用destroy方法释放servlet对象,由JVM进行垃圾回收处理,如果再次接收到请求servlet容器会创建新的servlet实例
参考博文: