过滤器的使用

本文深入讲解Servlet过滤器的概念与应用,介绍如何通过实现Filter接口创建过滤器,以及在web.xml中配置过滤器的方法。过滤器作为Servlet2.3之后新增的功能,主要负责处理客户端请求,实现请求的预处理和响应的后处理。

Servlet过滤器从字面上的字意理解为景观一层次的过滤处理才达到使用的要求,而其实Servlet过滤器就是服务器与客户端请求与响应的中间层组件,在实际项目开发中Servlet过滤器主要用于对浏览器的请求进行过滤处理,将过滤后的请求再转给下一个资源。

过滤器的基本概念

Filter是在Servlet 2.3之后增加的新功能,当需要限制用户访问某些资源或者在处理请求时提前处理某些资源的时候,就可以使用过滤器完成。
过滤器是以一种组件的形式绑定到WEB应用程序当中的,与其他的WEB应用程序组件不同的是,过滤器是采用了“链”的方式进行处理的。
实现过滤器 
在Servlet中,如果要定义一个过滤器,则直接让一个类实现javax.servlet.Filter接口即可,此接口定义了三个操作方法:
  • public void init(FilterConfig filterConfig) throws ServletException
  • public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException
  • public void destroy()
FilterChain接口的主要作用是将用户的请求向下传递给其他的过滤器或者是Servlet:
  • public void doFilter(ServletRequest request,ServletResponse response) throws IOException,ServletException
在FilterChain接口中依然定义了一个同样的doFilter()方法,这是因为在一个过滤器后面可能存在着另外一个过滤器,也可能是请求的最终目标(Servlet),这样就通过FilterChain形成了一个“过滤链”的操作,所谓的过滤链就类似于生活中玩的击鼓传花游戏 .
实现简单的过滤器:
public class EncodingFilter implements Filter {
 
@Override
public void destroy() {
// TODO Auto-generated method stub
 
}
 
@Override
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request=(HttpServletRequest)req;
HttpServletResponse response=(HttpServletResponse)resp;
 
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
 
chain.doFilter(req, resp);
 
}
 
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
 
}
}

XML文件

<filter>
 <filter-name>EncodingFilter</filter-name>
 <filter-class>pers.filter.EncodingFilter</filter-class>
 </filter>
 
 
 
<filter-mapping>
 <filter-name>EncodingFilter</filter-name>
 <url-pattern>/*</url-pattern>
 </filter-mapping>

 

 

定义一过滤器,实现Filtter接口

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class EncodingFilter implements Filter {
 
@Override
public void destroy() {
// TODO Auto-generated method stub
 
}
 
@Override
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request=(HttpServletRequest)req;
HttpServletResponse response=(HttpServletResponse)resp;
 
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
 
chain.doFilter(req, resp);
 
}
 
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
 
}
}

web.xml文件中,配置过滤器

?
1
2
3
4
5
6
7
8
9
10
11
< filter >
  < filter-name >EncodingFilter</ filter-name >
  < filter-class >pers.filter.EncodingFilter</ filter-class >
  </ filter >
 
 
 
< filter-mapping >
  < filter-name >EncodingFilter</ filter-name >
  < url-pattern >/*</ url-pattern >
  </ filter-mapping >

转载于:https://www.cnblogs.com/yangss-myblog/p/10742124.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值