当前位置: 移动技术网 > IT编程>开发语言>Java > 分析Servlet运行原理

分析Servlet运行原理

2020年03月28日  | 移动技术网IT编程  | 我要评论

原文链接:

接下来我们有必要了解下servlet的工作原理,这样才能更好地理解servlet。本文我们将以之前开发过的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  
    }  
}  

file

欢迎关注我的公众号::一点教程。获得独家整理的学习资源和日常干货推送。
如果您对我的系列教程感兴趣,也可以关注我的网站:

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网