Java Servlet API 是Servlet容器(如tomcat)和Servlet之间的一系列接口,它们定义了容器与Servlet交互的的各种方法。
Servlet工作流程
Servlet核心类
UML
ServletConfig
ServletConfig包含了Servlet的配置参数,由容器在Servlet初始化的时候传递给Servlet。
ServletContext
ServletContext可以看作是Servlet容器的抽象,提供了操作容器的方法。
容器为每个web项目都创建一个ServletContext实例,在启动时创建,服务器关闭时销毁,在一个web项目中共享数据,管理web项目资源,为整个web配置公共信息等,通俗点讲,就是一个web项目,就存在一个ServletContext实例,每个Servlet读可以访问到它。
Servlet接口
定义了一些由容器调用的方法,完成Servlet的配置,初始化以及执行具体逻辑。
GenericServlet
GenericServlet实现了Servlet接口以及ServletConfig接口,初步实现配置,日志,初始化相关方法。
HttpServlet
继承GenericServlet,将处理请求的核心方法service根据Http Method分成对应的方法再处理。
ServletRequest
Servlet容器将接受到的请求的内容封装成ServletRequest对象,传递给Servlet的service方法执行逻辑。ServletRequest中定义了获取请求内容的一系列方法。
HttpServletRequest
继承ServletRequest,定义了HTTP协议相关内容参数获取的方法。
ServletResponse
请求出参的封装对象,由Servlet容器在Servlet的service方法中传入,根据业务逻辑填充,再由Servlet容器转成对应的Response。
HttpServletResponse
继承ServletResponse,根据HTTP协议定义相关方法。
ServletRequest和ServletResponse都是接口,具体的对象由Servlet容器提供,我们无需关心具体的实例对象,只需要操作接口的方法。
ServletResponseWrapper,ServletRequestWrapper
ServletResponseWrapper和ServletRequestWrapper是ServletResponse和ServletRequest的包装类,允许我们重写包装类,在执行真实实例对象的前后做一些其他操作。
Filter
Servlet容器会在Servlet的service外层包裹一系列Filter组成的FilterChain,当请求进入Servlet容器时,实现在Servlet的service执行前后做一些其他处理。
在Filter的doFilter方法中调用FilterChain的DoFilter方法完成调用传递。
Filter初始化方法中传入FilterConfig,通过该类可以获取web.xml中定义的参数,以及ServletContext。
Listener
Servlet API 提供了一些Listener允许我们监听特定的事件。
ServletContextListener
接收关于ServletContext生命周期更改的通知事件的接口。
ServletContextAttributeListener
接收web应用程序servlet上下文中属性列表更改的通知。
ServletRequestListener
用于接收关于进入和超出Web应用程序范围的请求的通知事件的接口。
ServletRequestAttributeListener
接收关于ServletRequest属性更改的通知事件的接口。
HttpSessionListener
接收关于HttpSession生命周期更改的通知事件的接口。
HttpSessionBindingListener
使对象从会话绑定到绑定或从其绑定时被通知。
HttpSessionAttributeListener
用于接收关于HttpSession属性更改的通知事件的接口。
HttpSessionActivationListener
用于接收session活跃与钝化之间变化事件的接口。
AsyncListener
如果在添加了侦听器的ServletRequest上启动的异步操作已完成,超时或导致错误,将会通知侦听器。