未知數(shù)據(jù)

          從頭看Java

             ::  :: 聯(lián)系 :: 聚合  :: 管理
            28 Posts :: 0 Stories :: 10 Comments :: 0 Trackbacks

              Servlets Filter 是Servlet 2.3 規(guī)范中新增加的,它是截取用戶從客戶端提交的請(qǐng)求,在還沒(méi)有到達(dá)需要訪問(wèn)的資源時(shí)運(yùn)行的一個(gè)類。它操縱來(lái)自客戶端的請(qǐng)求,在資源還沒(méi)有初發(fā)送到客戶端前截取響應(yīng),并處理這些還沒(méi)有發(fā)送到客戶端的響應(yīng)。
          Filters 有許多的應(yīng)用場(chǎng)合。Servlet 2.3 規(guī)范建議如下的地方可以應(yīng)用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的用法

          如何實(shí)現(xiàn)一個(gè)過(guò)濾器呢?
          1.所在的類實(shí)現(xiàn)Filter接口
           public interface Filter
          public void init(FilterConfig filterConfig)throws ServletException
          過(guò)濾器初始化是在容器啟動(dòng)時(shí)自動(dòng)初始化
          public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletExcepton
          在標(biāo)準(zhǔn)Servlet中的doGet或doPost 方法中,傳遞參數(shù)為:HttpServletRequest、HttpServletResponse
          過(guò)濾器銷毀
          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("過(guò)濾器初始化");
              }
            public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException
              {
                 System.out.println(過(guò)濾doFilter);
               }
             public void destroy()
             {
                 System.out.println(過(guò)濾器銷毀);
             }
          }
          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不一樣,此處表示對(duì)那個(gè)頁(yè)面進(jìn)行過(guò)濾,如果全部都過(guò)濾,則"/*"
          <url-pattern> /* </url-pattern>
          </filter-mapping>
          如果過(guò)濾器要將內(nèi)容傳遞到目的地,則需要FilterChain,將請(qǐng)求繼續(xù)向下轉(zhuǎn)發(fā)
          過(guò)濾器也會(huì)執(zhí)行兩次:FilterChain這前執(zhí)行一次,之后再執(zhí)行一次
          1.過(guò)濾非法文字:
          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則表示沒(méi)有查到所要的內(nèi)容
            if(content!=null) {
             if(content.indexOf("AAA")==-1)
             {
              chain.doFilter(request,response);
             }
             else
             {
              System.out.println("有非法文字");
             //如果需要的話,此處依然可以使用RequestDispatcher進(jìn)行跳轉(zhuǎn)
             }
            }else
             {
              chain.doFilter(request,response);
             }
          }
          public void destroy()
          {
          //System.out.println("過(guò)濾器銷毀");
          }
          }
          <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.對(duì)內(nèi)容進(jìn)行統(tǒng)一的編碼
          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("過(guò)濾器初始化");
            }
            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.登陸驗(yàn)證
          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("過(guò)濾器初始化");
              }
            }
          public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletException
          {
            //Session屬于http范疇,把以ServletRequest對(duì)象需要先轉(zhuǎn)換成HttpServletRequest對(duì)象
            HttpServletRequest req=(HttpServletRequest)request;
            HttpSession session =req.getSession();
            //如果session不為空,則可以瀏覽其它頁(yè)面
            if(session.getAttribute("uname")!=null)
            {
            chain.doFilter(request,response);
            }
            else
            {
            //通過(guò)requestDispatcher跳轉(zhuǎn)到登陸面
            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> 參數(shù)名稱 </param-name>
             <param-value> 參數(shù)值 </param-value>
              </init-param>
          </filter>
          <filter-mapping>
          <filter-name> login </filter-name>
          <url-pattern> /* </url-pattern>
          </filter-mapping>
          讀取web.xml中的參數(shù)的方法:
          public void init(FilterConfig arg0) throws ServletException {
             String 參數(shù)值= arg0.getInitParameter("參數(shù)名稱");
          }

          posted on 2009-01-07 08:41 wangjc 閱讀(707) 評(píng)論(0)  編輯  收藏 所屬分類: workspace
          主站蜘蛛池模板: 金溪县| 五家渠市| 商丘市| 乌兰县| 平和县| 绥阳县| 格尔木市| 辉南县| 霍州市| 大石桥市| 铁岭市| 三都| 津南区| 达孜县| 吉首市| 招远市| 南涧| 青海省| 桃江县| 竹溪县| 台南县| 佳木斯市| 伊金霍洛旗| 青海省| 东宁县| 徐闻县| 玛沁县| 股票| 柘城县| 株洲市| 板桥市| 义乌市| 广州市| 西林县| 上林县| 亳州市| 柘荣县| 平顶山市| 铅山县| 海原县| 年辖:市辖区|