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

蹲街弑〆低调 提交于 2019-12-05 11:39:41

由于SpringBoot默认是以jar包的形式启动嵌入式servlet容器来启动SpringBoot的web应用,所以没有web.xml文件,那么如何配置Servlet、Filter、Listener呢?

1、自定义Servlet、Filter、Listener容器

2、将各自对应的ServletRegistrationBeanFilterRegistrationBean、ServletListenerRegistrationBean以组件的形式加入到容器中

具体实现如下:

a、自定义servlert类

package com.myself.servlet;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;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("hello MyServlet");    }}

b、自定义filter类

package com.myself.filter;import javax.servlet.*;import java.io.IOException;public class MyFilter implements Filter {    @Override    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {        System.out.println("MyFilter process...");        chain.doFilter(request,response);    }}

c、自定义listener类

package com.myself.listener;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;public class MyListener implements ServletContextListener {    @Override    public void contextInitialized(ServletContextEvent sce) {        System.out.println("contextInitialized...web应用启动");    }    @Override    public void contextDestroyed(ServletContextEvent sce) {        System.out.println("contextDestroyed...当前web项目销毁");    }}

d、将对应的注册类以组件的形式加入到容器中

package com.myself.config;import com.myself.filter.MyFilter;import com.myself.listener.MyListener;import com.myself.servlet.MyServlet;import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;import org.springframework.boot.web.servlet.ServletRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import java.util.Arrays;@Configurationpublic class MyServerConfig {    @Bean    public ServletRegistrationBean myServlet(){        ServletRegistrationBean<MyServlet> myServletServletRegistrationBean = new ServletRegistrationBean<>();        myServletServletRegistrationBean.setServlet(new MyServlet());        myServletServletRegistrationBean.setUrlMappings(Arrays.asList("/myServlet"));        myServletServletRegistrationBean.setLoadOnStartup(1);        return myServletServletRegistrationBean;    }    @Bean    public FilterRegistrationBean myFilter(){        FilterRegistrationBean<MyFilter> myFilterFilterRegistrationBean = new FilterRegistrationBean<>();        myFilterFilterRegistrationBean.setFilter(new MyFilter());        myFilterFilterRegistrationBean.setUrlPatterns(Arrays.asList("/hello","/myFilter"));        return myFilterFilterRegistrationBean;    }    @Bean    public ServletListenerRegistrationBean myListener(){        ServletListenerRegistrationBean<MyListener> myListenerServletListenerRegistrationBean = new ServletListenerRegistrationBean<>();        myListenerServletListenerRegistrationBean.setListener(new MyListener());        return myListenerServletListenerRegistrationBean;    }}若有理解不到之处,望指正。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!