Java Servlet 运行原理分析

2022-07-28,,,,

1 servlet基本执行过程

web容器(如tomcat)判断当前请求是否第一次请求servlet程序 。

如果是第一次,则web容器执行以下任务:

  • 加载servlet类。
  • 实例化servlet类。
  • 调用init方法并传入servletconfig对象

如果不第一次执行,则:

  • 调用service方法,并传入request和response对象

web容器在需要删除servlet时(例如,在停止服务器或重新部署项目时)将调用destroy方法。

2 web容器如何处理servlet请求

web容器负责处理请求。让我们看看它如何处理请求。

  • 将用户请求与web.xml文件中的servlet进行映射。
  • 创建请求和响应对象
  • 创建新的线程,并在该线程上调用servlet的service方法
  • 在public的service方法内部调用protected的service方法
  • protected的service方法根据请求的类型调用doget方法。
  • doget方法生成响应并将其传递给客户端。
  • 发送响应后,web容器将删除请求和响应对象。该线程是继续留在线程池中还是被删除取决于服务器实现。

3 public的service方法部分源码

public的service方法将servletrequest对象转换为httpservletrequest类型,而servletresponse对象转换为httpservletresponse类型。然后,调用传递这些对象的服务方法。让我们看一下内部代码:

public void service(servletrequest req, servletresponse res) 
  throws servletexception, ioexception 
{ 
  httpservletrequest request; 
  httpservletresponse response; 
  try 
  { 
    request = (httpservletrequest)req; 
    response = (httpservletresponse)res; 
  } 
  catch(classcastexception e) 
  { 
    throw new servletexception("non-http request or response"); 
  } 
  service(request, response); 
} 

4 protected的service方法部分源码

protected的service方法判断请求的类型,如果请求类型为get,则调用doget方法,如果请求类型为post,则调用dopost方法,依此类推。让我们看一下内部代码:

protected void service(httpservletrequest req, httpservletresponse resp) 
    throws servletexception, ioexception 
{ 
  string method = req.getmethod(); 
  if(method.equals("get")) 
  { 
    long lastmodified = getlastmodified(req); 
    if(lastmodified == -1l) 
    { 
      doget(req, resp); 
    }  
.... 
//rest of the code 
  } 
}

以上就是java servlet 运行原理分析的详细内容,更多关于java servlet 运行原理的资料请关注其它相关文章!

《Java Servlet 运行原理分析.doc》

下载本文的Word格式文档,以方便收藏与打印。