servlet入门:servlet介绍及生命周期

内容提要:什么是servlet?
Servlet 是实现特殊接口的 java 类,是运行在服务器端的Java应用程序,具有独立于平台和协议的特性。
servlet的工作模式
  客户端发送请求至服务器 
  服务器启动并调用Servlet,Servlet根据客户端请求生成响应内容并将其传给服务器 

什么是servlet?

Servlet 是实现特殊接口的 java 类,是运行在服务器端的Java应用程序,具有独立于平台和协议的特性。

servlet的工作模式

  客户端发送请求至服务器

  服务器启动并调用Servlet,Servlet根据客户端请求生成响应内容并将其传给服务器

  服务器将响应返回客户端

servlet的工作模式

可见servlet担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。

servlet生命周期:

servlet的生命周期由部署servlet的容器来控制,当一个请求映射到一个servlet时,该容器执行下列步骤。

(1) init() 方法

 它是在服务器装入 Servlet 时执行的。   在 Servlet 的生命期中,仅执行一次 init() 方法。无论有多少客户机访问 Servlet,都不会重复执行 init() 。

  可以覆盖init() 方法,典型应用:初始化数据库连接。

    缺省的 init() 方法设置了 Servlet 的初始化参数,并用它的 ServletConfig 对象参数来启动配置, 因此所有覆盖 init() 方法的 Servlet 应调用 super.init() 以确保仍然执行这些任务。


  (2) service() 方法

  service() 方法是 Servlet 的核心。每当一个客户请求一个HttpServlet 对象,该对象的service() 方法就要被调用,而且传递给这个方法一个"请求"(ServletRequest)对象和一个"响应"(ServletResponse)对象作为参数。 在 HttpServlet 中已存在 service() 方法。缺省的服务功能是调用与 HTTP 请求的方法相应的 do 功能。例如, 如果 HTTP 请求方法为 GET,则缺省情况下就调用 doGet() 。Servlet 应该为 Servlet 支持的 HTTP 方法覆盖 do 功能。因为 HttpServlet.service() 方法会检查请求方法是否调用了适当的处理方法,不必要覆盖 service() 方法。只需覆盖相应的 do 方法就可以了。

  (3)doGet()方法

  当一个客户通过HTML 表单发出一个HTTP GET请求或直接请求一个URL时,doGet()方法被调用。与GET请求相关的参数添加到URL的后面,并与这个请求一起发送。当不会修改服务器端的数据时,应该使用doGet()方法

                                                                         -------------------------这里我插一句,doGet和doPost为表单提交数据的两种方法。

  (4)doPost()方法

  当一个客户通过HTML 表单发出一个HTTP POST请求时,doPost()方法被调用。与POST请求相关的参数作为一个单独的HTTP 请求从浏览器发送到服务器。当需要修改服务器端的数据时,应该使用doPost()方法

   doGet(),doPost()和service()的联系:

   doGet()的调用顺序:1.service() 2.super.service 3.doGet (doPost类似)。可见service方法是核心。

   doGet(),doPost() 常见异常:HTTP Status 405-HTTP method POST is not supported by this URL

   解决方法:增加doPost() 方法即可。

  (5) destroy() 方法

  destroy() 方法仅执行一次,即在服务器停止且卸装Servlet 时执行该方法。典型应用:管理服务器端资源。例如,如果 Servlet 在运行时会累计统计数据,则可以编写一个 destroy() 方法,该方法用于在未装入 Servlet 时将统计数字保存在文件中。另一个示例是关闭数据库连接。

  当服务器卸装 Servlet 时,将在所有 service() 方法调用完成后,或在指定的时间间隔过后调用 destroy() 方法。

 

今天面试被提到的doGet()和doPost()两个方法的不同,还有以后可能被问到的问题,都被我用红色注明了。

还被提及到抽象函数和接口的区别,以及抽象函数和接口是否可实例化,如果可实例化,那又该怎么办?

恒心破万卷,加油!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值