Servlet的执行流程

在这里插入图片描述

具体流程:

1)客户端主机通过请求中的IP找到服务器主机,并建立链接;
2)客户端浏览器将表单中的数据封装在HTTP请求报文中,并将该请求报文发送给服务器;
3)服务器接收到客户端浏览器发送过来的请求报文,解析请求报文中的url(例如url为:http://localhost:8080/MyDemo/helloServlet):
  (1)解析url,得到端口号8080,虚拟目录MyDemo,资源请求路径helloServlet。
  (2)服务器(可能是一台主机,也可能是计算机集群)根据端口号可以找到客户端浏览器要想问的应用程序(服务器上运行了许多应用程序,没有端口号,就不知道浏览器要访问的是哪个应用程序了),简单来说就是通过端口找到Web容器(Tomcat);
  (3)服务器根据虚拟目录MyDemo找到从Tomcat部署的众多Web应用找到浏览器正在访问的那个Web应用;
  (4)服务器根据资源请求路径helloServlet在Web应用的WEB-INF文件夹的web.xml文件中找到浏览器要访问的Servlet的全类名
在这里插入图片描述
4)服务器找到Servlet的全类名后,通过反射创建对象,同时也创建了ServletConfig(里面存放了一些初始化信息,这些信息这可以在init-para标签对中进行配置,Tomcat在创建ServletConfig对象之后,会将init-param标签对中的值设置到这个ServletConfig对象中,用于进行初始化操作);
在这里插入图片描述
5)对象创建好之后,首先要执行init()方法,但是我们发现我们自定义类下没有init方法,所以程序会到其父类HttpServlet里找。但是我们发现HttpServlet类里也没有init()方法,所以继续向上找,即向其父类GenericServlet中继续寻找,在GenericServlet中我们发现了init方法,则执行init方法(对接口Servlet中的init方法进行了重写)
在这里插入图片描述
注意:在GenericServlet中执行public void init(ServletConfig config)方法的时候,又调用了自己无惨无方法体的init()方法,其目的是为了方便开发者,如果开发者在初始化的过程中需要实现一些功能,可以重写此方法;

6)调用service()方法
  (1)服务器(Tomcat)会先创建两个对象:ServletRequest请求对象和ServletResponse响应对象,其中ServletRequest和ServletResponse是Servlet定义的接口,而具体的实现类是由Tomcat进行实现的,ServletRequest和ServletResponse的实现类为:RequestFacade类和ResponseFacade;
  (2)服务器(Tomcat)将HTTP请求报文封装在ServletRequest对象中,并与ServletResponse对象一个传递给service()方法;
  (3)接着服务器会默认在我们写的类里寻找service(ServletRequest req, ServletResponse res)方法,但是HelloServlet类中不存在,那么会到其父类中寻找;
在这里插入图片描述
7)使用ServletResponse对象向浏览器返回响应消息
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值