文章目录
- 1.Filter是Servlet规范的三大组件之一(不用导包)
- 2.怎么创建Filter
- 方法1:
- 方法2:直接右击创建一个Filter
- 3.Filter的生命周期
- 1.初始化(只执行一次)
- 2.销毁 destroy(只执行一次)和init相似
- 3.服务doFilter每次请求过滤运行一次
- 4.FilterConfig指的是Filter在web.xml中的注册信息
- 1filterConfig.getFilterName()获取拦截器的名字
- 2.filterConfig.getInitParameterNames();生成初始化的拦截器初始化的名字枚举集合
- 5.filterMapping
- /和/*不同
- 对指定的Servlet进行拦截
- 6.dispatcher
1.Filter是Servlet规范的三大组件之一(不用导包)
就是一个过滤器,在请求道网页上之前进行一个过滤
这个代码分别在显示网页之前,之后,在控制台打印
2.怎么创建Filter
方法1:
先写一个普通的类实现接口Filter
在web.xml进行注册
<!-- 注册filter -->
<filter>
<filter-name>Some-filter</filter-name>
<filter-class>dao.Filter_2</filter-class>
</filter>
<filter-mapping>
<filter-name>Some-filter</filter-name>
<url-pattern>/*</url-pattern><!--这里是进行拦截的url-->
</filter-mapping>
方法2:直接右击创建一个Filter
@WebFilter("/*")这个里面是拦截的path-pattern
package dao;
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.annotation.WebFilter;
/**
* Servlet Filter implementation class Servelct_Filter
*/
@WebFilter("/Servelct_Filter")
public class Servelct_Filter implements Filter {
/**
* Default constructor.
*/
public Servelct_Filter() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here
// pass the request along the filter chain
System.out.println("我也拦截了你,咋地");
chain.doFilter(request, response);
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
3.Filter的生命周期
1.初始化(只执行一次)
启动时候是,被创建
Filter是单列多线程的
Filter在停止程序的时候被销毁
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
2.销毁 destroy(只执行一次)和init相似
public void destroy() {
// TODO Auto-generated method stub
}
3.服务doFilter每次请求过滤运行一次
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here
// pass the request along the filter chain
chain.doFilter(request, response);
}
4.FilterConfig指的是Filter在web.xml中的注册信息
1filterConfig.getFilterName()获取拦截器的名字
2.filterConfig.getInitParameterNames();生成初始化的拦截器初始化的名字枚举集合
package dao;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class Filter_2 implements Filter {
private FilterConfig filterConfig;
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// TODO 自动生成的方法存根
System.out.println("拦截了你,咋地");
chain.doFilter(request, response);
String filterName=filterConfig.getFilterName();
System.out.println("filterName="+filterName);
Enumeration<String> names=filterConfig.getInitParameterNames();
//这里是把名字作为枚举集合存在一起
while (names.hasMoreElements()) {
String string = (String) names.nextElement();
//这里有参数。取名字对应的值
String value=filterConfig.getInitParameter(string);
System.out.println(string+":"+value);
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO 自动生成的方法存根
this.filterConfig=filterConfig;
System.out.println("我是初始化2");
}
}
5.filterMapping
就是在初始化的时候wenb.xml的时候
url-pattern的
/和/*不同
/*:表示当前的Servlet可以匹配所有的请求,无论是静态的还是动态的,统统会被拦截
/ :不会拦截动态的资源请求,就是不会对JSP的页面请求进行拦截,但是会拦截静态的资源请求
对指定的Servlet进行拦截
6.dispatcher