1. Servert和Servlet容器

  1、用户/客户端只能向服务器请求静态网页。如果用户想要根据自己的输入来读取网页,这种方式就不能满足用户的要求。

  2、Servlet是服务器端的Java应用程序,可以产生动态Web页面。

  3. Servlet容器就是用来装Servlet的。 其基本思想是在服务器端使用Java来动态生成网页。因此,Servlet容器是Web服务器和servlet进行交互的必不可少的组件。

  4. Servlet是在javax.serlvet包中定义的一个接口。它声明了servlet生命周期中必不可少的三个方法init()、service()和destroy()。每个servlet(无论是在SDK中定义的,或是自定义的)都必须实现这三个方法,而且由服务器在特定的时刻调用。

  5. 自定义Servlet类继承HttpServlet抽象类,HttpServlet抽象类继承自GenericServlet抽象类,GenericServlet抽象类实现了Servlet、ServletConfig和Serializable接口。

  2. 加载及实例化

  Servlet容器负责加载和实例化Servlet。

  当客户端第一次给服务器发送该Servlet请求时,Servlet容器会加载并创建Servlet实例,(注意:默认情况下不是Tomcat服务器或服务器上的Web应用启动的时候加载并实例化Servlet)。当客户端(可以是非第一次请求的客户端)再次向服务器发送该Servlet请求时,服务器会从内存中查找该Servlet实例,并用找到的Servlet实例处理用户请求。

  在该过程中,Servlet容器会创建一个ServletConfig对象,该对象包含了Servlet的初始化配置信息。根据用户请求的URL地址,Servlet容器会根据配置信息查找该请求对应的Servlet类,由容器创建并管理该Servlet。

  3. 生命周期的讲解

  package com.jd.servlet;

  import java.io.IOException;

  import javax.servlet.ServletException;

  import javax.servlet.http.HttpServlet;

  import javax.servlet.http.HttpServletRequest;

  import javax.servlet.http.HttpServletResponse;

  public class TestServlet extends HttpServlet {

  private static final long serialVersionUID = 1L;

  /*

  * 1. 创建srtvlet对象,不随tomcat启动而创建,在发送请求时才能创建对象,以后都不再创建(与客户端无关),在xml中配置load-on-

  * startup为非0,即随服务器的启动创建servlet,郑州不 ?孕 不 ?育医 院:wapyyk.39.net/zz3/zonghe/1d427.html

  *

  * 2. 初始化,在servlet对象创建后立即执行该init()方法,在一次生命周期 中只调用一次init方法。

  *

  * 3. 处理请求,任何请求都会先到达service(在其内调用doget和dopost方法)

  *

  * 4. 销毁,正常关闭服务器或者重新发布项目时

  */

  // 获取初始值,在xml文件中配置init-param,其内数据为键值对形式。必须放在load-on-startup配置之前,在init方法中用getInitParameter获取

  // 配置context-param(可复用的初始化参数),通过getServletContext()调用getInitParameter()方法

  public TestServlet() {//

  System.out.println("TestServlet");

  }

  @Override

  public void init() throws ServletException {

  String name = getServletContext().getInitParameter("name");

  String age = getInitParameter("age");

  System.out.println("init" + ":" + name + ":" + age);

  }

  @Override //

  protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {

  System.out.println("service");

  super.service(arg0, arg1);

  }

  @Override

  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

  System.out.println("dopost");

  }

  @Override

  protected void doGet(HttpServletRequest request, HttpServletResponse response)

  throws ServletException, IOException {

  System.out.println("doget" + this);

  }

  @Override

  public void destroy() {

  System.out.println("destory");

  }

  }

  web.xml的文件如下:

  springsecond

  index.jsp

  name

  wangenzhong

  TestServlet

  TestServlet

  com.jd.servlet.TestServlet

  age

  12

  1

  TestServlet

  /TestServlet