servlet自定义过滤器

来源:互联网 发布:ubuntu无法拖拽复制 编辑:程序博客网 时间:2024/06/08 14:20

web.xml

<!-- 编码过滤器 -->      <filter>          <filter-name>setCharacterEncoding</filter-name>          <filter-class>com.company.strutstudy.web.servletstudy.filter.EncodingFilter</filter-class>          <init-param>              <param-name>encoding</param-name>              <param-value>utf-8</param-value>          </init-param>      </filter>      <filter-mapping>          <filter-name>setCharacterEncoding</filter-name>          <url-pattern>/*</url-pattern>      </filter-mapping>  <!-- 请求url日志记录过滤器 -->      <filter>          <filter-name>logfilter</filter-name>          <filter-class>com.company.strutstudy.web.servletstudy.filter.LogFilter</filter-class>      </filter>      <filter-mapping>          <filter-name>logfilter</filter-name>          <url-pattern>/*</url-pattern>      </filter-mapping>  

编码过滤器

public class EncodingFilter implements Filter {      private String encoding;      private Map<String, String> params = new HashMap<String, String>();      // 项目结束时就已经进行销毁      public void destroy() {          System.out.println("end do the encoding filter!");          params=null;          encoding=null;      }      public void doFilter(ServletRequest req, ServletResponse resp,              FilterChain chain) throws IOException, ServletException {          //UtilTimerStack.push("EncodingFilter_doFilter:");          System.out.println("before encoding " + encoding + " filter!");          req.setCharacterEncoding(encoding);          // resp.setCharacterEncoding(encoding);          // resp.setContentType("text/html;charset="+encoding);          chain.doFilter(req, resp);                System.out.println("after encoding " + encoding + " filter!");          System.err.println("----------------------------------------");          //UtilTimerStack.pop("EncodingFilter_doFilter:");      }      // 项目启动时就已经进行读取      public void init(FilterConfig config) throws ServletException {          System.out.println("begin do the encoding filter!");          encoding = config.getInitParameter("encoding");          for (Enumeration e = config.getInitParameterNames(); e                  .hasMoreElements();) {              String name = (String) e.nextElement();              String value = config.getInitParameter(name);              params.put(name, value);          }      }   }  

日志过滤器

public class LogFilter implements Filter {      FilterConfig config;      public void destroy() {          this.config = null;      }      public void doFilter(ServletRequest req, ServletResponse res,              FilterChain chain) throws IOException, ServletException {          // 获取ServletContext 对象,用于记录日志          ServletContext context = this.config.getServletContext();          //long before = System.currentTimeMillis();          System.out.println("before the log filter!");          //context.log("开始过滤");          // 将请求转换成HttpServletRequest 请求          HttpServletRequest hreq = (HttpServletRequest) req;          // 记录日志          System.out.println("Log Filter已经截获到用户的请求的地址:"+hreq.getServletPath() );          //context.log("Filter已经截获到用户的请求的地址: " + hreq.getServletPath());          try {              // Filter 只是链式处理,请求依然转发到目的地址。              chain.doFilter(req, res);          } catch (Exception e) {              e.printStackTrace();          }          System.out.println("after the log filter!");          //long after = System.currentTimeMillis();          // 记录日志          //context.log("过滤结束");          // 再次记录日志          //context.log(" 请求被定位到" + ((HttpServletRequest) req).getRequestURI()          //      + "所花的时间为: " + (after - before));      }      public void init(FilterConfig config) throws ServletException {          System.out.println("begin do the log filter!");          this.config = config;      }   }  
原创粉丝点击