过滤器的使用

Posted yangss-myblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了过滤器的使用相关的知识,希望对你有一定的参考价值。

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>

以上是关于过滤器的使用的主要内容,如果未能解决你的问题,请参考以下文章

Huawei_Netconf_Ncclient

基于内部片段的graphql过滤器(gatsbyJS)

CPNtools协议建模安全分析---实例变迁标记

在底部导航栏中保存片段状态

js简洁代码片段

在Pandoc lua过滤器中连接字符串片段