AmazingCounters.com

过滤器的使用小案例

编写处理用户请求和响应的  servlet中request 和 response的编码方式的过滤器
 
新建EncodeFilter.java  servlet 实现Filter接口
 

public class EncodeFilter implements Filter{
       //实现接口中的方法
       //定义变量 type 从配置文件中读取值
       private String type ;
       //初始化
       public void init(FilterConfig arg0) throws ServletException {
             //从web.xml中读取值
             this.type =arg0.getInitParameter("type");
      }
       public void doFilter(ServletRequest arg0, ServletResponse arg1,
                  FilterChain arg2) throws IOException, ServletException {
             //将ServletRequest类型强制转换成HttpServletRequest
            HttpServletRequest request=(HttpServletRequest)arg0;
             //将ServletResponse类型强制转换成HttpServletResponse
            HttpServletResponse response=(HttpServletResponse)arg1;
             //设置请求编码
            request.setCharacterEncoding( type);
             //设置应答的html编码
            response.setCharacterEncoding( "text/html;charset="+type );
             //当请求的资源满足规则时容器就会调用doFilter()方法
            arg2.doFilter(arg0, arg1);          
      }
       public void destroy() {
      }
}
 

在web.xml中配置过滤器
       <!-- 设置过滤器的别名和在工程中的路径 -->
       <filter>
             <filter-name> encodeFilter</filter-name >
             <filter-class> com.filter.servlet.EncodeFilter</filter-class >
             <!-- 设置初始化参数 -->
             <init-param>
                         <param-name> type</param-name >
                         <param-value> utf-8</param-value >
             </init-param>      
       </filter>
       <!-- 设置过滤器的映射 -->
       <!-- 过滤链中的执行顺序与设定的filter-mapping先后顺序有关 -->
      <filter-mapping >
             <filter-name> encodeFilter</filter-name >
             <!-- 即所有后缀为.do的 url请求都采用过滤器别名为encodeFilter过滤器 -->
             <url-pattern> *.do</url-pattern >
             <!-- 过滤所有资源
            <url-pattern>/*</url-pattern>
             -->
      </filter-mapping >
 

测试运行,完成filter的基本配置和运行
posted @ 2016-01-11 21:24  御史  阅读(183)  评论(0编辑  收藏  举报