今日学到springboot如何注册三大组件,记录下来:
由于springboot默认是以jar包的方式启动嵌入式的servlet容器来启动springboot的web应用,没有web.xml文件。注册三大组件用以下方式:
1. servletRegisstrationBean
自定义一个MyServlet :
public class MyServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req,resp);//这里只调用了一下doGet方法,可以写自己的逻辑。}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().write("hello world");//像浏览器输出字符串}
}
2.FilterRegistrationBean:
自定义一个过滤器:
//要想成为filter就必须实现接口里面的方法
public class MyFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("过滤器init");}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {System.out.println("过滤器执行doFilter");//输出之后要放行出去chain.doFilter(request,response);}@Overridepublic void destroy() {System.out.println("过滤器destroy");}
}
3.ServletListenerRegistrationBean
自定义一个监听器:
//监听器有很多,可以写自己的,实现不同接口的方法
public class MyListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent sce) {System.out.println("web应用启动");}@Overridepublic void contextDestroyed(ServletContextEvent sce) {System.out.println("web应用销毁");}
}
自定义之后,讲他们注册到配置类中:
@Configuration//说明这是一个配置类
public class MyServerConfig {//注册三大组件@Bean//加到容器中public ServletRegistrationBean myServlet(){ServletRegistrationBean registrationBean =new ServletRegistrationBean(new MyServlet(),"myServlet");//......自己设置要修改的属性return registrationBean;}@Bean//加在容器中public FilterRegistrationBean myFilter(){FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();filterRegistrationBean.setFilter(new MyFilter());//设置拦截hello和myFilter两个请求filterRegistrationBean.setUrlPatterns(Arrays.asList("/hello","/myFilter"));return filterRegistrationBean;}@Bean //加到容器中public ServletListenerRegistrationBean myListener(){ServletListenerRegistrationBean<MyListener> registrationBean =new ServletListenerRegistrationBean<>();//......设置一些属性啥的return registrationBean;}
}