<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 110, comments - 101, trackbacks - 0, articles - 7
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    過濾器和攔截器的區別

    Posted on 2011-11-21 18:27 云云 閱讀(21124) 評論(1)  編輯  收藏

    1、攔截器是基于java的反射機制的,而過濾器是基于函數回調
    2、過濾器依賴與servlet容器,而攔截器不依賴與servlet容器
    3、攔截器只能對action請求起作用,而過濾器則可以對幾乎所有的請求起作用
    4、攔截器可以訪問action上下文、值棧里的對象,而過濾器不能
    5、在action的生命周期中,攔截器可以多次被調用,而過濾器只能在容器初始化時被調用一次
    攔截器 :是在面向切面編程的就是在你的service或者一個方法,前調用一個方法,或者在方法后調用一個方法比如動態代理就是攔截器的簡單實現,在你調用方法前打印出字符串(或者做其它業務邏輯的操作),也可以在你調用方法后打印出字符串,甚至在你拋出異常的時候做業務邏輯的操作。
    下面通過實例來看一下過濾器和攔截器的區別:
    使用攔截器進行/admin 目錄下jsp頁面的過濾
    <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:
    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
    }
    }
    過濾器:是在java web中,你傳入的request,response提前過濾掉一些信息,或者提前設置一些參數,然后再傳入servlet或者struts的 action進行業務邏輯,比如過濾掉非法url(不是login.do的地址請求,如果用戶沒有登陸都過濾掉),或者在傳入servlet或者 struts的action前統一設置字符集,或者去除掉一些非法字符.
    使用過濾器進行/admin 目錄下jsp頁面的過濾,首先在web.xml進行過濾器配置:
    <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>
    下面是過濾的實現類:
    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 {
    }
    }


    評論

    # re: 過濾器和攔截器的區別 [未登錄]  回復  更多評論   

    2015-05-29 15:29 by 小馬哥
    算法

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产成人精品曰本亚洲79ren| 亚洲人成在线免费观看| 亚洲AV无码成人精品区大在线| 亚洲国产精品yw在线观看| 曰批视频免费40分钟试看天天| 久久亚洲精品成人AV| 亚洲黄色片免费看| 亚洲卡一卡二卡乱码新区| 久久久久久久久免费看无码| 亚洲人成免费网站| 成在人线AV无码免费| 亚洲久热无码av中文字幕| 国产人成免费视频| 一级毛片大全免费播放下载| 久久精品国产亚洲Aⅴ香蕉| 美女视频黄a视频全免费网站色窝| 亚洲AV综合色一区二区三区| 99久久免费看国产精品| 亚洲一区精彩视频| 国产大片91精品免费看3| 特级做a爰片毛片免费看| 久久青草亚洲AV无码麻豆| 100部毛片免费全部播放完整| 精品国产日韩久久亚洲| 免费中文字幕在线观看| a级毛片免费观看视频| 亚洲另类精品xxxx人妖| 日产乱码一卡二卡三免费| 9久热精品免费观看视频| 亚洲第一精品电影网| 国产中文字幕免费观看| 可以免费观看的毛片| 亚洲成_人网站图片| 亚洲午夜av影院| jjizz全部免费看片| 精品一区二区三区无码免费直播| 亚洲av午夜福利精品一区人妖| 一级女人18毛片免费| 一级毛片免费播放男男| 亚洲欧洲尹人香蕉综合| 亚洲一区二区三区无码影院|