在servlet体系中,除了实现servlet接口,还可以通过继承GenericServlet和HttpServlet两种抽象类实现编写。

接口就是对行为的规范。

一、servlet接口

servlet接口是整个servlet的核心。它是所有servlet类必须直接或间接实现的接口,其内部需要实现的5个方法分别关乎着我们servlet生命周期和业务实现。

5个方法如下所示:

1.init(...)当Servlet第一次被请求时,servlet容器就会开始调用这个方法来初始化一个servlet对象出来

2.service(...) 每当请求servlet时,servlet容器就会调用这个方法

3.destory(...) 当要销毁servlet时,servlet容器就会调用这个方法

4.getServletInfo(...) 这个方法会返回servlet的一段描述,可以返回一段字符串

5.getServletConfig(...)  这个方法会返回servlet容器传给init()方法的servletconfig对象

二、servlet的生命周期

由于自己直接或间接创建的servlet并没有main方法,不能独立运行,它的运行完全有servlet容器进行控制和调度(反射的方式进行方法运行)。servlet生命周期可被定义为从创建直到毁灭的整个过程 。

 我们创建一个servlet类来实现一个servlet接口,代码如下所示:

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class servlet1 implements Servlet{

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		System.out.println("销毁时调用");
	}

	@Override
	public ServletConfig getServletConfig() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getServletInfo() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void init(ServletConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		System.out.println("初始化时调用");
	}

	@Override
	public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("开启服务时调用");
	}

}

生命周期示意图如下图所示:

 3.GenericServlet抽象类

GenericServlet实现了servlet接口里的init()方法和destroy()方法,简化了我们的开发流程。

我们继承GenericServlet类 后只需要实现service方法就可以

4.HpptServlet抽象类

 HpptServlet是继承了GenericServlet类,也是一个抽象类。因为我们的请求一般都是http请求,为了匹配http请求,于是就有了httpservlet。为了我们能够更加方便的处理来着浏览器的数据和将数据会写到浏览器,httpservlet类引用了HttpServletRequst和HttpServletResponse两个类来处理相应数据。

里面封装了两个根据请求方式进行处理的方法,分别是doGet()方法和doPost()方法,根据前台不同的请求方式运行其中不同的方法。

servlet接口继承如下图所示:

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐