SpringBoot下注册Servlet三大组件(Servlet,Filter,Listener)

由于SpringBoot是通过jar包的形式运行,其内部嵌入了Servlet容器,项目中不存在web.xml文件,所以注册三大组件就不能通过web.xml文件注册。

1.注册servlet

创建servlet

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServlet extends HttpServlet {

	@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 {
		resp.getWriter().write("自定义servlet");
	}

}

注册servlet

import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.peng.demo.servlet.MyServlet;

@Configuration
public class MyServerConfig {
	
	//注册servlet
	@Bean
	public ServletRegistrationBean<MyServlet> myServlet() {
		ServletRegistrationBean<MyServlet> servletRegistrationBean = new ServletRegistrationBean<MyServlet>(new MyServlet(),"/myServlet");//映射地址
		return servletRegistrationBean;
	}
	

}

2.注册Filter

创建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 MyFilter implements Filter {

	//销毁
	@Override
	public void destroy() {

	}

	//过滤
	@Override
	public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain chain)
			throws IOException, ServletException {
		System.out.println("filter执行啦!!!!!!!!!!");
		chain.doFilter(arg0, arg1);
	}

	//初始化
	@Override
	public void init(FilterConfig arg0) throws ServletException {

	}

}

注册Filter

//注册Filter
	@Bean
	public FilterRegistrationBean myFilter(){
		FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
		filterRegistrationBean.setFilter(new MyFilter());//指定拦截的filter
		filterRegistrationBean.setUrlPatterns(Arrays.asList("/hello","/myServlet"));//指定拦截路径
		return filterRegistrationBean;
	}

3.注册Listener

创建Listener

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MyListener implements ServletContextListener {

	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		System.out.println("web应用关闭啦!!!!!!!!!!!!!");
	}

	@Override
	public void contextInitialized(ServletContextEvent arg0) {
		System.out.println("web应用启动啦!!!!!!!!!!!!!");
	}

}

注册Listener

//注册listener
	@Bean
	public ServletListenerRegistrationBean myListener() {
		ServletListenerRegistrationBean servletListenerRegistrationBean=new ServletListenerRegistrationBean(new MyListener());
		return servletListenerRegistrationBean;
		
	}

4.总结

SprongBoot注册SpringMVC的DispatcherServlet就是通过这种方式注册的

DispatcherServletRegistrationBeanServletRegistrationBean的实现类,默认拦截地址通过this.serverProperties.getServlet().getPath()获取,即拦截所有(包括静态资源,不包括jsp)

所以可以通过server.path修改前端控制器默认拦截路径。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值