详细了解java监听器和过滤器
目录
- 1、介绍:
- 2、作用域对象:
- Servt规范扩展-----------过滤器接口
- 1、介绍:
- 2、具体作用:
- 3、Filter接口实现类的开发步骤:三步
- 第一步:创建一个java类实现Filter接口
- 第二步:重写doFilter接口中的doFilter()方法
- 第三步:在web.xml文件中将过滤器接口实现类注册到Http服务器
- OneServlet
- TwoServlet
- 4、Filter拦截地址的格式
- 总结
1、介绍: 1)一组来自于Servlet规范下的接口,共有8个接口。在Tomcat中存在于Servlet-api.jar包
2)监听器接口需要由开发人员亲自实现,Http服务器提供的jar中并没有对应的实现类
3)监听器接口用于监控【作用域对象生命周期的变化时刻】以及【作用域对象共享数据的变化时刻】
2、作用域对象: 1)在Servlet规范中,认为在服务端内存中可以在某些条件下为两个Servlet之间提供数据共享方案的对象,被称为【作用域对象】
2)在Servlet规范下的作用域对象:
ServletContext
:全局作用域对象HttpSession
:会话作用域对象HttpServletRequest
:请求作用域对象3、监听器接口实现类开发规范:三步
1)根据监听的实际情况,选择对应的监听器接口进行实现
2)重写监听器接口中声明的【监听事件处理方法】
3)在web.xml文件中将监听器接口实现类注册到Http服务器中
4、ServletContextListener
1)作用:通过这个接口合法的检测全局作用域对象的两个时刻
【详细了解java监听器和过滤器】被初始化时刻 被销毁时刻
2)监听事件处理方法
public void contextInitialized():
在全局作用域对象被Http服务器初始化是调用public void contextDestroyed():
在全局作用域对象被Http服务器销毁时调用5、ServletContextAttributeListener接口:
1)作用:通过这个接口合法的检测全局作用域对象共享数据变化的时刻
2)监听事件处理方法:
public void contextAdded():
在全局作用域对象添加共享数据时调用public void contextReplaced():
在全局作用域对象更新共享数据时调用public void contextRemoved():
在全局作用域对象删除共享数据时调用6、全局作用域对象共享数据变化时刻
ServletContext application=request.getServletContext();
application.setAttribute("key1",100);
//新增共享数据application.setAttribute("key1",200);
//更新共享数据application.removeAttribute("key1");
//删除共享数据代码实现
以下就以ServletContextListener接口和ServletContextAttributeListener接口
第一步:选择ServletContextListener接口进行实现
第二步:重写监听器接口声明的【监听事件处理方法】
public class OneListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent sce) {System.out.println("Initialized............"); }@Overridepublic void contextDestroyed(ServletContextEvent sce) {System.out.println("Destroyed............."); }}
第三步:在web.xml中将监听器接口实现类注册到Http服务器中
school.xauat.listener.OneListener
由于ServletContext【全局作用对象的生命周期】贯穿网站的整个运行期间
Servlet之间数据共享中有具体的ServletContext生命周期
因此在Tomcat服务器启动过程时,执行contextInitialize()方法
Initialized............
在Tomcat服务器准备关闭时,执行contextDestroyed()方法
Destroyed.............
第一步:选择ServletContextAttributeListener接口进行实现
第二步:重写监听器接口声明的【监听事件处理方法】
public class OneListener implements ServletContextAttributeListener {@Overridepublic void attributeAdded(ServletContextAttributeEvent scae) {System.out.println("ServletContextAttribute is added......"); }@Overridepublic void attributeRemoved(ServletContextAttributeEvent scae){System.out.println("ServletContextAttribute is removed......"); }@Overridepublic void attributeReplaced(ServletContextAttributeEvent scae){System.out.println("ServletContextAttribute is replaced......"); }}
第三步:在web.xml文件中将监听器接口实现类注册到Tomcat服务器中
OneServletschool.xauat.controller.OneServletOneServlet/one school.xauat.listener.OneListener
监听事件
public class OneServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//通过请求对象获取全局作用域对象ServletContext application=request.getServletContext(); //向全局作用域对象中添加共享数据application.setAttribute("key",100); //更改全局作用域对象中的共享数据application.setAttribute("key",500); //删除全局作用域对象中的共享数据application.removeAttribute("key"); }}
运行结果
文章图片
Servt规范扩展-----------过滤器接口
1、介绍:
1)来自于Servlet规范下的接口,在Tomcat中存在于
servlet-api.jar
包中2)Filter接口实现类由开发人员负责提供的,Http服务器不负责提供
3)Filter接口会在Http服务器调用资源文件之前,对Http服务器进行拦截
2、具体作用:
1)拦截Http服务器,帮助Http服务器去检测当前请求的合法性
2)拦截Http服务器,对当前请求进行增强操作
3、Filter接口实现类的开发步骤:三步
1)创建一个java类实现Filter接口
2)重写Filter接口中的doFilter方法
3)在web.xml文件中将过滤器接口实现类注册到Http服务器
过滤器检测请求合法性
第一步:创建一个java类实现Filter接口
第二步:重写doFilter接口中的doFilter()方法
/** * http://localhost:8080/myWeb/mm.jpg?age=89 */public class OneFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {//通过拦截的请求对象来得到请求包中的参数信息,从而得到来访用户的真实年龄String age=servletRequest.getParameter("age"); //根据这个年龄帮助我们的Http服务器判断本次请求的合法性if(Integer.valueOf(age)<70){//将拦截请求对象和相应对象交换给Tomcat,由Tomcat继续调用资源文件filterChain.doFilter(servletRequest,servletResponse); }else{//过滤器代替Http服务器拒绝本次请求servletResponse.setContentType("text/html; charset=utf-8"); PrintWriter out=servletResponse.getWriter(); out.print("不合适!!!!"); }}}
第三步:在web.xml文件中将过滤器接口实现类注册到Http服务器
OneFilter school.xauat.filter.OneFilter OneFilter /mm.jpg
过滤器对请求对象进行增强服务
当有多个以post的请求访问服务器时,需要对每个Servlet接口实现类中doPost()方法进行以下操作,增加的开发的难度。
response. setCharacterEncoding("utf-8")
以下展示过滤器的作用:
第一步:创建java实现Filter接口
第二步:重写Filter接口下的doFilter()方法
public class OneFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {servletRequest.setCharacterEncoding("utf-8"); filterChain.doFilter(servletRequest,servletResponse); }}
第三步:在web.xml文件中将过滤器接口实现类注册到Http服务器
OneServletschool.xauat.controller.OneServletOneServlet/one TwoServletschool.xauat.controller.TwoServletTwoServlet/two OneFilter school.xauat.filter.OneFilter OneFilter /*
OneServlet
public class OneServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//通过请求对象获取请求体中的请求参数String userName=request.getParameter("userName"); System.out.println("OneServlet----->"+userName); }}
TwoServlet
public class TwoServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//通过请求对象获取请求体中的请求参数String userName=request.getParameter("userName"); System.out.println("TwoServlet---->"+userName); }}
4、Filter拦截地址的格式 1)命令格式:
2)命令作用:
拦截地址
拦截地址通知Tomcat在调用和何种资源文件之前需要调用OneFilter过滤进行拦截
3)要求Tomcat在调用某一个具体文件之前,来调用OneFilter进行拦截
4)要求Tomcat在调用某一个文件夹下所有的资源文件之前,来调用OneFilter进行拦截
5)要求Tomcat在调用任意文件夹下的某种类型文件之前,来调用OneFilter拦截
6)要求Tomcat在调用网站中任意文件时,来调用OneFilter拦截
总结 本篇文章就到这里了,希望能给你带来帮助,也希望你能够多多关注脚本之家的更多内容!
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 我们重新了解付费。
- 拍照一年啦,如果你想了解我,那就请先看看这篇文章
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- C语言中的时间函数clock()和time()你都了解吗
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- 操作系统|[译]从内部了解现代浏览器(1)