浅析在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,destroyGenericServletHttpServlet: 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,HttpSessionAttributeListenersession的监听,创建,销毁,属性值变化,sessionIdChanged
HttpSessionActivationListenersession序列化监听
HttpSessionBindingListenervalueBound(): 数据对象绑定到session监听valueUnbound: 解绑监听WriteListener,ReadListener
名称以Listener结尾的一般为创建销毁监听,AttributeListener为属性变化监听。
5. Filter
Filter,FilterChain,FilterConfig
6. Asyn
servlet3.0支持异步。
void start(Runnable run);