文章目录
一、3w
- Why:生成动态Web内容
- What:Servlet是用Java编写的服务器端程序,Servlet是处理每个HTTP请求的最小单元
- How:WEB容器管控Servlet
二、Servlet 的工作原理
- Servlet接口定义了Servlet与servlet容器之间的契约。这个契约是:Servlet容器将Servlet类载入内存,并产生Servlet实例和调用它具体的方法。但是要注意的是,在一个应用程序中,每种Servlet类型只能有一个实例。
- 对于每一个应用程序,Servlet容器还会创建一个ServletContext对象,每个应用程序只有一个ServletContext。每个Servlet对象也都有一个封装Servlet配置的ServletConfig对象。
- init( ),service( ),destroy( )是Servlet生命周期的方法。代表了Servlet从“出生”到“工作”再到“死亡 ”的过程
- ServletRequset接口 ServletResponse接口。 线程域
- ServletConfig接口(属于实例配置) ServletContext对象(全局)
三、Servlet相关类
- GenericServlet抽象类:保存servletConfig对象
- HttpServlet抽象类:service方法解析HttpServletRequest中的方法参数,并调用以下:doGet,doPost,…。
- HttpServletResponse对象:getOutSream()和getWriter()是互斥的。
- HttpServletRequest对象:getInputStream、getReader、getParameter在一定的场景是互斥的。
四、监听器Listener
- 事件源:被监听的三个域对象 request session servletContext》监听生命周期或者监听属性变化
- 监听器的编写步骤:
a)编写一个监听器类去实现监听器接口 b)覆盖监听器的方法 c)需要在web.xml中进行配置
- 八大监听器
①、ServletContextListener
②、HttpSessionListener
③、ServletRequestListener
这三个是监听器是对servletContext、request、session这三个域的开启和关闭进行监听。(里面需要实现两个事件:创建和销毁)
④、ServletContextAttributeListener
⑤、HttpSessionAttributeListener
⑥、ServletRequestAttributeListener
这三个是监听器是对servletContext、request、session这三个域中对象的修改、添加、删除进行监听(里面要实现三个事件修改、添加、删除)。
①、HttpSessionBindingListener
这个是需要先创建一个bean对象类让对象类实现HttpSessionBindingListener接口中的绑定和解绑事件,每当session中存入该对象时候HttpSessionBindingListener的绑定事件就会运行,而每当session中的该对象移除时候解绑事件就会运行。
②、HttpSessionActivationListener
这个也是需要先创建一个bean对象类让对象类实现HttpSessionActivationListener接口中的钝化和活化这两个事件,在实现这个接口同时还得实现Serializable序列化这个接口,这样才能实现钝化后活化。(钝化:就是将session中已经存在的对象从session内存挪到磁盘中,活化:就是将磁盘中的session中的对象挪到内存中,钝化和活化可以运用到网站优化上,当用户长时间登陆网站不进行操作的时候就可以将这个用户的session对象进行钝化) - ServletContextListener在Spring中的应用:监听容器的初始化和销毁 使applicationContext和ServletContext共生死!
五、过滤器Filter
- 根据需要检查和修改HttpServletRequest、HttpServletResponse
- Filter的生命周期:init>doFilter>destroy。
- filter初始化参数的filterConfig对象
- 过滤器链——FilterChain:一组过滤器对某些web资源进行拦截,过滤器的执行顺序和声明有关
六、Web.xml
- 指定欢迎页面welcome-file-list
- 指定错误处理页面,可以通过“异常类型”或“错误码”来指定错误处理页面。error-page
七、Servlet 版本 与 JDK 版本的对照表
- Servlet 2.5 Java 5 / JDK 1.5 2005年 9月 新增Java 5支持,尤其是注解支持 Tomcat 6.0.x
- Servlet 3.0 Java 6 / JDK 1.6 2009年12月 支持注解配置,可以没有web.xml。改进简易性、可插拔性、安全性、文件上传,支持异步Servlet Tomcat 7.0.x
- Servlet 3.1 Java 7 / JDK 1.7 2013年 5月 支持 NIO、WebSocket Tomcat 8.5.x
- Servlet 4.0 Java 8 / JDK 1.8 2017年 9月 支持 HTTP/2 Tomcat 9.0.x
八、http》 servlet 》Web容器
- SpringBoot支持封装Tomcat、Jetty和Undertow三种web容器
- Tomcat 实现包:javax.servlet包》org.apache.catalina包 等等