过滤器(filter):请求,响应,需要拦截器放行。
实现一个接口,init(初始化),destroy(摧毁),需要在xml中配置过滤器。
配置过滤器,同配置servlet一样。
<filter>
<filter-name>MyServlet<filter-name>
<filter-class>org.student.filter.MyFilter</filter-class>
</fiter>
<filter-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet</url-pattern>
</fiter-mapping>
①是需要拦截的对象,箭头表示xml执行顺序。这里的name可以自己取名,不过为了方便,大多数时候不改。
filter映射:
/MyServlet 拦截具体一项
/* 拦截所有请求;
通配符:dispatcher请求方式
REQUEST: 拦截http请求,get,post.
FORWARD: 之拦截通过请求转发方式的请求
INCLUDE: 只拦截通过request.getRequestDispatcher("").include("");通过
ERROR: 只拦截发出的请求。
拦截器代码示例:
public class MyFilter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
system.out.print("init");
}
@Override
public void doFilter( ServletResquest request,ServletResponse response,FilterChain chain) throws IOException,ServletException {
system.out.print("拦截请求");
//放行
chain.doFilter(request,response);
system.out.print("拦截响应");
//
}
@Override
public void destroy() {
system.out.print("destroy");
}
}
监听器:
四个范围对象,PageContext,request,session.application。监听器主要监听后三个。
request: ServletRequestLisener
session: HttpSessionListener,
application: ServletContextListener
实例综合:
public class App implements ServletRequestLisener,HttpSessionListener,ServletContextListener{
//每个监听器,提供两个方法,一个监听开始,一个监听结束
@Override
public void contextInitialized(ServletContextEvent sec){
system.out.print("start");
}
@Override
public void contextDestroy(ServletContextEvent sec){
system.out.print("destroy");
}
@Override
public void sessionCreated(HttpSesionEvent se){
system.out.print("start");
}
@Override
public void sessionDestroy(ServletContextEvent se){
system.out.print("destroy");
}
@Override
public void requestInitialized(ServletContextEvent sre){
system.out.print("start");
}
@Override
public void requestInitialized(ServletContextEvent sre){
system.out.print("destroy");
}
}
配置文件-----监听器
<listener>
<listener-class>包名.App</listener-class>
</listener>
监听器增加属性:每个接口有三个方法。
request: ServletRequestAttributeLisener
session: HttpSessionAttributeListener,
application: ServletContextAttributeListener
实例综合:
public class AppAttribute implements ServletRequestAttributeLisener,HttpSessionAttributeListener,ServletContextAttributeListener{
//每个监听器,提供两个方法,一个监听开始,一个监听结束
@Override
public void attributeAdded(ServletContextAttributeEvent scae){
system.out.print("add");
}
@Override
public void attributeRemoved(ServletContextAttributeEvent scae){
system.out.print("remove");
}
@Override
public void attributeReplaced(ServletContextAttributeEvent scae){
system.out.print("replace");
}
@Override
public void attributeAdded(HttpSessionAttributeEvent hsae){
system.out.print("add");
}
@Override
public void attributeRemoved(HttpSessionBindingEvent hsae){
system.out.print("remove");
}
@Override
public void attributeReplaced(HttpSessionBindingEvent hsae){
system.out.print("replace");
}
@Override
public void attributeAdded(HttpSessionBindingEvent fsbe){
system.out.print("add");
}
@Override
public void attributeRemoved(ServletRequestAttributeEvent fsbe){
system.out.print("remove");
}
@Override
public void attributeReplaced(ServletRequestAttributeEvent fsbe){
system.out.print("replace");
}
}