详细了解java监听器和过滤器

网友投稿 238 2022-10-12


详细了解java监听器和过滤器

目录1、介绍:2、作用域对象:Servt规范扩展-----------过滤器接口1、介绍:2、具体作用:3、Filter接口实现类的开发步骤:三步第一步:创建一个java类实现Filter接口第二步:重写doFilter接口中的doFilter()方法第三步:在web.xml文件中将过滤器接口实现类注册到Http服务器OneServletTwoServlet4、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服务器中

http://

4、ServletContextListener

1)作用:通过这个接口合法的检测全局作用域对象的两个时刻

被初始化时刻 被销毁时刻

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 {

@Override

public void contextInitialized(ServletContextEvent sce) {

System.out.println("Initialized............");

}

@Override

public void contextDestroyed(ServletContextEvent sce) {

System.out.println("Destroyed.............");

}

}

第三步:在web.xml中将监听器接口实现类注册到Http服务器中

http://

school.xauat.listener.OneListener

由于ServletContext【全局作用对象的生命周期】贯穿网站的整个运行期间

Servlet之间数据共享中有具体的ServletContext生命周期

因此在Tomcat服务器启动过程时,执行contextInitialize()方法

Initialized............

在Tomcat服务器准备关闭时,执行contextDestroyed()方法

Destroyed.............

第一步:选择ServletContextAttributeListener接口进行实现

第二步:重写监听器接口声明的【监听事件处理方法】

public class OneListener implements ServletContextAttributeListener {

@Override

public void attributeAdded(ServletContextAttributeEvent scae) {

System.out.println("ServletContextAttribute is added......");

}

@Override

public void attributeRemoved(ServletContextAttributeEvent scae){

System.out.println("ServletContextAttribute is removed......");

}

@Override

public void attributeReplaced(ServletContextAttributeEvent scae){

System.out.println("ServletContextAttribute is replaced......");

}

}

第三步:在web.xml文件中将监听器接口实现类注册到Tomcat服务器中

OneServlet

school.xauat.controller.OneServlet

OneServlet

/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 {

@Override

public 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 {

@Override

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

servletRequest.setCharacterEncoding("utf-8");

filterChain.doFilter(servletRequest,servletResponse);

}

}

第三步:在web.xml文件中将过滤器接口实现类注册到Http服务器

OneServlet

school.xauat.controller.OneServlet

OneServlet

/one

TwoServlet

school.xauat.controller.TwoServlet

TwoServlet

/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拦截

*.jpg

6)要求Tomcat在调用网站中任意文件时,来调用OneFilter拦截

/*

总结

本篇文章就到这里了,希望能给你带来帮助,也希望你能够多多关注我们的更多内容!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:西门子PLC能否通过以太网数据模块实现无线通讯?
下一篇:如何调用EasyCVR平台的登录、播放地址、录像回看接口?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~