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

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

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

    Java學習

    java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經(jīng)搬家了,新的地址是 http://www.javaly.cn 如果有對文章有任何疑問或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂園)指出,我會盡力幫助解決。一起進步

     

    javax.servlet.Filter運用

    2008年04月07日 星期一 10:25

    Servlets Filter 是Servlet 2.3 規(guī)范中新增加的,它是截取用戶從客戶端提交的請求,在還沒有到達需要訪問的資源時運行的一個類。它操縱來自客戶端的請求,在資源還沒有初發(fā)送到客戶端前截取響應,并處理這些還沒有發(fā)送到客戶端的響應。

    Filters 有許多的應用場合。Servlet 2.3 規(guī)范建議如下的地方可以應用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;


    /**
    *
    * @author
    */
    public class SetCharacterEncodingFilter implements Filter {

    private String encoding;

    /**
    * Called by the web container to indicate to a filter that it is being
    * taken out of service.
    *
    * @todo Implement this javax.servlet.Filter method
    */
    public void destroy() {
    }

    /**
    * The <code>doFilter</code> method of the Filter is called by the
    * container each time a request/response pair is passed through the chain
    * due to a client request for a resource at the end of the chain.
    *
    * @param request
    *            ServletRequest
    * @param response
    *            ServletResponse
    * @param chain
    *            FilterChain
    * @throws IOException
    * @throws ServletException
    * @todo Implement this javax.servlet.Filter method
    */
    public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {
       request.setCharacterEncoding(encoding);
       chain.doFilter(request, response);
    }

    /**
    * @see javax.servlet.Filter#init(FilterConfig)
    */
    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的用法

    如何實現(xiàn)一個過濾器呢?
    1.所在的類實現(xiàn)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 方法中,傳遞參數(shù)為: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>

    如果過濾器要將內(nèi)容傳遞到目的地,則需要FilterChain,將請求繼續(xù)向下轉發(fā)

    過濾器也會執(zhí)行兩次:FilterChain這前執(zhí)行一次,之后再執(zhí)行一次

    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則表示沒有查到所要的內(nèi)容
    if(content!=null)
    if(content.indexOf("AAA")==-1)
    {
    chain.doFilter(request,response);
    }
    esle
    {
    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.對內(nèi)容進行統(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("過濾器初始化");
    }
    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> 參數(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 2008-08-20 16:53 找個美女做老婆 閱讀(4990) 評論(0)  編輯  收藏


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


    網(wǎng)站導航:
     

    導航

    統(tǒng)計

    公告

    本blog已經(jīng)搬到新家了, 新家:www.javaly.cn
     http://www.javaly.cn

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲高清视频在线| 国产成人免费片在线视频观看| 无码精品A∨在线观看免费| 成年女人毛片免费播放视频m| 亚洲精品成a人在线观看| 337p日本欧洲亚洲大胆色噜噜| 国产精品亚洲一区二区三区| 在线观看特色大片免费网站| 在线精品免费视频| 亚洲精品私拍国产福利在线| 国产亚洲综合一区二区三区| 最近2019免费中文字幕6| 亚洲 自拍 另类小说综合图区| 久久精品国产亚洲AV麻豆网站 | 亚洲一区免费视频| 亚洲av日韩av永久在线观看| 久久久久久久岛国免费播放 | 日韩在线视频免费看| 亚洲国产综合无码一区| 亚洲av色香蕉一区二区三区蜜桃| 一级毛片免费观看| 国产精品亚洲高清一区二区| 亚洲heyzo专区无码综合| 精品福利一区二区三区免费视频| 国产亚洲精品美女久久久| 亚洲av永久无码天堂网| xxxx日本免费| 亚洲色婷婷一区二区三区| 一级一片免费视频播放| 国产a级特黄的片子视频免费| 亚洲国产成人精品无码一区二区| 成人爽a毛片免费| 深夜国产福利99亚洲视频| 美女视频黄.免费网址| 成年性午夜免费视频网站不卡| 亚洲黄色免费网址| 午夜精品射精入后重之免费观看| 亚洲日韩av无码| 日韩精品视频在线观看免费| 亚洲精品成人网久久久久久| 激情无码亚洲一区二区三区|