一、代码
1.代码
过滤器:
package com.hp.filter;
import javax.servlet.*;
import java.io.IOException;
//@WebFilter(value = "/users/a.jsp",dispatcherTypes = DispatcherType.FORWARD)
public class BFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("B拦截器出生");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("B开始拦截");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("B拦截结束");
}
@Override
public void destroy() {
System.out.println("B拦截器销毁");
}
}
package com.hp.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
@WebFilter("/*")
public class CountFilter implements Filter {
Map<String,Integer> map;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//初始化map
map=new HashMap<String,Integer>();
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
String ip=servletRequest.getRemoteAddr();
ServletContext app = servletRequest.getServletContext();
if(map.containsKey(ip)){
//如果map里面有该ip则获取该ip并获取他的value并且为他自增
map.put(ip,map.get(ip)+1);
}else{
//如果没有则设置并为他赋值
map.put(ip,1);
}
//再传回application中
app.setAttribute("map",map);
//放行
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
package com.hp.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
@WebFilter("/users/*")
public class LoginFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
//判断是否登录
HttpServletRequest request= (HttpServletRequest) req;
Object user = request.getSession().getAttribute("user");
if (user!=null){
chain.doFilter(req, resp);
System.out.println("放行");
}else {
System.out.println("拦截住,不放行");
request.getRequestDispatcher("/index.jsp").forward(request,resp);
}
}
public void init(FilterConfig config) throws ServletException {
}
}
监听器:
package com.hp.listener;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
@WebListener
public class AttributeListener implements ServletContextAttributeListener, HttpSessionAttributeListener, ServletRequestAttributeListener {
@Override
public void attributeAdded(ServletContextAttributeEvent app) {
System.out.println("app域中有属性新增");
}
@Override
public void attributeRemoved(ServletContextAttributeEvent app) {
System.out.println("app域中有属性删除");
}
@Override
public void attributeReplaced(ServletContextAttributeEvent app) {
System.out.println("app域中有属性修改");
}
@Override
public void attributeAdded(ServletRequestAttributeEvent req) {
System.out.println("req域中有属性新增,新增的属性名和属性值分别是:"+req.getName()+":"+req.getValue());
}
@Override
public void attributeRemoved(ServletRequestAttributeEvent req) {
System.out.println("req域中有属性删除,删除的属性名是:"+req.getName());
}
@Override
public void attributeReplaced(ServletRequestAttributeEvent req) {
System.out.println("req域中有属性修改,修改前的属性名和属性值分别是:"+req.getName()+":"+req.getValue()+
",修改后的属性值是:"+req.getServletRequest().getAttribute(req.getName()));
}
@Override
public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
}
@Override
public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
}
@Override
public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
}
}
package com.hp.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class LifeListener implements ServletContextListener, HttpSessionListener, ServletRequestListener {
@Override
public void contextInitialized(ServletContextEvent app) {
System.out.println("app出生了");
}
@Override
public void contextDestroyed(ServletContextEvent app) {
System.out.println("app销毁了");
}
@Override
public void requestDestroyed(ServletRequestEvent req) {
System.out.println("req销毁了");
}
@Override
public void requestInitialized(ServletRequestEvent app) {
System.out.println("req出生了");
}
@Override
public void sessionCreated(HttpSessionEvent session) {
System.out.println("session出生了");
}
@Override
public void sessionDestroyed(HttpSessionEvent session) {
System.out.println("session销毁了");
}
}
总结
以上就是过滤器和监听器相关的所有代码和方法。