方法一:集成Servlet,Filter,Listener可以直接通过Bean注解,ServletListenerRegistrationBean,FilterRegistrationBean,ServletRegistrationBean来注册的方式。
在web.xml中配置过滤器。这里要谨记一条原则:在web.xml中,监听器>过滤器>servlet。也就是说web.xml中监听器配置在过滤器之前,过滤器配置在servlet之前,否则会出错。
Servlet其实可以看作是一种特殊的java类。
实现代码如下:
创建servlet类并且继承HttpServlet类:
public class MyServlet1 extends HttpServlet{ /** * 系列号 */ private static final long serialVersionUID = 3801244035838976832L; @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("MyServlet doPost ...."); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("MyServlet doGet ...."); // 浏览器一般是get } }
然后在springboot的启动类中实现servlet的注册(使用@Bean注解,直接用java进行配置)
@SpringBootApplication public class SpringBootStudyApplication { public static void main(String[] args) { SpringApplication.run(SpringBootStudyApplication.class, args); } @Bean public ServletRegistrationBean<MyServlet1> getServlet1() { return new ServletRegistrationBean<MyServlet1>(new MyServlet1(), "/my1"); // /my1参数是url的意思 } }
可注册多个servlet:
最后通过浏览器访问:127.0.0.1:8081/my1
在控制台即可打印出因为浏览器是get请求方式:
-----------------------------------------------------------------------------------------------------------------
集成Filter过滤器: 在doFilter()方法中,chain.doFilter()前的一般是对request执行的过滤操作,chain.doFilter后面的代码一般是对response执行的操作。过滤链代码的执行顺序如下:
第一步:创建一个过滤器:
package com.cai.guangbi.demo.filter; 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; public class MyFilter1 implements Filter{ @Override public void destroy() { } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { System.out.println("MyFilter doFilter..."); // 过滤操作代码...... arg2.doFilter(arg0, arg1); // 放行,通过了当前过滤器,递交给下一个filter进行过滤 } @Override public void init(FilterConfig arg0) throws ServletException { } }
在springboot启动应用程序中注册过滤器filter:
@Beanpublic FilterRegistrationBean<MyFilter1> getFilter1() { // getServlet1(), getServlet2()表示这个过滤器可以处理两个servlet类 return new FilterRegistrationBean<MyFilter1>(new MyFilter1(),getServlet1(), getServlet2()); }
访问效果图:http://127.0.0.1:8081/my1
可以在控制台打印出:
同时也可以访问:http://127.0.0.1:8081/my1
----------------
继承listener监听器:
监听器代码如下:
public class MyListener implements HttpSessionListener { @Override public void sessionCreated(HttpSessionEvent se) { System.out.println("MyListener created..."); } @Override public void sessionDestroyed(HttpSessionEvent se) { } }
在spingboot启动类里面加上注解:
@Bean public ServletListenerRegistrationBean<MyListener> getListener() { return new ServletListenerRegistrationBean<MyListener>(new MyListener()); }
因为上面的监听器是监听session事件的,所以在Myservlet1类里面加上session事件,代码如下:
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("MyServlet1 doGet ...."); // 浏览器一般是get req.getSession().setAttribute("my", "hellow"); }
下面访问下地址:http://127.0.0.1:8081/my1
效果图:
------------------------------------
方法二:通过servletContextInitializer注册。
可以直接在springboot启动类里面实现
ServletContextInitializer接口
代码:
public class SpringBootStudyApplication implements ServletContextInitializer{ public static void main(String[] args) { SpringApplication.run(SpringBootStudyApplication.class, args); } @Override public void onStartup(ServletContext servletContext) throws ServletException { servletContext.addServlet("my1", MyServlet1.class).addMapping("/my1"); / 注册了servlet servletContext.addListener(MyListener.class);
} }
----------------
方法三:
使用@servletComponentScan注解:
在spingboot启动类加上注解:
@SpringBootApplication @ServletComponentScan // 这个注解将会扫描servlet,filter,listner public class SpringBootStudyApplication { public static void main(String[] args) { SpringApplication.run(SpringBootStudyApplication.class, args); } }
然后在每个servlet类或者filter类或者listener类加上:
如:@WebServlet(urlPatterns="/my1"),@WebFilter(urlPatterns="/my1"),@webListener
来源:https://www.cnblogs.com/caiguangbi-53/p/10474333.html