欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java Servlet 运行原理分析

程序员文章站 2022-04-01 12:40:48
1 servlet基本执行过程web容器(如tomcat)判断当前请求是否第一次请求servlet程序 。如果是第一次,则web容器执行以下任务: 加载servlet类。 实例化servlet类。...

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 运行原理的资料请关注其它相关文章!