您的位置:首页 > 编程语言 > Java开发

在springboot中自定义Filter、Listener、Servlet、Interceptor

2019-05-06 18:35 274 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/hpukevin/article/details/89887203

前提

在springboot启动类上加上@ServletComponentScan注解

[code]@SpringBootApplication
@ServletComponentScan
public class SpbthymeleafApplication {
public static void main(String[] args) {
SpringApplication.run(SpbthymeleafApplication.class, args);
}
}

1.Filter

[code]
@WebFilter(filterName = "MyFilter",urlPatterns = {"/test/*"})
public class MyFilter implements Filter {

private static Logger logger= LoggerFactory.getLogger(MyFilter.class);

@Override
public void init(FilterConfig filterConfig) throws ServletException {
logger.info("start");
}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request= (HttpServletRequest) servletRequest;
HttpServletResponse response= (HttpServletResponse) servletResponse;
String url=request.getRequestURI();
logger.info(url);
filterChain.doFilter(request,response);
}

@Override
public void destroy() {
logger.info("end");
}
}

2.Listener

 监听器用于监听web应用中某些对象、信息的创建、销毁、增加,修改,删除等动作的发生,然后作出相应的响应处理。当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。常用于统计在线人数和在线用户,系统加载时进行信息初始化,统计网站的访问量等等。

监听器总共分为6类:

按监听的对象划分,可以分为

  • ServletContext对象监听器(ServletContextListener )
  • HttpSession对象监听器(HttpSessionListener )
  • ServletRequest对象监听器(ServletRequestListener )

 

    按监听的事件划分

  • 对象自身的创建和销毁的监听器
  • 对象中属性的创建和消除的监听器
  • session中的某个对象的状态变化的监听器

此处以HttpSessionListener和ServletContextListener为例

2.1 HttpSessionListener

[code]@WebListener("myHttpSessionListener")
public class MyHttpSessionListener implements HttpSessionListener {
private static Logger logger = LoggerFactory.getLogger(MyHttpSessionListener.class);

@Override
public void sessionCreated(HttpSessionEvent se) {
logger.info("session创建");
}

@Override
public void sessionDestroyed(HttpSessionEvent se) {
logger.info("session销毁");
}
}

2.2 ServletContextListener

[code]@WebListener(value = "myListener")
public class MyContextListener implements ServletContextListener {
private static Logger logger= LoggerFactory.getLogger(MyContextListener.class);

@Override
public void contextInitialized(ServletContextEvent sce) {
logger.info("容器启动");
}

@Override
public void contextDestroyed(ServletContextEvent sce) {
logger.info("容器结束");
}
}

3.Servlet

[code]@WebServlet(name = "user", urlPatterns = "/user")
public class MyServlet extends HttpServlet {
private static Logger logger = LoggerFactory.getLogger(MyServlet.class);
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
logger.info("servlet请求的URL",req.getRequestURI());
PrintWriter writer = resp.getWriter();
writer.write("请求成功");
writer.flush();
}
}

4.Interceptor

4.1  先新建一个类继承HandlerInterceptorAdapter,重写preHandle方法

[code]@Component
public class MyInterceptor extends HandlerInterceptorAdapter {
private static Logger logger = LoggerFactory.getLogger(MyInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
logger.info("拦截处理");
return super.preHandle(request, response, handler);
}
}

4.2 注册拦截器

[code]@Configuration
public class registryInterceptor extends WebMvcConfigurationSupport {
private static final String[] excludePathPatterns  = {"/images/*","/js/*"};
@Autowired
private  MyInterceptor myInterceptor;
@Override
protected void addInterceptors(InterceptorRegistry registry) {
super.addInterceptors(registry);
registry.addInterceptor(myInterceptor).addPathPatterns("/**")
.excludePathPatterns(excludePathPatterns);
}
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: