导航:首页 > 净水问答 > 过滤器与servlet区别

过滤器与servlet区别

发布时间:2025-06-21 14:27:51

Ⅰ java过滤器中的FilterChain对象

1、什么是过滤器?
与Servlet相似,过滤器是一些web应用程序组件,可以绑定到一个web应用程序中。但是与其他web应用程序组件不同的是,过滤器是"链"在容器的处理过程中的。这就意味着它们会在servlet处理器之前访问一个进入的请求,并且在外发响应信息返回到客户前访问这些响应信息。这种访问使得过滤器可以检查并修改请求和响应的内容。
2、过滤链FilterChain
两个过滤器,EncodingFilter负责设置编码,SecurityFilter负责控制权限,服务器会按照web.xml中过滤器定义的先后循序组装成一条链,然后一次执行其中的doFilter()方法。执行的顺序就如下图所示,执行第一个过滤器的chain.doFilter()之前的代码,第二个过滤器的chain.doFilter()之前的代码,请求的资源,第二个过滤器的chain.doFilter()之后的代码,第一个过滤器的chain.doFilter()之后的代码,最后返回响应。
3、过滤链的好处是,执行过程中任何时候都可以打断,只要不执行chain.doFilter()就不会再执行后面的过滤器和请求的内容。而在实际使用时,就要特别注意过滤链的执行顺序问题,像EncodingFilter就一定要放在所有Filter之前,这样才能确保在使用请求中的数据前设置正确的编码。

Ⅱ jsp/servlet过滤器和struts2拦截器的有什么区别

拦截器和过滤器的区别:

1、拦截器是基于java的反射机制的,而过滤器是基于函数回调

2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器

3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用

4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能

5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次

拦截器
:是在面向切面编程的就是在你的service或者一个方法前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。

下面通过实例来看一下过滤器和拦截器的区别:

使用拦截器进行/admin 目录下jsp页面的过滤

[html] view plain

<package name="newsDemo"
extends="struts-default"

namespace="/admin">

<interceptors>

<interceptor name="auth"
class="com.test.news.util.AccessInterceptor" />

<interceptor-stack name="authStack">

<interceptor-ref
name="auth" />

</interceptor-stack>

</interceptors>

<!-- action -->

<action name="newsAdminView!*" class="newsAction"

method="{1}">

<interceptor-ref
name="defaultStack"/>

<interceptor-ref
name="authStack">

</interceptor-ref>

下面是我实现的Interceptor class:

[java] view plain

package com.test.news.util;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;

import
com.opensymphony.xwork2.ActionInvocation;

import
com.opensymphony.xwork2.interceptor.AbstractInterceptor;

import
com.test.news.action.AdminLoginAction;

/**

*
@author chaoyin

*/

public class AccessInterceptor
extends AbstractInterceptor {

private static final long
serialVersionUID = -4291195782860785705L;

@Override

public String intercept(ActionInvocation actionInvocation) throws
Exception {

ActionContext actionContext =
actionInvocation.getInvocationContext();

Map session =
actionContext.getSession();

//except login action

Object action = actionInvocation.getAction();

if (action
instanceof AdminLoginAction) {

return
actionInvocation.invoke();

}

//check
session

if(session.get("user")==null ){

return
"logout";

}

return actionInvocation.invoke();//go
on

}

}

过滤器:是在javaweb中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的
action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者
struts的action前统一设置字符集,或者去除掉一些非法字符。

使用过滤器进行/admin
目录下jsp页面的过滤,首先在web.xml进行过滤器配置:

[html] view plain

<filter>

<filter-name>access
filter</filter-name>

<filter-class>

com.test.news.util.AccessFilter

</filter-class>

</filter>

<filter-mapping>

<filter-name>access filter</filter-name>

<url-pattern>/admin/*</url-pattern>

</filter-mapping>

下面是过滤的实现类:

[java] view
plain

package com.test.news.util;

import
java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import
javax.servlet.FilterConfig;

import
javax.servlet.ServletException;

import
javax.servlet.ServletRequest;

import
javax.servlet.ServletResponse;

import
javax.servlet.http.HttpServletRequest;

import
javax.servlet.http.HttpServletResponse;

import
javax.servlet.http.HttpSession;

public class AccessFilter
implements Filter {

/**

* @author chaoyin

*/

public void destroy() {

}

public void doFilter(ServletRequest arg0, ServletResponse arg1,

FilterChain filterChain) throws IOException, ServletException {

HttpServletRequest request = (HttpServletRequest)arg0;

HttpServletResponse response = (HttpServletResponse)arg1;

HttpSession session = request.getSession();

if(session.getAttribute("user")== null &&
request.getRequestURI()。indexOf("login.jsp")==-1 ){

response.sendRedirect("login.jsp");

return ;

}

filterChain.doFilter(arg0, arg1);

}

public void init(FilterConfig arg0) throws ServletException {

}

}
摘自网络--

Ⅲ java中过滤器(Filter)与拦截器(Interceptor)的区别

Java中过滤器与拦截器的主要区别如下

  1. 执行位置

    • 过滤器:主要在请求到达Servlet之前和响应发送给客户端之后进行预处理和后处理。它作用于整个请求响应流程,对所有的请求和响应进行统一处理。
    • 拦截器:作用于方法调用前后,通常在SpringMVC等框架中用于拦截Controller中的方法调用。它专注于方法级别的拦截,可以针对特定的方法或Action执行前后逻辑。
  2. 实现方式

    • 过滤器:通过实现javax.servlet.Filter接口来创建,需要在web.xml文件中进行配置,或者通过注解和Java配置类进行配置。过滤器随应用启动而初始化,只初始化一次。
    • 拦截器:在SpringMVC中,通过实现HandlerInterceptor接口来创建,并在Spring配置文件中进行声明和配置。拦截器的执行顺序遵循声明顺序。
  3. 作用范围

    • 过滤器:作用范围较广,可以对所有的请求和响应进行处理,适用于全局性的任务,如设置字符集、控制权限等。
    • 拦截器:作用范围较窄,专注于方法级别的拦截,适用于封装通用的逻辑,如验证权限、记录日志、处理事务等。拦截器可以实现更细粒度的控制。
  4. 执行流程

    • 过滤器:具有线性的执行流程,请求依次经过配置的过滤器链,每个过滤器对请求进行预处理,并在响应发送后进行后处理。
    • 拦截器:执行顺序遵循声明顺序,但具体方法的执行时机和方法调用顺序有所不同。preHandle在方法调用前执行,postHandle在方法调用后但在视图渲染前执行,afterCompletion在整个请求完成后执行。

综上所述,过滤器主要用于控制请求流向和进行全局性的预处理和后处理,而拦截器则主要用于执行通用的、跨切面的代码逻辑,并专注于方法级别的拦截。理解两者之间的区别有助于在Java Web开发中选择合适的工具来实现特定的功能。

阅读全文

与过滤器与servlet区别相关的资料

热点内容
沁园净水器废水率 浏览:545
18年大众lavida的空调滤芯在哪里 浏览:99
柴油滤芯不满有什么后果 浏览:671
污水处理后导电率多少为标准 浏览:777
饮水机有什么认证才是安全的 浏览:682
做过实验用的废水叫什么 浏览:594
四川中央水处理设备装置 浏览:703
松下的空气净化器除甲醛怎么样 浏览:137
洗井用的抽污水多少钱一台 浏览:863
污水管是管顶平接还是管底平接 浏览:704
制药废水色度如何处理 浏览:269
净水材料在网上怎么卖 浏览:816
环氧树脂二步骤工艺 浏览:692
纯净水10块和八块有什么区别 浏览:487
云米即热饮水吧除垢 浏览:852
超滤膜带什么电荷 浏览:949
推荐反渗透气动蝶阀 浏览:31
小米反渗透膜怎么这么贵 浏览:207
即热式直饮机滤芯哪里有 浏览:115
植物性树脂胶粉 浏览:106