spring-boot中servlet,过滤器,定时器,监听器使用
2018-03-11 21:09
856 查看
这一节介绍一下在spring-boot中怎么使用servlet,过滤器,监听器,拦截器。使用的方法有很几种,这里仅介绍我学会的一两种方法。
目录结构:
一、servlet
采用注解的方式配置servlet,首先在入口类ServletApplication中添加注解
其次创建MyServlet类,添加注解
二、过滤器
首先同样需要在入口程序中加入配置
其次创建过滤器类MyFilter ,
如果需要配置多个过滤器时,采用注解配置的过滤器无法设置过滤器的优先级,想要配置过滤器的顺序需要采用另一种配置方式。
首先MyFilter 类中去掉注解
其次在入口类中添加接口ServletContextInitializer ,重写方法onStartup,便可以配置过滤器,以添加的先后顺序为过滤器的顺序。
同样可以使用这种方法配置servlet及监听器(去掉MyServlet与MyListener的注解)
三、监听器
首先同样需要在入口程序中加入配置
其次创建过滤器类MyFilter ,添加注解
四、拦截器
拦截器与servlet无关,无需在入口程序中添加注解
首先第一步创建拦截器类,MyInterceptor 继承接口HandlerInterceptor
第二步配置拦截器到服务中,添加@Configuration的作用是使得该配置类被扫描到,有多个拦截器时使用registry.addInterceptor()方法依次添加,添加顺序即为拦截器被调用的顺序。
目录结构:
一、servlet
采用注解的方式配置servlet,首先在入口类ServletApplication中添加注解
@ServletComponentScan这样才会去扫描servlet的注解。
其次创建MyServlet类,添加注解
@WebServlet
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "myServlet", urlPatterns = "/servlet") public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("test Servlet"); doPost(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().write("Hello World!"); response.flushBuffer(); } }
二、过滤器
首先同样需要在入口程序中加入配置
@ServletComponentScan
其次创建过滤器类MyFilter ,
@WebFilter中urlPatterns 参数的含义是匹配所有路径。
package com.example.sprintboot.servlet.util.filter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; @WebFilter(urlPatterns = "/*") public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("init Myfilter"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("do Myfilter "); filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { System.out.println("destroy Myfilter "); } }
如果需要配置多个过滤器时,采用注解配置的过滤器无法设置过滤器的优先级,想要配置过滤器的顺序需要采用另一种配置方式。
首先MyFilter 类中去掉注解
其次在入口类中添加接口ServletContextInitializer ,重写方法onStartup,便可以配置过滤器,以添加的先后顺序为过滤器的顺序。
package com.example.sprintboot.servlet; import com.example.sprintboot.servlet.util.filter.MyFilter; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.boot.web.servlet.ServletContextInitializer; import javax.servlet.DispatcherType; import javax.servlet.ServletContext; import javax.servlet.ServletException; import java.util.EnumSet; @SpringBootApplication public class ServletApplication implements ServletContextInitializer { @Override public void onStartup(ServletContext servletContext) throws ServletException { servletContext.addFilter("myFilter", new MyFilter()) .addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*"); } public static void main(String[] args) { SpringApplication.run(ServletApplication.class, args); } }
同样可以使用这种方法配置servlet及监听器(去掉MyServlet与MyListener的注解)
servletContext.addServlet("myServlet", new MyServlet()).addMapping("/roncoo"); servletContext.addListener(new MyListener());
三、监听器
首先同样需要在入口程序中加入配置
@ServletComponentScan
其次创建过滤器类MyFilter ,添加注解
@WebListener
package com.example.sprintboot.servlet.util.listerner; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; @WebListener public class MyListerner implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent servletContextEvent) { System.out.println("init b8c6 Listerner"); } @Override public void contextDestroyed(ServletContextEvent servletContextEvent) { System.out.println("init destroyListerner"); } }
四、拦截器
拦截器与servlet无关,无需在入口程序中添加注解
@ServletComponentScan
首先第一步创建拦截器类,MyInterceptor 继承接口HandlerInterceptor
package com.example.sprintboot.servlet.util.Interceptor; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("MyInterceptor1>>>>>>>在请求处理之前被调用调用"); return true;// 只有返回true才会继续向下执行,返回false取消当前请求 } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("MyInterceptor1>>>>>>>请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("MyInterceptor1>>>>>>>在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)"); } }
第二步配置拦截器到服务中,添加@Configuration的作用是使得该配置类被扫描到,有多个拦截器时使用registry.addInterceptor()方法依次添加,添加顺序即为拦截器被调用的顺序。
package com.example.sprintboot.servlet.util.configuration; import com.example.sprintboot.servlet.util.Interceptor.MyInterceptor; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; @Configuration public class MyWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { System.out.println("Configuration 配置成功"); registry.addInterceptor(new MyInterceptor()).addPathPatterns("/web/**"); //对来自/web/** 这个链接来的请求进行拦截 } }
相关文章推荐
- servlet、过滤器、监听器使用与概念温习以及在springboot中使用
- SpringBoot实践之(一)--- 过滤器、监听器的使用
- Spring Boot 监听器 过滤器 Servlet 实例
- spring-boot笔记-Servlet、过滤器、监听器(三)
- springboot之过滤器,监听器的使用
- Servlet3.0介绍~使用注解标注监听器(Listener)和过滤器(Filter)
- spring boot 拦截器、过滤器、监听器、定时器使用
- Spring Boot使用Servlet、Filter或Listener的方式
- ServletContextListener在Springboot中的使用
- 使用servlet过滤器和监听器
- Spring Boot使用过滤器
- 对jsp的一个小结(8)使用servlet控制新闻管理、使用过滤器(解决乱码)和监听器(统计在线用户人数)
- Servlet监听器、过滤器与Spring拦截器
- spring boot使用定时器
- Spring Boot使用@Scheduled定时器任务
- 十三、SpringBoot配置过滤器、监听器、Servlets
- springboot 使用Servlet,Filter,Listener的方法
- Spring Boot的filter(过滤器)简单使用实例详解
- spring boot 使用servlet
- springboot使用定时器