过滤器和监听器

过滤器的原理:

过滤器:对指定的资源访问进行过滤和传播,过滤掉权限限制的请求,传播被过滤资源的共性功能。

原理图:



过滤器的编程步骤:

1.创建一个普通类,该类实现Filter接口,并实现所有的方法

2.在web.xml中配置过滤器

<filter>

<filter-name>过滤器名称</filter-name>

<filter-class>过滤器的全限定类名<filter-class>

</filter>

<filter-mapping>

<filter-name>过滤器名称</filter-name>

<url-pattern>需要过滤资源的路径</url-pattern>

</filter-mapping>


3.书写过滤器中的doFilter方法,实现功能代码

注:

1.只要启动服务器就会创建Filter对象,并执行init初始化方法

2.<url-pattern></url-pattern>中的配制方法:

(1)/*  :表示本项目中的所有资源都要经过该过滤器

(2)*.jsp:表示本项目中所有的jsp文件都要经过该过滤器

(3)/admin/*:表示admin文件夹下的所有文件执行都要经过该过滤器

(4)/addServlet或者/add.jsp表示明确指定资源进行过滤

3.过滤器在xml文件中配置是放置在Servlet前面

4.多个过滤器过滤同一个资源的时候,会按照xml中过滤器放置的前后顺序依次过滤,其中任何一个过滤器不放行,目标资源就不能执行。


过滤器之全站乱码解决

请求的乱码解决问题:

在请求中,如果存在中文,在获取的时候就容易引起乱码情况,而在每个方法中书写乱码解决代码,效率低,代码的复用性差。

因此可以考虑从获取参数的方法中加入乱码解决代码,这样就不用每次在Servlet中书写乱码解决代码,提高了代码的复用性,效率也得到提高。

借鉴包装流的装饰者模式,可以同样用于解决乱码问题,具体步骤如下:

1.自定义一个类EncodingRequest,此类继承了HttpServletRequestWrapper

2.提供一个构造方法,用于接收Filter创建的request对象和编码方式,在类中定义两个成员变量requestcharset用于存储这两个参数

HttpServletRequest request ;

String charset;

public EncodingRequest(HttpRequestServler request ,String charset)

{

super(request);

this.request = request ;

this.charset =charset ;

}

3.重写获取参数的三个方法getParametergetParameterValues以及getParameterMap,在这些方法中书写解决乱码问题


过滤器之访问权限:

访问权限问题常见的是管理员和普通会员的操作的内容不同,不能出现越界操作。

访问权限的解决:

1、 将具有不同访问权限的资源放置到不同的文件目录下

2、 编写不同的过滤器,在web.xml过滤器的配置中,指定需要进行过滤的不同文件目录

3、 在过滤器的doFilter中书写业务代码


监听器:

监听器的分类:对对象的创建和销毁进行监听、对对象中的属性变更进行监听


对对象的创建和销毁进行监听:

ServletContextListener:监听ServletContext对象的创建和销毁

HttpSessionListener:监听HttpSession对象的创建和销毁

ServletRequestListener:监听ServletRequest对象的创建和销毁


对域对象的属性增删改进行监听:

ServletContextAttributeListener:监听ServletContext域对象中的属性

HttpSessionAttributeListener:监听HttpSession域对象中的属性

ServletRequestAttributeListener:监听ServletRequest域对象中的属性


编程步骤:

1.选择要监听的动作,创建一个普通类,使这个类实现监听器接口

2.配置web.xml文件(配置的位置在过滤器之前)

<listener>

<listener-class>监听器的全限定类名</listener-class>

</listener>

3.监听器中重写相应的方法











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值