Servlet初步学习

Java Web应用程序的开发过程
•开发Java Web应用程序的大致流程
–设计目录结构:根据具体业务需要,遵照规范的目录结构设计好Web应用程序的目录结构。
–编写Web应用程序代码:编写业务逻辑所需的Java代码。
–编写部署描述文件:把Servlet、初始化参数等定义到部署描述文件web.xml中。
–编译代码:把编写好的Java源代码编译成字节码。
–将Web应用程序打包:把整个Web应用程序打成War包,以方便部署。

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

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

servlet的工作模式

  客户端发送请求至服务器

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

  服务器将响应返回客户端

Servlet初步学习_第1张图片

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

servlet生命周期:

•在代码中,Servlet生命周期由接口javax.servlet.Servlet定义。所有的Servlet必须直接或间接地实现javax.servlet.Servlet接口,这样才能在Servlet容器中运行。Servlet提供service方法、init方法和destroy方法等。在Servlet的生命周期中,运行javax.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()方法。

  (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() 方法。


Servlet如何被加载和实例化
•Servlet容器负责实例化和加载Servlet,这个过程可以在Servlet容器加载时执行,可以在Servlet响应请求时执行,也可以在两者之间的任何时候执行。
•Servlet 容器加载完Servlet之后,首先必须初始化它。初始化时Servlet调用init()方法,该方法可以以一个ServletConfig类型的引用为参数,该参数可以让Servlet从部署描述符文件中读取一些键值对形式的参数值,以初始化这些数据,ServletConfig对象的引用还可以让Servlet接受ServletContext对象。



你可能感兴趣的:(Servlet初步学习)