由于SpringBoot默认是以jar包的形式启动嵌入式servlet容器来启动SpringBoot的web应用,所以没有web.xml文件,那么如何配置Servlet、Filter、Listener呢?
1、自定义Servlet、Filter、Listener容器
2、将各自对应的ServletRegistrationBean、FilterRegistrationBean、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; }}若有理解不到之处,望指正。