我们可以从以下几个知识点学习:
1.概念
2.生命周期
3.职责
4.执行过程
5.案例讲解
1.概念
Servlet : servlet是运行服务器端得Java程序,是独立与平台和协议的特性,并且是由Web服务器端进行加载的 还可以生成动态的web页面,它链接于客户端与服务器之间 ,具有跨平台 可移植性强等优点。
filter (拦截器):filter是一个可重复使用的代码片段,可用来转换请求 响应和头信息。Filter不像servlet,可以产生请求和相应,但他可以修改某一资源的请求或响应。
listene (监听器):listene是个监听器,从字面上可以了解到就是通过listene监听web服务器中的某个动作做出响应的反应。
2.生命周期
Servlet :servlet生命周期一般被加载到web服务器中是不会被删除的,只有是web服务器重启或关闭时才会被删除,另外servelt声明周期包含4个过程如:
1.加载和实例化
加载和实例化Servlet是由Servlet容器来实现的。加载Servlet之后,容器会通过Java反射机制来创建Servelt的实例.
2.初始化
在Servlet 的实例创建后,Servlet容器会调用 Servlet 的 init() 方法来初始化该Servlet对象。初始化的目的是可以让Servlet对象在处理客户端请求之前完成一些初始化工作,对与每个 Servlet 实例,只会调用一次init()方法。
3.执行
ServletRequest 和 ServletResponse两个对象传给 service() 方法。通过ServletRequest 对象,Servlet 实例可以获取客户端请求信息,处理完请求后,则将信息放置在ServletResponse对象中。最后销毁ServletRequest 和 ServletResponse 对象。
4.销毁
当Servelt实例需要从服务中移除,容器会调用 destroy() 方法, 让该实例释放掉它所用的资源,并将实例中的数据保存到持久的存储设备中。之后Servlet实例便会被Java垃圾回收机制回收。
Filter : (Filter一定要实现 Javax,servlet 包中Filter接口的三种方法 init(),doFilter(),destroy(),空实现也行)
1.启动服务器时加载过滤器的实例,并且会调用init()方法来初始化实例。
2.每一次请求时都只是调用doFilter()方法进行处理。
3.停止服务器时调用destroy()方法,销毁实例。
Listener : 类似于Servlet 和Filter.
web.xml加载顺序:context-param -----> listener -----> filter -----> servlet
(监听器)
context-param : context-param元素含有一对参数名和参数值,作用是ServletContext上下文初始化参数。参数名在正web应用中是唯一的。
3.职责
1.Servlet :
创建并返回一个包含基于客户请求性质完整动态的HTML页面。
创建可嵌入现有的HTML 页面中的一部分HTML页面。
可以接受客户端发来的 隐藏 或 显示 数据。
通过状态代码和响应头向客户端发送隐藏数据进行 响应客户端的请求。
2.Filter:
Filter可以在一个请求到达Servlet之前预处理用户请求,也可以在离开Servlet 时处理http响应。
在执行 Servlet之前,首先执行Filter程序,并做一下处理预处理工作。
根据程序需要修改响应和请求。
在Servelt 被调用之后截获Servlet的执行。
3.listener:职责跟概念差不多。
他们几个的区别:
1.Servlet 流程短,URL传过来之后,就对其进行处理,之后返回或转向到某个自己指定页面。它主要用来在业务处理之前进行控制。
2.Filter 流程是线性的,URL传过来之后,检查之后,可保持原来的流程继续向下执行,被下一个Filter或Servlet接收,而Servlet在处理之后,不会继续向下传递,Filter功能可用来保持流程继续按原来的 方式进行下去,或者主导流程,而Servlet的功能主要用来主导流程。
Filter可用来进行字符编码过滤,检查用户是否登录,进制页面进行缓存。
3.Filer和Servlet都是针对URL之类的,而listener 是针对对象的操作,如session 的创建, session.setAttribute的发生,在这样的事件发生时做一些事情。
4.执行过程
1.Servlet:
2、filter:
3、listener:
4.案例演示: 本案例用到了 Servlet 拦截器 Servlet 还有 Cookie 等技术。本案例可以实现如果不从登录进入,就对其它页面操作,就会进行拦截返回登录页面,重新验证,还可以把 用户名 密码存到Cookie 中下次登录自动补充 用户名 密码。
1.jsp登录页面:中可从cookie中获取用户名密码 还有为下次是否记住用户密码获取选择。
2.servlet 中Cookie 代码
3.web.xml拦截器进行配置
4.拦截器与Servlet 不同一个是继承 一个是实现