您的位置:首页 > 编程语言 > Java开发

JavaWEB之Filter的应用场景(1)

2016-05-25 16:16 357 查看
关于Filter,很多年前学过,记得当时学习的时候有两个应用场景。

1.关于字符编码的应用

2.关于页面访问权限的应用

最近做一个WEB项目,又用到了。所以想总结一下Filter的几种常见的应用场景。

1.关于字符编码的应用(spring)

如果使用spring框架的话,可以直接使用[spring-web.jar]里的[org.springframework.web.filter.CharacterEncodingFilter]这个类。

只需要在web.xml里配置就可以。

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

<filter>

    <filter-name>encodingFilter</filter-name>

    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

    <init-param>

      <param-name>encoding</param-name>

      <param-value>iso8859-1</param-value>

    </init-param>

    <init-param>

      <param-name>forceEncoding</param-name>

      <param-value>true</param-value>

    </init-param>

</filter>
-------------------------------------------------------------------------------------------------------------------------------------------------------------------

2.关于字符编码的应用(自定义类)

   关于字符编码的应用的实现思路和CharacterEncodingFilter类似。

 2.1 自定义类的实现

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

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 org.apache.log4j.Logger;

/*

 *

 *自定义中文过滤器

 */

public class SetCharacterEncodingFilter implements Filter {

    /** log4j */

    private Logger log = Logger.getLogger(this.getClass());

    /** 是否强制设置编码*/

    protected boolean forceEncoding = true;

    /** 编码*/

    protected String encoding = null;

    /** filter设置*/

    protected FilterConfig filterConfig = null;

    /**

     * 继承的destroy()方法实现

     */

    public void destroy() {

        this.encoding = null;

        this.filterConfig = null;

    }

    /**

     * 继承的doFilter()方法实现

     */

    public void doFilter(ServletRequest request, ServletResponse response,

            FilterChain chain) throws IOException, ServletException {

        

        HttpServletRequest req=(HttpServletRequest) request;

        log.debug("URL:"+req.getRequestURL().toString());

        

        if (forceEncoding || (request.getCharacterEncoding() == null)) {

            String encoding = selectEncoding(request);

            if (encoding != null)

                request.setCharacterEncoding(encoding);

        }

        chain.doFilter(request, response);

    }

    /**

     * 继承的init()方法实现

     */

    public void init(FilterConfig filterConfig) throws ServletException {

        this.filterConfig = filterConfig;

        this.encoding = filterConfig.getInitParameter("encoding");

        String value = filterConfig.getInitParameter("forceEncoding");

        if (value == null)

            this.forceEncoding = true;

        else if (value.equalsIgnoreCase("true"))

            this.forceEncoding = true;

        else if (value.equalsIgnoreCase("yes"))

            this.forceEncoding = true;

        else

            this.forceEncoding = false;

    }

    

    /**

     * 编码设置

     */

    protected String selectEncoding(ServletRequest request) {

        return (this.encoding);

    }

}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------

   2.2 web.xml的设置

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

  <filter>

    <filter-name>SetCharacterEncoding</filter-name>

    <filter-class>com.XXX.SetCharacterEncodingFilter</filter-class>

    <init-param>

      <param-name>encoding</param-name>

      <param-value>iso8859-1</param-value>

    </init-param>

    <init-param>

      <param-name>forceEncoding</param-name>

      <param-value>true</param-value>

    </init-param>

  </filter>

  <filter-mapping>

    <filter-name>SetCharacterEncoding</filter-name>

    <url-pattern>/*</url-pattern>

  </filter-mapping>

  <filter>

-------------------------------------------------------------------------------------------------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: