Servlet的理解和认识

对Servlet的理解和认识

首先什么是Servlet:

      Servlet本质就是一个继承了HttpServlet的一个类文件,功能是在容器(服务器)根据客户端不同请求给予相应的响应服务.

      Servlet的运行环境是Tomcat

Servlet提供服务的过程原理(Servlet生命周期):

      生命全过程:触发: URL请求触发

                       加载: ClassLoader 加载相关需要用到的类

                       实例化: init()传递配置参数,为服务做准备

                       初始化: 调用构造方法,创建servlet类的对象

                       服务: doGet()  doPost() servlet()方法,提供服务

                       退出服务: destroy()死亡/销毁消除内存中的无用数据

            从服务器开机开始,如果没有请求触发的话,就不会有相应的servlet对象

            创建以后到结束,一直都只有一个servlet对象,然后以多线程的形式执行,多个请求到同一个servlet类

         
      API中的过程:init()//只执行一次, 第一次初始化的时候public void init(ServletConfig config) throws ServletException

                         service()public void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException

                         destroy()//webapp 退出的时候public void destroy()

    以下为Servlet生命周期图:

   

  Servlet 编程接口 :

           GenericServlet是所有Servlet的鼻祖

           用于HTTP的Servlet编程都通过继承 javax.servlet.http.HttpServlet 实现

           请求处理方法(应对Http协议请求):1、doGet        响应Get请求,常用

                                                      2、doPost        响应Post请求,常用

           实例的个数:在非分布的情况下,通常一个Servlet在服务器中有一个实例

 Servlet的多线程机制 :

           Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器负责的。
           当客户端第一次请求某个Servlet时,Servlet 容器将会根据web.xml配置文件实例化这个Servlet类。当有新的客户端请求该Servlet时,一般不会再实例化该Servlet类,也就是有 多个线程在使用这个实例。
           Servlet容器会自动使用线程池等技术来支持系统的运行
           

 转自:https://www.cnblogs.com/lwxalxy/p/4674951.html

1.servlet的工作过程以及容器的作用

Servlet没有main()方法,他们受控与另外一个java应用,这个java应用称为容器(Container)。Tomcat就是这么一个容器,web服务器应用(如Apache)得到一个指向Servlet的请求时,服务器不是把这个请求交给Servlet本身,而是交给部署该servlet的容器。要由容器向servlet提供HTTP请求和响应,而且是由容器调用servlet的方法(doGet()和doPost())。容器运行多个servlet线程来处理对同一servlet的多个请求。(对每个请求分配一个线程,而不是每个客户)

容器的作用:
1)通信支持。利用容器提供的方法,web服务器能轻松的与servlet进行通信。
2)生命周期管理。容器控制着servlet的生与死。它会负责加载类,实例化,初始化,调用servlet的方法以及使servlet能够被垃圾回收。
3)多线程支持。容器会自动的接受每个servlet请求,创建一个新的java线程。针对每个请求,如果servlet已经运行完相应的HTTP方法,线程就会结束。但是我们同时也得考虑线程的安全性。
4)JSP支持。负责将JSP翻译成真正的java。

容器是如何处理用户请求的了?
1)用户点击一个链接,指向一个servlet而不是一个静态页面。
2)web服务器接到这个请求后转发给容器。容器接着创建两个对象:HttpServletRequest和HttpServletResponse。
3)容器根据请求中的URL找到相应的servlet,为这个请求创建一个线程,并把请求对象HtttpServletRequest和响应对象HttpServletResponse传递给这个servlet线程。
4)线程接下来调用service()方法,根据请求的不同,service()方法调用doGet()和doPost()方法。
5)doGet()方法生成动态页面,并把这个页面塞到响应对象里。
6)service()方法结束,随之线程结束,容器把响应对象装换为一个HTTP相应,发送给客户,然后删除请求和响应对象。
2.Servlet的生命周期
注意他的一生都是由容器控制的。servlet一生中只有一个实例出现,但是有多个线程出现。
加载类 Servlet .class文件
实例化 构造函数运行
初始化 容器调用 init() 方法(一生只调一次)
service方法? servlet一生主要在这里度过
销 毁? 销毁实例之前调用 destroy() 方法
可回收? 等待垃圾回收等待垃圾回收
3.Servlet一生中的三大重要时刻
1)init()方法:在servlet实例被创建后调用,可以覆盖此方法做一些初始化的工作,比方说得到一个数据库连接。
2)service()方法:当客户请求到来时,容器会创建一个新的线程,调用servlet的service()方法。servlet的一生基本都在这里度过。我们一般不要覆盖此方法。
3)doGet或者doPost()方法:service方法根据请求的HTTP方法,来调用doGet()或者doPost()方法。我们在开发servlet时肯定要覆盖此方法。每次运行doGet()或者doPost()方法,它都在一个单独的线程
中。
4.容器(tomcat)在启动时会做什么?
容器在启动时,会根据相应的部署文件去寻找servlet文件。
5.为什么要有init方法了?难道不能将init代码放在构造函数中么?
因为让一个普通的java类成为servlet文件时容器付出的代价也挺大,比如说内存分配。在没有调用init方法时他还是一个普普通通的java对象,只有在用户使用时才再让他称为servlet这样对资源的利
用比较合理,注意:init方法是在第一个用户调用此servlet时被触发。 

转载于:https://www.cnblogs.com/mhzhou-whyj/p/9437993.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值