Servlet过滤器是小型Web组件,它能拦截请求与响应.他界于Servlet与JSP之间,拦截请求与响应并作出相关的处理.
过滤器的配置:
xml 代码
- <filter>
- <filter-name>filter</filter-name>
- <!-- 请求的处理类 -->
- <filter-class>filterTest.TestFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>filter</filter-name>
- <!-- 要过滤的请求 -->
- <url-pattern>/testFilter</url-pattern>
- </filter-mapping>
处理类的代码:
java 代码
- import java.io.IOException;
- import javax.servlet.Filter;
- import javax.servlet.FilterChain;
- import javax.servlet.FilterConfig;
- import javax.servlet.ServletContext;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class TestFilter implements Filter {
- private FilterConfig fc;
- // 初始化参数
- public void init(FilterConfig arg0) throws ServletException {
- // TODO Auto-generated method stub
- this.fc = arg0;
- }
- // 释放资源
- public void destroy() {
- // TODO Auto-generated method stub
- this.fc = null;
- }
- // 过滤请求
- public void doFilter(ServletRequest arg0, ServletResponse arg1,
- FilterChain arg2) throws IOException, ServletException {
- // TODO Auto-generated method stub
- //
- ServletContext sc = this.fc.getServletContext();
- long before = System.currentTimeMillis();
- System.out.println("开始过滤......");
- // 转换request请求
- HttpServletRequest request = (HttpServletRequest) arg0;
- sc.log("过滤器截获的请求路径:" + request.getServletPath());
- try {
- // Filter 只是链式处理,请求依然转发到目的地址。
- if("manager".equals(request.getSession().getAttribute("scope"))){
- // 发送原目标
- arg2.doFilter(arg0, arg1);
- }else {
- //转发目标
- ((HttpServletResponse)arg1).sendRedirect("http://localhost:8080");
- }
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- long after = System.currentTimeMillis();
- // 记录日志
- sc.log("过滤结束");
- // 再次记录日志
- sc.log("请求被定位到" + ((HttpServletRequest) request).getRequestURI()
- + "所花的时间为: " + (after - before));
- }
- }