1. 注解方式注册
(1)注册 Servlet
@WebServlet(name = "customServlet",urlPatterns = {
"/custom"})
public class CustomServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
System.out.println("自定义servlet # doGet 方法");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
System.out.println("自定义servlet # doPost 方法");
}
}
(2)注册 Filter
@WebFilter(filterName = "CustomFilter" ,urlPatterns = "/*")
public class CustomFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("filter 初始化");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("自定义servlet # doGet 方法");
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
System.out.println("filter 回收");
}
}
(3)注册 Listener
servlet2.4规范中提供了8个listener接口,可以将其分为三类,分别如下:
- 第一类:与servletContext有关的listner接口。包括:ServletContextListener、ServletContextAttributeListener
- 第二类:与HttpSession有关的Listner接口。包括:HttpSessionListner、HttpSessionAttributeListener、HttpSessionBindingListener、 HttpSessionActivationListener;
- 第三类:与ServletRequest有关的Listener接口,包括:ServletRequestListner、ServletRequestAttributeListener
下面实现两个常用的接口:
创建一个类实现ServletRequestListener接口,用于监听ServletRequest对象的创建和销毁,加上注解@WebListener。
@WebListener
public class CustomRequestListener implements ServletRequestListener {
@Override
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("ServletRequestListener 销毁");
}
@Override
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("ServletRequestListener 初始化");
}
}
创建一个类实现ServletContextListener接口,监听ServletContext的创建和销毁。实际上是监听 Web 应用的生命周期,加上注解@WebListener。
@WebListener
public class CustomContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("ServletContextListener 初始化");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("ServletContextListener 销毁");
}
}
2. springboot api 代码方式注册
复用以上四个类,将注解去掉
@Configuration
public class CustomRegistry {
@Bean
public ServletRegistrationBean servletRegistrationBean() {
// ServletRegistrationBean<CustomServlet> customServletServletRegistrationBean = new ServletRegistrationBean<>(new CustomServlet(),"/custom");
ServletRegistrationBean<CustomServlet> customServletServletRegistrationBean = new ServletRegistrationBean<>();
customServletServletRegistrationBean.setServlet(new CustomServlet());
customServletServletRegistrationBean.setUrlMappings(Arrays.asList("/custom"));
return customServletServletRegistrationBean;
}
@Bean
public FilterRegistrationBean filterRegistrationBean() {
// FilterRegistrationBean<CustomFilter> filterRegistrationBean = new FilterRegistrationBean(new CustomFilter());
FilterRegistrationBean<CustomFilter> filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new CustomFilter());
filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));
// 优先级,越低越优先
filterRegistrationBean.setOrder(6);
return filterRegistrationBean;
}
@Bean
public ServletListenerRegistrationBean customRequestListener() {
// ServletListenerRegistrationBean<CustomRequestListener> listenerRegistrationBean = new ServletListenerRegistrationBean<>(new CustomRequestListener());
ServletListenerRegistrationBean<CustomRequestListener> listenerRegistrationBean = new ServletListenerRegistrationBean<>();
listenerRegistrationBean.setListener(new CustomRequestListener());
return listenerRegistrationBean;
}
@Bean
public ServletListenerRegistrationBean customContextListener() {
// ServletListenerRegistrationBean<CustomContextListener> listenerRegistrationBean = new ServletListenerRegistrationBean<>(new CustomContextListener());
ServletListenerRegistrationBean<CustomContextListener> listenerRegistrationBean = new ServletListenerRegistrationBean<>();
listenerRegistrationBean.setListener(new CustomContextListener());
return listenerRegistrationBean;
}
}