Servlet 是运行在Web服务器上的一个java类,通过HTTP协议接收客户端的请求,同时向客户端一个响应。Sun公司提供的
动态web资源开发技术(Sun公司在其API中提供了一个servlet接口),本质是上一段java小程序,可以将Servlet加入到Servlet容
器中运行(Tomcat)
【Servlet生命周期】
由于Servlet 没有main方法,Servlet生命周期方法的调用受控于容器,即容器管理Servlet的生命周期,包括初始化
(init)、服务调用(service)和 销毁(destroy),Tomcat就是一个Servlet容器
* 通常情况下,服务器会在Servlet第一次被调用时创建该Servlet类的实例对象(servlet出生);一旦被创建出来,该
Servlet实例就会驻留在内存中,为后续请求服务;直至Web容器退出,Servlet实例对象才会被销毁(servlet死亡)。
* 在Servlet的整个生命周期内,Servlet的init方法只有在servlet被创建时被调用一次。
* 而对一个Servlet的每次访问请求都导致Servlet引擎调用一次servlet的service方法。对于每次访问请求,Servlet引擎
都会创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传递给它
调用的Servlet的service()方法,service方法再根据请求方式分别调用doXXX方法。
* servlet被销毁前,会调用destroy() 方法。
【Servlet接口实现类继承结构】
Servlet接口:SUN公司定义了两个默认实现类:GenericServlet和HttpServlet(定义了一个servlet应该具有的方法,所
有的Servlet都应该直接或间接实现此接口)
|
|----GenericServlet:对Servlet接口的默认实现,通用Servlet,这是一个抽象类,其中的大部分方法都做了默认实
现,只有service方法是一个抽象方法需要继承者自己实现
|
|----HttpServlet:对HTTP协议进行了优化的Servlet(比Servlet接口的功能更为强大),继承自GenericServlet
类,并且实现了其中的service抽象方法 ,默认的实现中判断了用户的请求方式,并根据请求方式的不同分别调用不同的doXX()
方法(如为GET请求,则调用HttpServlet的doGet方法,如为Post请求,则调用doPost方法)(通常我们直接继承HttpServlet即
可,而避免直接去实现Servlet接口)
【ServletConfig】(代表当前Servlet在web.xml中的配置信息, 不想在servlet中写死的内容可以配置到此处)
【ServletContext】(WEB容器在启动时,会为每个WEB应用程序创建一个对应的ServletContext对象,代表当前web应用)
【Filter过滤器】(加强版Servlet)
Filter可认为是Servlet的一种加强版,主要用于对用户的请求进行预处理和对HttpServletResponse进行后处理,是个典型
的处理链(完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理生成响应,最后Filter再对服务器响应进行
后处理)
* 创建 Filter 两个步骤:
(1)创建Filter处理类(实现Filter接口)
(2)web.xml文件中配置 Filter
* 创建 Filter 两个用途:
(1)解决中文乱码
(2)权限控制
【Listener监听器】
Web容器中的内部事件如Web应用开始,停止,用户session开始,结束,用户请求到达等,对于开发者都是透明的。
Servlet API提供了大量的监听器来监听内部事件,这样当某个事件发生就可以回调监听器内的方法
* 使用Listener两个步骤:
(1)定义Listener实现类
(2)注解或者在web.xml文件中配置(ServletContextAttributeListener、ServletRequestListener、
ServletRequestAttributeListener、HttpSessionListener、HttpSessionAttributeListener)