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

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

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

    隨筆 - 100  文章 - 50  trackbacks - 0
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    收藏夾

    我收藏的一些文章!

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    過濾是SERVLET23規范新有的功能,目前TOMCAT4WEBLOGIC7都已支持。它能實現很多以前使用不便或很難實現的功能,在產品體系中,我們可以很好地使用SERVLET過濾,使得各個部件可以在保持系統統一權限控制的前提下,來實現各個獨自的個性權限系統。

    下面先看下SERVLET過濾是如何工作的,如下圖

    優點

    和傳統架構相比,SERVLET過濾的優點如下:

    在傳統架構中:

    • 每次接受到請求,掛鉤式方法就被調用,不論它們是否執行(有時甚至是空的)。
    • 方法的作用域及并發關系(每個方法可能在不同的線程上被調用)不允許在處理相同的請求時簡單、高效地共享不同掛鉤式方法調用間的變量和信息。

    SERVLET過濾中:

    • 嵌套的方法調用通過一系列過濾器實現,它僅有應用于當前請求的過濾器組成;基于掛鉤式調用的傳統執行方式需要在處理短句中調用掛鉤式例程,即使一個特定短句的處理邏輯不起任何作用。
    • 局部變量在實際的過濾方法返回之前都作保留,并且可用(因為上游過濾器的調用總在堆棧上,等待后續調用的返回)。

    過濾的實現

    調用鏈
    所有過濾器都服從調用的過濾器鏈,并通過定義明確的接口得到執行。一個執行過濾器的 Java 類必須執行這一
    javax.servlet.Filter 接口。這一接口含有三個過濾器必須執行的方法:

    • doFilter(ServletRequest, ServletResponse, FilterChain):這是一個完成過濾行為的方法。這同樣是上游過濾器調用的方法。引入的FilterChain對象提供了后續過濾器所要調用的信息。
    • init(FilterConfig):這是一個容器所調用的初始化方法。它保證了在第一次doFilter()調用前由容器調用。您能獲取在 web.xml 文件中指定的初始化參數。
    • destroy():容器在破壞過濾器實例前,doFilter()中的所有活動都被該實例終止后,調用該方法。

    嵌套調用在 doFilter() 方法執行中發生。除非您建立一個過濾器明確阻止所有后續處理(通過其它過濾器及資源處理器),否則過濾器一定會在 doFilter 方法中作以下的調用:

    FilterChain.doFilter(request, response);

     

    安裝過濾器:定義與映射
    容器通過 Web 應用程序中

    的配置描述符 web.xml 文件了解過濾器。有兩個新的標記與過濾器相關:<filter><filter-mapping>。應該指定它們為 web.xml 文件內 <web-app> 標記的子標記。

    過濾器定義的元素
    <filter> 標記是一個過濾器定義,它必定有一個 <filter- name><filter-class> 子元素。<filter-name> 子元素給出了一個與過濾器實例相關的、基于文本的名字。<filter-class> 指定了由容器載入的實際類。您能隨意地包含一個 <init-param> 子元素為過濾器實例提供初始化參數。例如,下面的過濾器定義指定了一個叫做 IE Filter 的過濾器:

    一、使瀏覽器不緩存頁面的過濾器     
    import javax.servlet.*;    
    import javax.servlet.http.HttpServletResponse;    
    import java.io.IOException;    
       
    /**   
    * 用于的使 Browser 不緩存頁面的過濾器   
    */   
    public class ForceNoCacheFilter implements Filter {    
       
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException    
    {    
        ((HttpServletResponse) response).setHeader("Cache-Control","no-cache");    
        ((HttpServletResponse) response).setHeader("Pragma","no-cache");    
        ((HttpServletResponse) response).setDateHeader ("Expires", -1);    
        filterChain.doFilter(request, response);    
    }    
       
    public void destroy()    
    {    
    }    
          public void init(FilterConfig filterConfig) throws ServletException    
    {    
    }    
    }    
    二、檢測用戶是否登陸的過濾器
    1.寫個過濾器
    import javax.servlet.Filter;   
  • import javax.servlet.FilterConfig;   
  • import javax.servlet.ServletException;   
  • import javax.servlet.ServletRequest;   
  • import javax.servlet.ServletResponse;   
  • import javax.servlet.FilterChain;   
  • import java.io.IOException;   
  • import javax.servlet.http.HttpServletRequest;   
  • import javax.servlet.http.HttpSession;   
  • import javax.servlet.http.HttpServletResponse;   
  •   
  • public class RightFilter   
  •     implements Filter {   
  •   public void init(FilterConfig filterConfig) throws ServletException {   
  •   }   
  •   
  •   public void doFilter(ServletRequest request, ServletResponse response,   
  •                        FilterChain chain) throws IOException, ServletException {   
  •     HttpServletRequest req = (HttpServletRequest) request;   
  •     HttpServletResponse res = (HttpServletResponse) response;   
  •        
  •     HttpSession session = req.getSession(true);   
  •   
  •     //從session里取的用戶名信息   
  •     String username = (String) session.getAttribute("username");   
  •        
  •     //判斷如果沒有取到用戶信息,就跳轉到登陸頁面   
  •     if (username == null || "".equals(username)) {   
  •       //跳轉到登陸頁面   
  •       res.sendRedirect("http://"+req.getHeader("Host")+"/login.jsp");   
  •     }   
  •     else {   
  •       //已經登陸,繼續此次請求   
  •       chain.doFilter(request,response);   
  •     }   
  •   }   
  •   
  •   public void destroy() {   
  •   }   
  • }   

    2.然后在web.xml里配置需要登陸權限驗證的JSP文件:   
     a.如果是某個具體的JSP文件(如a.jsp)需要登陸驗證

    <web-app>
      
      
    <filter>
        
    <filter-name>right</filter-name>
        
    <filter-class>com.taihuatalk.taihua.common.RightFilter</filter-class>
      
    </filter>

      
    <filter-mapping>
        
    <filter-name>right</filter-name>
        
    <url-pattern>/a.jsp</url-pattern>
      
    </filter-mapping>
      
    </web-app>

       b.如果是某一個目錄(如a/目錄)整個目錄下的文件都需要登陸驗證:

    <web-app>
      
      
    <filter>
        
    <filter-name>right</filter-name>
        
    <filter-class>com.taihuatalk.taihua.common.RightFilter</filter-class>
      
    </filter>

      
    <filter-mapping>
        
    <filter-name>right</filter-name>
        
    <url-pattern>/a/*</url-pattern>
      </filter-mapping>
      
    </web-app>
    三、字符編碼的過濾器    
    import javax.servlet.*;    
    import java.io.IOException;    
       
    /**   
    * 用于設置 HTTP 請求字符編碼的過濾器,通過過濾器參數encoding指明使用何種字符編碼,用于處理Html Form請求參數的中文問題   
    */   
    public class CharacterEncodingFilter    
    implements Filter    
    {    
    protected FilterConfig filterConfig = null;    
    protected String encoding = "";    
       
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException    
    {    
              if(encoding != null)    
               servletRequest.setCharacterEncoding(encoding);    
              filterChain.doFilter(servletRequest, servletResponse);    
    }    
       
    public void destroy()    
    {    
        filterConfig = null;    
        encoding = null;    
    }    
       
          public void init(FilterConfig filterConfig) throws ServletException    
    {    
               this.filterConfig = filterConfig;    
              this.encoding = filterConfig.getInitParameter("encoding");    
       
    }    
    }    

    2、在web.xml中做一些設置
     <filter>
         <filter-name>code</filter-name>
         <filter-class>CharacterEncodingFilter</filter-class>
    <init-param>
         <param-name>encoding</param-name>
         <param-value>GBK</param-value>
    </init-param>
    </filter>


      <filter-mapping>
         <filter-name>code</filter-name>
         <url-pattern>/*</url-pattern>
     </filter-mapping>


  • posted on 2010-01-13 23:18 fly 閱讀(8308) 評論(0)  編輯  收藏 所屬分類: jsp學習
    主站蜘蛛池模板: 青青视频免费在线| 天堂亚洲国产中文在线| 999zyz**站免费毛片| 亚洲高清成人一区二区三区| 黄网站在线播放视频免费观看| 婷婷综合缴情亚洲狠狠尤物| 国产亚洲精彩视频| 国产a v无码专区亚洲av| 一级免费黄色大片| 国产亚洲综合色就色| 中文字幕免费观看| 亚洲制服丝袜精品久久| 毛片高清视频在线看免费观看| 亚洲风情亚Aⅴ在线发布| 国产一精品一aⅴ一免费| 一区二区三区免费视频播放器| 亚洲深深色噜噜狠狠爱网站| 99久久99这里只有免费的精品| 久久久久久a亚洲欧洲AV| 午夜性色一区二区三区免费不卡视频 | 国产精品亚洲五月天高清| 四虎永久免费地址在线网站| 一区二区三区在线免费| 亚洲AV无码乱码国产麻豆穿越| 69堂人成无码免费视频果冻传媒| 亚洲综合国产成人丁香五月激情| 免费人成激情视频| 国产99视频精品免费专区| 亚洲国产精品网站久久| 国产免费观看网站| 秋霞人成在线观看免费视频| 亚洲五月丁香综合视频| 亚洲第一页综合图片自拍| 日本免费中文字幕| 亚洲A∨精品一区二区三区下载| 国产av无码专区亚洲av果冻传媒| 国产精品爱啪在线线免费观看| 免费人成动漫在线播放r18| 91在线亚洲精品专区| 又大又黄又粗又爽的免费视频| 免费人成网站在线观看不卡|