浅析在java web开发中使用的servlet。
1. main
graph BT
HttpServlet --> GenericServlet
GenericServlet -.-> Serializable
GenericServlet -.-> Servlet
GenericServlet -.-> ServletConfig
graph BT
HttpServletRequestWrapper -->ServletRequestWrapper
HttpServletRequestWrapper -.->HttpServletRequest
ServletRequestWrapper -.-> ServletRequest
HttpServletRequest --> ServletRequest
HttpServletResponseWrapper -->ServletResponseWrapper
HttpServletResponseWrapper -.->HttpServletResponse
ServletResponseWrapper -.-> ServletResponse
HttpServletResponse --> ServletResponse
servlet实例化,服务。
Servlet
: init,service,destroyGenericServlet
HttpServlet
: doGet,doPost…ServletConfig
: ConfigServletContext
: ContextRequest
: 请求Response
: 响应
2. Wrapper
ServletRequestWrapper
,ServletResponseWrapper
,HttpServletRequestWrapper
,HttpServletResponseWrapper
对于ServletRequest
,ServletResponse
,HttpServletRequest
,HttpServletResponse
,servlet提供给开发者wrapper装饰类。开发者可以使用改变属性,扩展功能等,例如验证参数,过滤数据,自定义功能等。
3. ServletContainerInitializer
servlet 3.0提供开发者ServletContainerInitializer
,可以通过实现ServletContainerInitializer
接口来注册初始化应用,从而取代web.xml
。
- 使用
web.xml
时,web容器会寻找web.xml
进行初始化应用。 - 使用实现
ServletContainerInitializer
时,web容器会寻找ServletContainerInitializer
的实现类,并调用onStartup
进行初始化应用。
可参考SpringServletContainerInitializer
,TomcatStarter
4. Listener
servlet有如下Listener:
ServletContextListener
,ServletContextAttributeListener
:监听
ServletContext
,例如Spring中ContextLoaderListener
创建WebApplicationContext
。ServletRequestListener
,ServletRequestAttributeListener
:监听
ServletRequest
,例如Spring中RequestContextListener
,进行setLocale
等。AsyncListener
异步监听
HttpSessionListener
,HttpSessionIdListener
,HttpSessionAttributeListener
session的监听,创建,销毁,属性值变化,sessionIdChanged
HttpSessionActivationListener
session序列化监听
HttpSessionBindingListener
valueBound()
: 数据对象绑定到session监听valueUnbound
: 解绑监听WriteListener
,ReadListener
名称以Listener结尾的一般为创建销毁监听,AttributeListener为属性变化监听。
5. Filter
Filter
,FilterChain
,FilterConfig
6. Asyn
servlet3.0支持异步。
void start(Runnable run);