springBoot项目中集成Servlet、Filter、Listener

六月ゝ 毕业季﹏ 提交于 2020-01-12 21:00:27

方法一:集成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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!