未知數據

          從頭看Java

             ::  :: 聯系 :: 聚合  :: 管理
            28 Posts :: 0 Stories :: 10 Comments :: 0 Trackbacks

              Servlets Filter 是Servlet 2.3 規范中新增加的,它是截取用戶從客戶端提交的請求,在還沒有到達需要訪問的資源時運行的一個類。它操縱來自客戶端的請求,在資源還沒有初發送到客戶端前截取響應,并處理這些還沒有發送到客戶端的響應。
          Filters 有許多的應用場合。Servlet 2.3 規范建議如下的地方可以應用Filter:
          authentication filters
          logging and auditing filters
          image conversion filters
          data compression filters
          encryption filters
          tokenizing filters
          filters that trigger resource access events
          XSL/T filters that transform XML content
          MIME-type chain filters


          package jasso.web.filter;

          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;

          public class SetCharacterEncodingFilter implements Filter {
              private String encoding;

              public void destroy() {
              }

              public void doFilter(ServletRequest request, ServletResponse response,
                 FilterChain chain) throws IOException, ServletException {
                 request.setCharacterEncoding(encoding);
                 chain.doFilter(request, response);
              }

              public void init(FilterConfig config) throws ServletException {
                 encoding = config.getInitParameter("encoding");
              }
          }

          web.xml部分

          ......

          <filter>
             <filter-name>encodingFilter</filter-name>
             <filter-class>my.web.filter.SetCharacterEncodingFilter</filter-class>
               <init-param>
                 <param-name>encoding</param-name>
                 <param-value>Shift_JIS</param-value>
               </init-param>
          </filter>
          <filter-mapping>
             <filter-name>encodingFilter</filter-name>
             <servlet-name>action</servlet-name>
          </filter-mapping>
          <servlet>
             <servlet-name>action</servlet-name>
             <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
             <init-param>
               <param-name>config</param-name>
               <param-value>/WEB-INF/config/struts-config.xml,/WEB-INF/config/struts-config-contents.xml</param-value>
             </init-param>
             <init-param>
               <param-name>debug</param-name>
               <param-value>2</param-value>
             </init-param>
             <init-param>
               <param-name>detail</param-name>
               <param-value>2</param-value>
             </init-param>
             <load-on-startup>1</load-on-startup>
          </servlet>

          ----------------------------------------------

          javax.servlet.filter的用法

          如何實現一個過濾器呢?
          1.所在的類實現Filter接口
           public interface Filter
          public void init(FilterConfig filterConfig)throws ServletException
          過濾器初始化是在容器啟動時自動初始化
          public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletExcepton
          在標準Servlet中的doGet或doPost 方法中,傳遞參數為:HttpServletRequest、HttpServletResponse
          過濾器銷毀
          public void destroy()
          package cn.mldn.lxh.filter
          import java.io.*;
          import javax.servlet.*;
          public class FirstFilter implements Filter
          {
              public void init(FilterConfig config)throws ServletException
              {
                 System.out.println("過濾器初始化");
              }
            public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException
              {
                 System.out.println(過濾doFilter);
               }
             public void destroy()
             {
                 System.out.println(過濾器銷毀);
             }
          }
          web.xml文件配置
          <filter>
          <filter-name> first </filter-name>
          <filter-class> cn.mldn.lxh.filter.FirstFilter </filter-class>
          </filter>
          <filter-mapping>
          <filter-name> first </filter-name>
          與servlet中的url-pattern不一樣,此處表示對那個頁面進行過濾,如果全部都過濾,則"/*"
          <url-pattern> /* </url-pattern>
          </filter-mapping>
          如果過濾器要將內容傳遞到目的地,則需要FilterChain,將請求繼續向下轉發
          過濾器也會執行兩次:FilterChain這前執行一次,之后再執行一次
          1.過濾非法文字:
          package cn.mldn.lxh.filter;
          import java.io.*;
          import javax.servlet.*;
          public class CharFilter implements Filter
          {
          public void init(FilterConfig filterConfig)throws ServletException
          {
               //System.out.println("init");
          }
          public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletException
          {
            String content=request.getParameter("content");
            //如果indexOf返回-1則表示沒有查到所要的內容
            if(content!=null) {
             if(content.indexOf("AAA")==-1)
             {
              chain.doFilter(request,response);
             }
             else
             {
              System.out.println("有非法文字");
             //如果需要的話,此處依然可以使用RequestDispatcher進行跳轉
             }
            }else
             {
              chain.doFilter(request,response);
             }
          }
          public void destroy()
          {
          //System.out.println("過濾器銷毀");
          }
          }
          <filter>
          <filter-name> char </filter-name>
          <filter-class> cn.mldn.lxh.filter.CharFilter </filter-class>
          </filter>
          <filter-mapping>
          <filter-name> char </filter-name>
          <url-pattern> /* </url-pattern>
          </filter-mapping>
          2.對內容進行統一的編碼
          setCharacterEncoding("GB2312");
          package cn.mldn.lxh.filter;
          import java.io.*;
          import javax.servlet.*;
          public class EncodingFilter implements Filter
          {
            public void init(FilterConfig filterConfig)throws ServletException
            {
              //System.out.println("過濾器初始化");
            }
            public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletException
            {
             try{
                request.setCharacterEncoding("GB2312");
             }
             catch(Exception e)
             {}
             chain.doFilter(request,response);
            }
            public void destroy()
            {
             //System.out.println("銷毀");
            }

          }
          <filter>
          <filter-name> encoding </filter-name>
          <filter-class> </filter-class>
          </filter>
          <filter-mapping>
          <filter-name> encoding </filter-name>
          <url-pattern> /* </url-pattern>
          </filter-mapping>
          3.登陸驗證
          package cn.mldn.lxh.filter;
          import java.io.*;
          import javax.servlet.*;
          import javax.servlet.http.*;
            public class LoginFilter implements Filter
            {
              public void init(FilterCoinfig filterConfig)throws ServletException
              {
              //System.out.println("過濾器初始化");
              }
            }
          public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletException
          {
            //Session屬于http范疇,把以ServletRequest對象需要先轉換成HttpServletRequest對象
            HttpServletRequest req=(HttpServletRequest)request;
            HttpSession session =req.getSession();
            //如果session不為空,則可以瀏覽其它頁面
            if(session.getAttribute("uname")!=null)
            {
            chain.doFilter(request,response);
            }
            else
            {
            //通過requestDispatcher跳轉到登陸面
            request.getRequestDispatcher("login.jsp").forward(request,response);
            }
          }
            public void destroy()
            {
            //System,out.println("銷毀");
            }
          }
          <filter>
          <filter-name> login </filter-name>
          <filter-class> cn.mldn.lxh.filter.LoginFilter </filter-class>
             <init-param>
             <param-name> 參數名稱 </param-name>
             <param-value> 參數值 </param-value>
              </init-param>
          </filter>
          <filter-mapping>
          <filter-name> login </filter-name>
          <url-pattern> /* </url-pattern>
          </filter-mapping>
          讀取web.xml中的參數的方法:
          public void init(FilterConfig arg0) throws ServletException {
             String 參數值= arg0.getInitParameter("參數名稱");
          }

          posted on 2009-01-07 08:41 wangjc 閱讀(707) 評論(0)  編輯  收藏 所屬分類: workspace
          主站蜘蛛池模板: 宣汉县| 周口市| 中西区| 深泽县| 墨江| 卓资县| 辉县市| 察隅县| 禄丰县| 昂仁县| 昭平县| 临澧县| 漳平市| 兴安盟| 额尔古纳市| 东乌珠穆沁旗| 扎兰屯市| 和静县| 沙洋县| 邯郸市| 天峨县| 普陀区| 惠水县| 临海市| 永靖县| 茌平县| 富民县| 岢岚县| 磐安县| 雅江县| 靖远县| 海门市| 乡城县| 崇左市| 丰都县| 常宁市| 桐柏县| 政和县| 鲜城| 榆中县| 柘城县|