servlet类分级:
1.ServletConfig接口类:理解为读取servlet配置的类,里面有四个抽象方法如下:
①getServletName:获取servlet在web.xml中的名字
②getServletContext:获取Servlet上下文,相当于web项目管理所有servlet的对象,可以读取web.xml中配置的全局参数,也可以通过一个servlet设置参数,另外一个servlet读取参数,达到servlet相互沟通的的目的。(转载:具体可以看这里:https://blog.csdn.net/qq_36371449/article/details/80314024)
③getInitParameter:通过参数名获取值
④getInitParameterNames:得到一个<servlet>标签里面所有的参数名字
2.Servlet接口:定义了5个方法,理解为定义了一个servlet的生命(动作)和信息
init,service,destroy三个和servlet生命周期相关的方法,以及一个得到serlvet配置的方法(getServletConfig)和得到servlet(getServletInfo,这个方法在子类中被实现为返回一个空字符串)信息的方法
3.GenericServlet:抽象类,实现了ServletConfig接口和Servlet接口中方法,重写了Servlet类的init()和destroy(),将service方法定义为抽象,强迫子类实现它。
有参init方法和无参init方法的区别:当容器初始化servlet时会调用有参的init()方法(可能和Servlet接口中只有有参的init方法有关吧),如果只有有参init,而没有无参init时,当人们需要重写init方法进行一些其他的初始化,就只能重写有参init方法,如果忘了调用super.init()(执行this.config=config),那么当使用getServletConfig()方法时,就会出现“NullPointerException”异常,所以在加一个无参init函数,而有参init调用无参init,人们只需重写无参init进行其他初始化即可,这样servlet被初始化时,先调用有参init,然后有参init调用无参init,即你重写的init方法。
4.HttpServlet:抽象类,继承了GenericServlet类,所以可以使用GenericServlet类中的方法,重写了servse方法,通过getMethod()方法来决定使用doGet()或doPost()等方法。
5.自己定义的servlet类:一般继承于HttpServlet,通过继承HttpServlet,可以使用上述4个类中大部分方法,我们只需要根据需要重写其中的方法即可,service方法不用重写。