Spring Boot默认使用的Tomcat的Servlet容器,这个容器我们可以自己替换,比如替换成支持JSP的Servlet容器,这个容器已经帮我们注册好了一个Servlet(DispatcherServlet),并且使用DispatcherServletAutoConfiguration帮我们设置好了DispatcherServlet。那么有的时候我们希望使用我们自己的Servlet。这个时候应该这么办呢?Spring Boot也给我们提供了方法,直接看代码:
package com.chester;
import java.util.Arrays;
import org.springframework.boot.SpringBootConfiguration;
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;
@SpringBootConfiguration
public class ServletConfiguration {
//注册setvlet
@Bean
public ServletRegistrationBean createBookServlet(){
//参数为我们自己的Servlet实现和拦截的路径
ServletRegistrationBean servlet = new ServletRegistrationBean(new Myervlet(),"/myServlet");
return servlet;
}
//注册Filter
@Bean
public FilterRegistrationBean createFilterRegistrationBean(){
FilterRegistrationBean filter = new FilterRegistrationBean();
//参数为我们自己的过滤器,下面一个为设置过滤的路径
filter.setFilter(new MyFilter());
filter.setUrlPatterns(Arrays.asList("/hello","/myServlet"));
return filter;
}
//注册Listener
@Bean
public ServletListenerRegistrationBean<StartupListener> createServletListenerRegistrationBean(){
//注册我们自己的监听器
ServletListenerRegistrationBean<StartupListener> listener =new ServletListenerRegistrationBean<>(new MyListener());
return listener;
}
}
这三大组件就是我们原生的Servlet三大组件,下面我给出这三大组件的示例,读者可以根据业务自行修改:
MyServlet实现
package com.chester;
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 {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("Hi Springboot Servlet!!!!");
}
}
MyFilter实现:
package com.chester
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;
import javax.servlet.http.HttpServletRequest;
public class MyFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req =(HttpServletRequest)request;
System.out.println("spring boot web filter " + req.getRequestURI());
chain.doFilter(request, response);
}
public void destroy() {
}
}
MyListener实现:
package com.chester;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
System.out.println("=================");
System.out.println("application is started");
}
public void contextDestroyed(ServletContextEvent event) {
System.out.println("=================");
System.out.println("application is destroyed");
}
}