什么是过滤器?有什么作用?
从字面的角度讲解而来,过滤器就是过滤一些我们不希望存留下来的对象。如水中的杂物,我们不希望一桶水中有什么杂物,这个时候我们就会想办法来过滤,以便处理掉水中的这些杂物。那么从程序的角度来讲,过滤器又是指什么呢?其实还是和过滤水中杂物一样的原理。如:一个论坛需要实现一个处理一些不良信息的功能,这个时候就可以使用过滤器来解决。当用户发送一个消息(留言)的时候,如果其包含了不良信息(如:脏话,违反论坛规则的语言等等),这个时候我们就可以使用过滤器在客户端与服务器交互的这个过程中,过滤掉这些不良信息。过滤器还有其他的用处,如:当客户端是GET提交的时候,提交的URL是会显示在服务器端的,这个时候我们可以通过篡改URL地址的方式来进入某需登陆才能进入的页面,要解决这个问题,我们也可以是用过滤器。当然过滤器还有很多其他作用,这里就不一一的讲了。
以下是一副过滤器处理的流程:
说了这么多,那如何实现一个过滤器呢?其实很简单,底层的东西都给我们封装好了,我们只管调用已实现的方法就可以了,具体如下。
首先我们写一个类,这个类只要实现javax.servlet.Filter这个接口,那么它就是一个过滤器了,在这个接口中,有三个方法,分别是:
/**在应用程序启动的时候,
*由容器调用,只会执行一次该方法
*
*/
void init(FilterConfig filterConfig)
throws ServletException
/**对个每个URL映射到该过滤器的时候都会被执行,
*由容器调用。
*
*/
void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException,
ServletException
/**在应用程序关闭的时候,
*由容器调用,只会执行一次该方法
*/
void destroy()
在上面的方法中,有如下几种类型的参数FilterConfig,ServletRequest,ServletResponse,FilterChain
其中ServletRequest,ServletResponse是两个接口,我们常用的类似接口HttpServletRequest,HttpServletResponse,其实是这里的ServletRequest,ServletResponse这两个接口的子接口,这里就不多讲了。说说FilterConfig和FilterChain吧。
FilterChain这是一个接口,其中有一个非常有用的方法,即:
/**这个方法是用于将控制权交给下一个过滤器,
*如果该过滤器是最后一个,那么就把控制权交给
*servlet
*/
void doFilter(ServletRequest request,
ServletResponse response)
throws IOException,
ServletException
FilterConfig,和上面一样是一个接口,他的作用是得到过滤器在配置文件里面配置的一些信息。常用的有:
String getInitParameter(String name);这个方法是得到我们在配置文件中配置的一些初始化参数信息。更多方法用到的时候可以参考:javax.servlet.FilterConfig这里面。
下面是关于过滤器的配置文件的格式,我们知道servlet和filter是容器来帮我们调用的,这也是java中著名的回调机制,但是底层是怎样实现的呢?答案是在那些技术牛人实现这些底层的时候,为了方便扩展和维护,就使用了XML的配置文件来做一些处理,这样一来就变得更灵活了。下面是servlet的配置文件:
<servlet>
<servlet-name>和servlet-mapping.name的统一标识</servlet-name>
<servlet-class>一个servlet全路径</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>和servlet.name的统一标识</servlet-name>
<url-pattern>/url</url-pattern>
</servlet-mapping>
其实filter的基本配置和servlet类似:
<filter>
<filter-name>和servlet-mapping.name的统一标识</filter-name>
<filter-class>一个servlet全路径</filter-class>
</filter>
<filter-mapping>
<filter-name>和servlet.name的统一标识</filter-name>
<url-pattern>/url</url-pattern>
</filter-mapping>
其他还有一些配置,如初始化参数的配置是一个较常用的配置,注意的是初始化参数如果要配置,需要放在filter标签元素下面,具体如下:
<filter>
<filter-name>和servlet-mapping.name的统一标识</filter-name>
<filter-class>一个servlet全路径</filter-class>
<init-param>
<param-name>参数的名字</param-name>
<param-value>参数的值</param-value>
</init-param>
</filter>
在filter-mapping这个标签中还有一个很有用的,常见的url-pattern,filter-name就不说了。
那就是<dispatcher></dispatcher>这个标签元素,它的作用是指定过滤器对应请求的方式,其中可以包含四种类型,request,include,forward和error。默认是request。
这个配置过程中需要了解的是<filter-class>是可以使用<servlet-name>来替换的:他们有一点不一样,那就是过滤器的执行顺序。
过滤器的执行顺序。
主要取决于配置文件,如果<filter-mapping>元素中配置URL的是利用<url-pattern>的话,那么它的执行顺序会比其他使用<servlet-name>来配置执行的优先级要高,如果全部都是<url-pattern>元素,那没执行顺序就是你在配置文件写的顺序。同理<servlet-name>配置的就要比<url-pattern>配置的要低,如果全部都是<servlet-name>,那么就是你在配置文件写的那个顺序。
最后,谈谈关于请求和响应的包装器的使用。
请求包装器可以做些什么呢?
我们可以使用请求包装器的原理,把请求做一下处理,在转交给servlet处理。实现步骤:
定义一个处理类,然后继承于javax.servlet.ServletRequestWrapper这个类,在这个类中就封装了一系列的方法来得到发送过来的请求信息,我们可以通过当中的方法得到这些信息,然后重写这些方法,就可以满足我们的需求了。如:我们可以得到请求信息当包含的参数,然后将其参数篡改以后在发送给servlet处理等等。
那么相应包装器呢?
其实它和请求包装器的原理都差不多,但是它实现的接口是javax.servlet.ServletResponseWrapper
实现请求和响应的包装器还有两种方法,就是继承与javax.servlet.ServletRequestWrapper,javax.servlet.ServletResponseWrapper这两个类的子类即:HttpServletRequestWrapper和HttpServletResponseWrapper。
分享到:
相关推荐
在实际项目中,我们经常结合Spring框架使用过滤器。例如,Spring Security就是通过过滤器实现的安全框架,它可以拦截请求,进行身份验证和授权。 总结,Servlet过滤器是Java Web开发中不可或缺的一部分,它为我们...
本篇将深入讲解Java Servlet过滤器的配置,包括`EncodingFilter`类的使用、jsp页面配置以及`web.xml`文件的配置。 首先,`EncodingFilter`是一个常见的过滤器,主要用于解决HTTP请求和响应中的编码问题。在处理中文...
在Java Web开发中,Servlet和JSP(JavaServer Pages)是两种重要的技术,常用于构建动态网站。...在实际项目中,我们应结合过滤器、安全管理框架(如Spring Security)和其他最佳实践来增强系统的安全性。
- Spring Boot默认使用Servlet容器(如Tomcat)来实例化过滤器,这意味着过滤器实例不是Spring管理的bean。如果需要Spring的依赖注入,可以将过滤器注册为Spring Bean,并在配置中设置`@ComponentScan`以包含过滤器...
通过"过滤器的使用.rar"中的JDBC三层项目,你可以深入理解过滤器在实际项目中的应用,结合数据库脚本,了解如何将过滤器与数据库操作结合起来,提高系统的稳定性和安全性。实践中,不断探索和学习,才能更好地掌握...
过滤器是Servlet规范的一部分,它允许开发者在请求到达目标Servlet或JSP之前对其进行拦截和处理。通过实现javax.servlet.Filter接口并配置在web.xml文件中,我们可以定义一系列过滤规则,比如进行数据的校验、字符...
Java过滤器(Filter)是Java Web开发中的一个重要概念,它主要应用于Servlet容器中,如Tomcat、Jetty等。在ACCP课程中,这个“accp java过滤器 PPT”很可能是为了帮助学习者深入理解如何在Web应用程序中有效地使用...
过滤器是Servlet API提供的一种机制,它允许我们在请求被处理之前或之后进行拦截和处理。通过实现javax.servlet.Filter接口,我们可以创建自定义过滤器来执行诸如身份验证、数据转换、日志记录等任务。在描述中提到...
在Java Web开发中,过滤器(Filter)是一个非常重要的...总的来说,过滤器与JavaBean的结合使用,能够有效地增强Java Web应用的功能性和安全性。理解并熟练掌握这些概念,对于任何Java Web开发者来说都是非常重要的。
Servlet过滤器是Java Web开发中的一个重要概念,它允许开发者在请求到达Servlet之前或者响应离开Servlet之后进行拦截处理。这个机制提供了对HTTP请求和响应进行预处理和后处理的能力,极大地扩展了Servlet的功能。在...
在实际应用中,拦截器和过滤器可以结合使用,以覆盖更多的需求。例如,可以在过滤器中处理通用的HTTP请求预处理,而在Spring MVC的拦截器中处理特定业务逻辑的校验和处理。同时,由于它们都是预处理和后处理机制,...
Servlet和过滤器是与JSP紧密相关的两个核心概念,它们在Java Web开发中扮演着重要角色。 1. **Servlet**: Servlet是Java平台上的一个标准接口,用于扩展服务器的功能。在JSP应用中,Servlet主要负责处理HTTP请求,...
### Servlet配置过滤器Filter知识点详解 #### 一、概述 在Java Web开发中,`Servlet`过滤器(`Filter`)是一种重要的技术组件,它可以在请求到达目标资源(如Servlet或JSP页面)之前或者响应返回客户端之前进行...
同时,过滤器还可以结合Servlet容器的其他特性,如Session管理、URL重写等,实现更复杂的业务需求。 总结来说,过滤器链是Java Web开发中一种强大的工具,它允许开发者灵活地控制请求和响应的处理流程,提高代码...
在实际应用中,Servlet、过滤器和监听器常常结合使用,构建出高效的Web应用程序。Servlet处理业务逻辑,过滤器确保数据安全和格式正确,监听器则提供自动化监控和响应。MVC模式则为这种组合提供了良好的结构基础,...
"过滤器实现鉴权"这个主题涉及到如何使用过滤器来实现对用户访问特定目录的权限控制,而无需依赖数据库。这种方式常用于小型项目或者快速原型开发,减少了数据库设计和连接的复杂性。 1. **过滤器基础** - 过滤器...
这个例子"springboot+jsp 使用过滤器.do"显然展示了如何在Spring Boot应用中集成JSP并添加过滤器功能。这里我们将深入探讨Spring Boot、JSP以及过滤器的相关知识点。 **1. Spring Boot** Spring Boot是Spring框架...
本文将深入探讨如何使用过滤器进行登录操作,以及这一过程中的相关知识点。 首先,我们要理解过滤器的基本概念。在Servlet规范中,过滤器是Web应用程序的一部分,可以拦截请求并修改响应。它们按照定义的顺序执行,...
Servlet Filter(过滤器)是Servlet API的一部分,它允许开发者在请求被Servlet处理之前或之后对请求和响应进行拦截和修改。Filter可以用来实现如登录验证、字符编码转换、日志记录等多种功能。当一个请求到达Web...
在Java Web开发中,特别是结合了Servlet技术后,过滤器成为了一种重要的组件,用于处理HTTP请求和响应,或者修改它们。 从过滤器技术的发展历程来看,其最初被引入是在Servlet 2.3版本中,这一版本的推出标志着Java...